using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using Ichni.RhythmGame; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; namespace Ichni.Editor { public partial class ToolBar : StaticWindow { [Title("Buttons")] public Button escapeButton; public Button reloadButton; public Button projectInfoButton; public Button songInfoButton; public Button saveButton; public Button exportButton; public Button mergeButton; public Button clipSaveButton; public Button clipLoadButton; public Button beatmapToolsButton; [Title("Windows")] public GeneralSecondaryWindow clipManagementWindow; protected override void Start() { base.Start(); escapeButton.onClick.AddListener(GenerateEscapeConfirmWindow); reloadButton.onClick.AddListener(GenerateReloadConfirmWindow); saveButton.onClick.AddListener(EditorManager.instance.projectManager.saveManager.Save); exportButton.onClick.AddListener(EditorManager.instance.projectManager.exportManager.Export); mergeButton.onClick.AddListener(GenerateMergeWindow); clipSaveButton.onClick.AddListener(GenerateSaveClipWindow); clipLoadButton.onClick.AddListener(GenerateLoadClipWindow); beatmapToolsButton.onClick.AddListener(GenerateBeatmapToolsWindow); } } public partial class ToolBar { private void GenerateEscapeConfirmWindow() { GeneralSecondaryWindow escapeConfirmWindow = Instantiate(EditorManager.instance.basePrefabs.generalSecondaryWindow, EditorManager.instance.uiManager.mainPage.mainCanvas.GetComponent()).GetComponent(); escapeConfirmWindow.Initialize("Confirm Escape"); var container = escapeConfirmWindow.GenerateContainer(); var clipSettings = container.GenerateSubcontainer(3); var applyClipButton = escapeConfirmWindow.GenerateButton(clipSettings, "Yes", () => { SceneManager.LoadScene("StartMenu"); }); var cancelButton = escapeConfirmWindow.GenerateButton(clipSettings, "No", () => { escapeConfirmWindow.closeButton.onClick.Invoke(); }); } private void GenerateReloadConfirmWindow() { GeneralSecondaryWindow escapeConfirmWindow = Instantiate(EditorManager.instance.basePrefabs.generalSecondaryWindow, EditorManager.instance.uiManager.mainPage.mainCanvas.GetComponent()).GetComponent(); escapeConfirmWindow.Initialize("Confirm Reload"); var container = escapeConfirmWindow.GenerateContainer(); var clipSettings = container.GenerateSubcontainer(3); var applyClipButton = escapeConfirmWindow.GenerateButton(clipSettings, "Yes", () => { SceneManager.LoadScene("EditorScene"); }); var cancelButton = escapeConfirmWindow.GenerateButton(clipSettings, "No", () => { escapeConfirmWindow.closeButton.onClick.Invoke(); }); } private void GenerateSaveClipWindow() { GameElement currentElement = EditorManager.instance.operationManager.currentSelectedElements[0]; if (currentElement == null) { LogWindow.Log("No Game Element selected.", Color.red); return; } if (clipManagementWindow != null) { LogWindow.Log("Clip Management Window already exists.", Color.red); return; } GeneralSecondaryWindow saveClipWindow = Instantiate(EditorManager.instance.basePrefabs.generalSecondaryWindow, EditorManager.instance.uiManager.mainPage.mainCanvas.GetComponent()).GetComponent(); clipManagementWindow = saveClipWindow; saveClipWindow.Initialize("Save Clip: " + currentElement.elementName, () => clipManagementWindow = null); var container = saveClipWindow.GenerateContainer(); var clipSettings = container.GenerateSubcontainer(3); var clipNameInputField = saveClipWindow.GenerateInputField(clipSettings, "Clip Name", currentElement.elementName); var applyClipButton = saveClipWindow.GenerateButton(clipSettings, "Apply", () => { EditorManager.instance.projectManager.beatmapClipManager.SaveClip(clipNameInputField.GetValue()); }); } private void GenerateLoadClipWindow() { GameElement currentElement = EditorManager.instance.operationManager.currentSelectedElements[0]; if (currentElement == null) { LogWindow.Log("No Game Element selected.", Color.red); return; } GameElement loadTarget = currentElement == EditorManager.instance ? null : currentElement.parentElement; if (clipManagementWindow != null) { LogWindow.Log("Clip Management Window already exists.", Color.red); return; } GeneralSecondaryWindow loadClipWindow = Instantiate(EditorManager.instance.basePrefabs.generalSecondaryWindow, EditorManager.instance.uiManager.mainPage.mainCanvas.GetComponent()).GetComponent(); clipManagementWindow = loadClipWindow; loadClipWindow.Initialize("Load Clip", () => clipManagementWindow = null); var container = loadClipWindow.GenerateContainer(); var clipSettings = container.GenerateSubcontainer(3); var clipNameInputField = loadClipWindow.GenerateInputField(clipSettings, "Clip Name"); var applyClipButton = loadClipWindow.GenerateButton(clipSettings, "Apply", () => { EditorManager.instance.projectManager.beatmapClipManager.LoadClip(clipNameInputField.GetValue()); }); } private void GenerateMergeWindow() { GeneralSecondaryWindow mergeWindow = Instantiate(EditorManager.instance.basePrefabs.generalSecondaryWindow, EditorManager.instance.uiManager.mainPage.mainCanvas.GetComponent()).GetComponent(); mergeWindow.Initialize("Merge Beatmap"); var container = mergeWindow.GenerateContainer(); var clipSettings = container.GenerateSubcontainer(3); var clipNameInputField = mergeWindow.GenerateInputField(clipSettings, "Beatmap Name"); var applyClipButton = mergeWindow.GenerateButton(clipSettings, "Apply", () => { EditorManager.instance.projectManager.beatmapMergeManager.MergeBeatmap(clipNameInputField.GetValue()); }); } } public partial class ToolBar { private void GenerateBeatmapToolsWindow() { GeneralSecondaryWindow beatmapToolsWindow = Instantiate(EditorManager.instance.basePrefabs.generalSecondaryWindow, EditorManager.instance.uiManager.mainPage.mainCanvas.GetComponent()).GetComponent(); beatmapToolsWindow.Initialize("Beatmap Tools", () => clipManagementWindow = null); var container = beatmapToolsWindow.GenerateContainer("Note Tools"); var beatmapToolsSettings = container.GenerateSubcontainer(3); var applyTimeOnNameButton = beatmapToolsWindow.GenerateButton(beatmapToolsSettings, "Apply Time On Note Name", () => { List allNotes = EditorManager.instance.beatmapContainer.gameElementList.FindAll(x => x is NoteBase).ConvertAll(x => x as NoteBase); List allTaps = allNotes.FindAll(x => x is Tap).ConvertAll(x => x as Tap); List allStays = allNotes.FindAll(x => x is Stay).ConvertAll(x => x as Stay); List allHolds = allNotes.FindAll(x => x is Hold).ConvertAll(x => x as Hold); List allFlicks = allNotes.FindAll(x => x is Flick).ConvertAll(x => x as Flick); foreach (var tap in allTaps.Where(tap => tap.elementName == "New Tap" || Regex.IsMatch(tap.elementName, @"Tap \(\d+\)"))) { tap.elementName = "Tap (" + tap.exactJudgeTime + ")"; tap.Refresh(); } foreach (var stay in allStays.Where(stay => stay.elementName == "New Stay" || Regex.IsMatch(stay.elementName, @"Stay \(\d+\)"))) { stay.elementName = "Stay (" + stay.exactJudgeTime + ")"; stay.Refresh(); } foreach (var hold in allHolds.Where(hold => hold.elementName == "New Hold" || Regex.IsMatch(hold.elementName, @"Hold \(\d+-\d+\)"))) { hold.elementName = "Hold (" + hold.exactJudgeTime + "-" + hold.holdEndTime + ")"; hold.Refresh(); } foreach (var flick in allFlicks.Where(flick => flick.elementName == "New Flick" || Regex.IsMatch(flick.elementName, @"Flick \(\d+\)"))) { flick.elementName = "Flick (" + flick.exactJudgeTime + ")"; flick.Refresh(); } }); } } }