diff --git a/Unity/Assets/JCMG/Curves/Docs.meta b/Unity/Assets/JCMG/Curves/Docs.meta new file mode 100644 index 0000000..61d8a47 --- /dev/null +++ b/Unity/Assets/JCMG/Curves/Docs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7ccf5c90fc7a2eb4f9e29da46ada2e3b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Assets/JCMG/Curves/Docs/Images.meta b/Unity/Assets/JCMG/Curves/Docs/Images.meta new file mode 100644 index 0000000..0853bb8 --- /dev/null +++ b/Unity/Assets/JCMG/Curves/Docs/Images.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35d496f281fbc5144ab85257279fad35 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Assets/JCMG/Curves/Docs/Images/portrait.png b/Unity/Assets/JCMG/Curves/Docs/Images/portrait.png new file mode 100644 index 0000000..63a5e99 Binary files /dev/null and b/Unity/Assets/JCMG/Curves/Docs/Images/portrait.png differ diff --git a/Unity/Assets/JCMG/Curves/Docs/Images/portrait.png.meta b/Unity/Assets/JCMG/Curves/Docs/Images/portrait.png.meta new file mode 100644 index 0000000..bc2a92a --- /dev/null +++ b/Unity/Assets/JCMG/Curves/Docs/Images/portrait.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 46743cf676633b94bb8e103447c732cf +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Assets/JCMG/Curves/Docs/Images/social_share_image.png b/Unity/Assets/JCMG/Curves/Docs/Images/social_share_image.png new file mode 100644 index 0000000..beea823 Binary files /dev/null and b/Unity/Assets/JCMG/Curves/Docs/Images/social_share_image.png differ diff --git a/Unity/Assets/JCMG/Curves/Docs/Images/social_share_image.png.meta b/Unity/Assets/JCMG/Curves/Docs/Images/social_share_image.png.meta new file mode 100644 index 0000000..0bf429e --- /dev/null +++ b/Unity/Assets/JCMG/Curves/Docs/Images/social_share_image.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 682980204b2aea846bee4e8fd6ac2483 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Assets/JCMG/Curves/Scripts/Editor/MenuItems.cs b/Unity/Assets/JCMG/Curves/Scripts/Editor/MenuItems.cs index c57eaa7..c8a60b8 100644 --- a/Unity/Assets/JCMG/Curves/Scripts/Editor/MenuItems.cs +++ b/Unity/Assets/JCMG/Curves/Scripts/Editor/MenuItems.cs @@ -20,5 +20,27 @@ internal static void CreateBezierSpline() EditorGUIUtility.PingObject(obj.gameObject); } + + [MenuItem("Tools/JCMG/Curves/Submit bug or feature request")] + internal static void OpenURLToGitHubIssuesSection() + { + const string GITHUB_ISSUES_URL = "https://github.com/jeffcampbellmakesgames/unity-curves/issues"; + + Application.OpenURL(GITHUB_ISSUES_URL); + } + + [MenuItem("Tools/JCMG/Curves/Donate to support development")] + internal static void OpenURLToKoFi() + { + const string KOFI_URL = "https://ko-fi.com/stampyturtle"; + + Application.OpenURL(KOFI_URL); + } + + [MenuItem("Tools/JCMG/Curves/About")] + internal static void OpenAboutModalDialog() + { + AboutWindow.View(); + } } } diff --git a/Unity/Assets/JCMG/Curves/Scripts/Editor/VersionConstants.cs b/Unity/Assets/JCMG/Curves/Scripts/Editor/VersionConstants.cs new file mode 100644 index 0000000..3dcb36f --- /dev/null +++ b/Unity/Assets/JCMG/Curves/Scripts/Editor/VersionConstants.cs @@ -0,0 +1,11 @@ +namespace JCMG.Curves.Editor +{ + /// + /// Version info for this library. + /// + internal static class VersionConstants + { + // Version + public const string VERSION = "1.1.1"; + } +} diff --git a/Unity/Assets/JCMG/Curves/Scripts/Editor/VersionConstants.cs.meta b/Unity/Assets/JCMG/Curves/Scripts/Editor/VersionConstants.cs.meta new file mode 100644 index 0000000..084a79c --- /dev/null +++ b/Unity/Assets/JCMG/Curves/Scripts/Editor/VersionConstants.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7bed5e8f28933a74fb4ccf1cc036bfaf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Assets/JCMG/Curves/Scripts/Editor/Window.meta b/Unity/Assets/JCMG/Curves/Scripts/Editor/Window.meta new file mode 100644 index 0000000..49877a9 --- /dev/null +++ b/Unity/Assets/JCMG/Curves/Scripts/Editor/Window.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4ee1d68d1abb9c64aa63225f6ed4b098 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Assets/JCMG/Curves/Scripts/Editor/Window/AboutWindow.cs b/Unity/Assets/JCMG/Curves/Scripts/Editor/Window/AboutWindow.cs new file mode 100644 index 0000000..334792f --- /dev/null +++ b/Unity/Assets/JCMG/Curves/Scripts/Editor/Window/AboutWindow.cs @@ -0,0 +1,126 @@ +using UnityEditor; +using UnityEngine; + +namespace JCMG.Curves.Editor +{ + /// + /// A window that shows information about the library and its contributors. + /// + internal sealed class AboutWindow : EditorWindow + { + #pragma warning disable 0649 + + [SerializeField] + private Texture2D _socialShareImage; + + [SerializeField] + private Texture2D _portraitImage; + + #pragma warning restore 0649 + + private const string WINDOW_TITLE = "JCMG Curves"; + private const string VERSION_LABEL = "Version:"; + private const string GITHUB_LABEL = "GitHub:"; + private const string KOFI_LABEL = "KOFI:"; + private const string TWITTER_LABEL = "Twitter:"; + + private const string GITHUB_URL = "https://github.com/jeffcampbellmakesgames"; + private const string KOFI_URL = "https://ko-fi.com/stampyturtle"; + private const string TWITTER_URL = "https://twitter.com/StampyTurtle"; + + private const string SHARE_MESSAGE = "Hi there! My name is Jeff Campbell and I make open source tools for game " + + "developers.\n\nIf you enjoy using this tool and want to support its development " + + "and other high-quality, free open-source tools, follow me on Twitter, " + + "GitHub, and consider buying me a coffee on Ko-Fi."; + + public static void View() + { + var window = CreateInstance(); + window.minSize = new Vector2(512f, 490f); + window.maxSize = window.minSize; + window.titleContent = new GUIContent(WINDOW_TITLE); + window.position = new Rect( + Screen.currentResolution.width / 2f, + Screen.currentResolution.height / 2f, + 0f, + 0f); + window.ShowUtility(); + } + + private void OnGUI() + { + // JCMG Share Image + if (_socialShareImage != null) + { + GUILayout.Label(_socialShareImage); + + DrawSeparator(); + } + + // COC Version + using (new EditorGUILayout.HorizontalScope()) + { + EditorGUILayout.LabelField(VERSION_LABEL, EditorStyles.boldLabel, GUILayout.Width(75f)); + EditorGUILayout.LabelField(VersionConstants.VERSION); + } + + DrawSeparator(); + + // Share message and portrait + using (new EditorGUILayout.HorizontalScope()) + { + if (_portraitImage != null) + { + GUILayout.Label(_portraitImage, GUILayout.Width(96f), GUILayout.Height(96f)); + } + EditorGUILayout.SelectableLabel(SHARE_MESSAGE, EditorStyles.textArea, GUILayout.Height(96f)); + } + + // Links for Github, KoFi, and Twitter + var originalColor = GUI.contentColor; + + // Twitter + using (new EditorGUILayout.HorizontalScope()) + { + EditorGUILayout.LabelField(TWITTER_LABEL, EditorStyles.boldLabel, GUILayout.Width(75f)); + GUI.contentColor = Color.cyan; + if (GUILayout.Button(TWITTER_URL, GUI.skin.label)) + { + Application.OpenURL(TWITTER_URL); + } + + GUI.contentColor = originalColor; + } + + // Github + using (new EditorGUILayout.HorizontalScope()) + { + EditorGUILayout.LabelField(GITHUB_LABEL, EditorStyles.boldLabel, GUILayout.Width(75f)); + GUI.contentColor = Color.cyan; + if (GUILayout.Button(GITHUB_URL, GUI.skin.label)) + { + Application.OpenURL(GITHUB_URL); + } + GUI.contentColor = originalColor; + } + + // KOFI + using (new EditorGUILayout.HorizontalScope()) + { + EditorGUILayout.LabelField(KOFI_LABEL, EditorStyles.boldLabel, GUILayout.Width(75f)); + GUI.contentColor = Color.cyan; + if (GUILayout.Button(KOFI_URL, GUI.skin.label)) + { + Application.OpenURL(KOFI_URL); + } + + GUI.contentColor = originalColor; + } + } + + private void DrawSeparator() + { + GUILayout.Box(string.Empty, GUILayout.ExpandWidth(true), GUILayout.Height(1)); + } + } +} diff --git a/Unity/Assets/JCMG/Curves/Scripts/Editor/Window/AboutWindow.cs.meta b/Unity/Assets/JCMG/Curves/Scripts/Editor/Window/AboutWindow.cs.meta new file mode 100644 index 0000000..d3780e6 --- /dev/null +++ b/Unity/Assets/JCMG/Curves/Scripts/Editor/Window/AboutWindow.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 9b1786740535b4e498488c9a45423efe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - m_ViewDataDictionary: {instanceID: 0} + - _socialShareImage: {fileID: 2800000, guid: 682980204b2aea846bee4e8fd6ac2483, type: 3} + - _portraitImage: {fileID: 2800000, guid: 46743cf676633b94bb8e103447c732cf, type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/JCMG.Curves.Editor.csproj.DotSettings b/Unity/JCMG.Curves.Editor.csproj.DotSettings index 9b48646..9e42951 100644 --- a/Unity/JCMG.Curves.Editor.csproj.DotSettings +++ b/Unity/JCMG.Curves.Editor.csproj.DotSettings @@ -1,5 +1,7 @@  + True True True True - True \ No newline at end of file + True + True \ No newline at end of file diff --git a/Unity/JCMG.Curves.csproj.DotSettings b/Unity/JCMG.Curves.csproj.DotSettings index 2ca4911..98fdc90 100644 --- a/Unity/JCMG.Curves.csproj.DotSettings +++ b/Unity/JCMG.Curves.csproj.DotSettings @@ -1,4 +1,5 @@  + True True True True