using System; using System.Collections; using System.Collections.Generic; using Dreamteck.Splines.Primitives; using Ichni.Editor; using Ichni.RhythmGame; using Ichni.RhythmGame.Beatmap; using Ichni.RhythmGame.ThemeBundles.Basic; using Sirenix.OdinInspector; using UnityEngine; namespace Ichni { public class EditorManager : GameElement { public static EditorManager instance; public bool isLoaded; public ProjectManager projectManager; public MusicPlayer musicPlayer; public EditorUIManager uiManager; public EditorSettings editorSettings; public OperationManager operationManager; public BackgroundController backgroundController; public GridController gridController; public CameraManager cameraManager; public PostProcessingManager postProcessingManager; public Canvas judgeHintCanvas; public Timeline timeline; public ProjectInformation projectInformation; public SongInformation songInformation; public BeatmapContainer beatmapContainer; public CommandScripts commandScripts; public NoteBase.NoteJudgeType currentJudgeType; public bool useNotePrefab; public BasePrefabsCollection basePrefabs; [Title("Runtime Global Elements")] public VariablesContainer variablesContainer; public BackgroundSetter backgroundSetter; private void Awake() { instance = this; isLoaded = false; projectManager = new ProjectManager(); operationManager = new OperationManager(); if (!ES3.FileExists(Application.streamingAssetsPath + "/EditorSettings.es3")) { editorSettings = new EditorSettings(300, 3, 100, 100); EditorSettings.SaveSettings(editorSettings); } else { EditorSettings.LoadSettings(ref editorSettings); } } private void Start() { this.elementName = "EditorManager"; this.elementGuid = Guid.Empty; uiManager.hierarchy.GenerateTab(this, null); if (InformationTransistor.instance.isLoadedProject) { LoadProject(InformationTransistor.instance.loadedProjectName); } else { projectManager.GenerateEmptyProject(InformationTransistor.instance.projectInfo_BM, InformationTransistor.instance.songInfo_BM); projectManager.saveManager.Save(); } isLoaded = true; } private void Update() { if(isLoaded) projectManager.autoSaveManager.UpdateAutoSave(); } public void LoadProject(string projectName) { projectManager.loadManager.Load(projectName); musicPlayer.audioSource.clip = songInformation.song; beatmapContainer.gameElementList.ForEach(gameElement => { gameElement.AfterInitialize(); gameElement.Refresh(); }); } public override void SetUpInspector() { IHaveInspection inspector = uiManager.inspector; var container = inspector.GenerateContainer("Editor Manager"); var judgeTypeDropdown = inspector.GenerateDropdown(this, container, "Judge Type", typeof(NoteBase.NoteJudgeType), nameof(currentJudgeType)); var generateFolderButton = inspector.GenerateButton(this, container, "Generate Folder", () => ElementFolder.GenerateElement("Folder", Guid.NewGuid(), new List(), true, null)); var generateBackgroundSetterButton = inspector.GenerateButton(this, container, "Generate Background Setter", () => BackgroundSetter.GenerateElement("Background Setter", Guid.NewGuid(), new List(), true, null, false, "basic", "Skybox", "Background")); var generateVariablesContainerButton = inspector.GenerateButton(this, container, "Generate Variables Container", () => VariablesContainer.GenerateElement("Variables Container", Guid.NewGuid(), new List(), true, null, new Dictionary())); var useNotePrefabToggle = inspector.GenerateToggle(this, container, "Use Note Prefab", nameof(useNotePrefab)); projectInformation.SetUpInspector(); songInformation.SetUpInspector(); cameraManager.SetUpInspector(); gridController.SetUpInspector(); } } }