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.UI; namespace Ichni.Editor { public partial class ToolBar : StaticWindow { [Title("Buttons")] public Button projectInfoButton; public Button songInfoButton; public Button saveButton; public Button exportButton; public Button clipSaveButton; public Button clipLoadButton; public Button beatmapToolsButton; [Title("Windows")] public GeneralSecondaryWindow clipManagementWindow; protected override void Start() { base.Start(); saveButton.onClick.AddListener(EditorManager.instance.projectManager.saveManager.Save); exportButton.onClick.AddListener(EditorManager.instance.projectManager.exportManager.Export); clipSaveButton.onClick.AddListener(GenerateSaveClipWindow); clipLoadButton.onClick.AddListener(GenerateLoadClipWindow); beatmapToolsButton.onClick.AddListener(GenerateBeatmapToolsWindow); } } public partial class ToolBar { 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 clipNameInputField = saveClipWindow.GenerateInputField(container, "Clip Name", currentElement.elementName); var applyClipButton = saveClipWindow.GenerateButton(container, "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 clipNameInputField = loadClipWindow.GenerateInputField(container, "Clip Name"); var applyClipButton = loadClipWindow.GenerateButton(container, "Apply", () => { EditorManager.instance.projectManager.beatmapClipManager.LoadClip(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 applyTimeOnNameButton = beatmapToolsWindow.GenerateButton(container, "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(); } }); } } }