using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.UI; using Newtonsoft.Json; using TMPro; using Starpelly; using HeavenStudio.Common; using HeavenStudio.Editor.Track; namespace HeavenStudio.Editor { public class EditorTheme : MonoBehaviour { public TextAsset ThemeTXT; public static Theme theme; [Header("Components")] [SerializeField] private Image layer; [SerializeField] private Image specialLayers; [SerializeField] private Image tempoLayer; [SerializeField] private Image musicLayer; [SerializeField] private Image sectionLayer; private void Awake() { var defaultTheme = JsonConvert.DeserializeObject(ThemeTXT.text); if (File.Exists(Application.persistentDataPath + "/editorTheme.json")) { string json = File.ReadAllText(Application.persistentDataPath + "/editorTheme.json"); theme = JsonConvert.DeserializeObject(json); // Naive way of doing it? Possibly, but we should have a theme editor in the future. if (defaultTheme.properties.LayerColors != null) { theme.properties.LayerColors = new string[] { theme.properties.Layer1Col, theme.properties.Layer2Col, theme.properties.Layer3Col, theme.properties.Layer4Col, theme.properties.Layer5Col }; // Create a function for this in the future. var savedTheme = JsonConvert.SerializeObject(theme, Formatting.Indented, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.None, NullValueHandling = NullValueHandling.Include, ReferenceLoopHandling = ReferenceLoopHandling.Ignore, }); PersistentDataManager.SaveTheme(savedTheme); } } else { PersistentDataManager.SaveTheme(ThemeTXT.text); theme = defaultTheme; } theme.SetLayersGradient(); } private void Start() { if (Editor.instance == null) return; specialLayers.GetComponent().color = theme.properties.SpecialLayersCol.Hex2RGB(); tempoLayer.GetComponent().color = theme.properties.TempoLayerCol.Hex2RGB(); musicLayer.GetComponent().color = theme.properties.MusicLayerCol.Hex2RGB(); sectionLayer.GetComponent().color = theme.properties.SectionLayerCol.Hex2RGB(); layer.gameObject.SetActive(false); for (int i = 0; i < Timeline.instance.LayerCount; i++) { GameObject layer = Instantiate(this.layer.gameObject, this.layer.transform.parent); layer.SetActive(true); layer.transform.GetChild(0).GetComponent().text = $"Track {i + 1}"; Color c = theme.LayersGradient.Evaluate(i / (float)(Timeline.instance.LayerCount - 1)); layer.GetComponent().color = c; Tooltip.AddTooltip(layer, $"Track {i + 1}"); } Destroy(layer); } } }