- using System;
- using System.IO;
- using System.Text.RegularExpressions;
- using UnityEditor;
- using UnityEngine;
- namespace Ink.UnityIntegration {
- [InitializeOnLoad]
- public class InkUnityIntegrationStartupWindow : EditorWindow {
- const string editorPrefsKeyForVersionSeen = "Ink Unity Integration Startup Window Version Confirmed";
- const int announcementVersion = 2;
-
- Vector2 scrollPosition;
- static int announcementVersionPreviouslySeen;
- static string changelogText;
- static InkUnityIntegrationStartupWindow () {
- EditorApplication.delayCall += TryCreateWindow;
- }
- static void TryCreateWindow() {
- if (InkSettings.instance.suppressStartupWindow) return;
- announcementVersionPreviouslySeen = EditorPrefs.GetInt(editorPrefsKeyForVersionSeen, -1);
- if(announcementVersion != announcementVersionPreviouslySeen) {
- ShowWindow();
- }
- }
-
- public static void ShowWindow () {
- InkUnityIntegrationStartupWindow window = GetWindow(typeof(InkUnityIntegrationStartupWindow), true, "Ink Update "+InkLibrary.unityIntegrationVersionCurrent, true) as InkUnityIntegrationStartupWindow;
- window.minSize = new Vector2(200, 200);
- var size = new Vector2(520, 320);
- window.position = new Rect((Screen.currentResolution.width-size.x) * 0.5f, (Screen.currentResolution.height-size.y) * 0.5f, size.x, size.y);
- EditorPrefs.SetInt(editorPrefsKeyForVersionSeen, announcementVersion);
- }
- void OnEnable() {
- var packageDirectory = InkEditorUtils.FindAbsolutePluginDirectory();
- changelogText = File.ReadAllText(Path.Combine(packageDirectory, "CHANGELOG.md"));
- }
-
- void OnGUI ()
- {
- EditorGUILayout.BeginVertical();
- var areaSize = new Vector2(90,90);
- GUILayout.BeginArea(new Rect((position.width-areaSize.x)*0.5f, 15, areaSize.x, areaSize.y));
- EditorGUILayout.BeginVertical();
- EditorGUILayout.LabelField(new GUIContent(InkEditorUtils.inkLogoIcon), GUILayout.Width(areaSize.x), GUILayout.Height(areaSize.x*((float)InkEditorUtils.inkLogoIcon.height/InkEditorUtils.inkLogoIcon.width)));
- GUILayout.Space(5);
- EditorGUILayout.LabelField("Version "+InkLibrary.unityIntegrationVersionCurrent, EditorStyles.centeredGreyMiniLabel);
- EditorGUILayout.LabelField("Ink version "+InkLibrary.inkVersionCurrent, EditorStyles.centeredGreyMiniLabel);
- EditorGUILayout.EndVertical();
- GUILayout.EndArea();
- GUILayout.Space(20+areaSize.y);
-
- if(announcementVersionPreviouslySeen == -1) {
- EditorGUILayout.BeginVertical(GUI.skin.box);
- EditorGUILayout.LabelField("New to ink?", EditorStyles.boldLabel);
- EditorGUILayout.EndVertical();
- }
- {
- EditorGUILayout.BeginHorizontal();
-
- if (GUILayout.Button("About Ink")) {
- Application.OpenURL("https://www.inklestudios.com/ink/");
- }
- if (GUILayout.Button("❤️Support Us!❤️")) {
- Application.OpenURL("https://www.patreon.com/inkle");
- }
- if (GUILayout.Button("Discord Community+Support")) {
- Application.OpenURL("https://discord.gg/inkle");
- }
- if (GUILayout.Button("Close")) {
- Close();
- }
- EditorGUILayout.EndHorizontal();
- }
- EditorGUILayout.Space();
-
- if(changelogText != null) {
- scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
-
- var versionSections = Regex.Split(changelogText, "## ");
- foreach (var section in versionSections) {
- if (string.IsNullOrWhiteSpace(section)) continue;
- var lines = section.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
- var version = lines[0];
- EditorGUILayout.BeginVertical(GUI.skin.box);
- EditorGUILayout.LabelField($"{version}", EditorStyles.boldLabel);
- for (int i = 1; i < lines.Length; i++) {
- var bulletPoint = lines[i].TrimStart('-').TrimStart(' ');
- EditorGUILayout.LabelField($"• {bulletPoint}", EditorStyles.wordWrappedLabel);
- }
- EditorGUILayout.EndVertical();
- }
- EditorGUILayout.EndScrollView();
- }
- EditorGUILayout.Space();
- EditorGUILayout.EndVertical();
- }
- }
- }