214 lines
9.9 KiB
C#
214 lines
9.9 KiB
C#
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<RectTransform>()).GetComponent<GeneralSecondaryWindow>();
|
|
|
|
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<RectTransform>()).GetComponent<GeneralSecondaryWindow>();
|
|
|
|
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<RectTransform>()).GetComponent<GeneralSecondaryWindow>();
|
|
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<string>());
|
|
});
|
|
}
|
|
|
|
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<RectTransform>()).GetComponent<GeneralSecondaryWindow>();
|
|
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<string>());
|
|
});
|
|
}
|
|
|
|
private void GenerateMergeWindow()
|
|
{
|
|
GeneralSecondaryWindow mergeWindow = Instantiate(EditorManager.instance.basePrefabs.generalSecondaryWindow,
|
|
EditorManager.instance.uiManager.mainPage.mainCanvas.GetComponent<RectTransform>()).GetComponent<GeneralSecondaryWindow>();
|
|
|
|
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<string>());
|
|
});
|
|
}
|
|
}
|
|
|
|
public partial class ToolBar
|
|
{
|
|
private void GenerateBeatmapToolsWindow()
|
|
{
|
|
GeneralSecondaryWindow beatmapToolsWindow =
|
|
Instantiate(EditorManager.instance.basePrefabs.generalSecondaryWindow,
|
|
EditorManager.instance.uiManager.mainPage.mainCanvas.GetComponent<RectTransform>()).GetComponent<GeneralSecondaryWindow>();
|
|
|
|
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<NoteBase> allNotes = EditorManager.instance.beatmapContainer.gameElementList.FindAll(x => x is NoteBase).ConvertAll(x => x as NoteBase);
|
|
List<Tap> allTaps = allNotes.FindAll(x => x is Tap).ConvertAll(x => x as Tap);
|
|
List<Stay> allStays = allNotes.FindAll(x => x is Stay).ConvertAll(x => x as Stay);
|
|
List<Hold> allHolds = allNotes.FindAll(x => x is Hold).ConvertAll(x => x as Hold);
|
|
List<Flick> 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();
|
|
}
|
|
});
|
|
|
|
}
|
|
}
|
|
} |