HeavenStudioPlus/Assets/Scripts/LevelEditor/Timeline/SpecialTmeline/TempoDialog.cs
minenice55 d32f5591d2
Auto-Swing (#827)
* BurstLinq

make BGM resync when changing pitch (to test)

* autoswing

some game implementations, most games already work fine

* more game tweaks

* 16th note swing

more game fixes
make pitch change resync optional in the API

* suppress some common warnings

* Update Credits.txt
2024-04-07 04:54:06 +00:00

128 lines
3.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using HeavenStudio;
using HeavenStudio.Editor;
using HeavenStudio.Editor.Track;
using TMPro;
public class TempoDialog : Dialog
{
TempoTimelineObj tempoObj;
[SerializeField] Button deleteButton;
[SerializeField] TMP_InputField tempoInput;
[SerializeField] TMP_InputField swingInput;
[SerializeField] Slider swingSlider;
[SerializeField] Toggle swingDivisionToggle;
public void SwitchTempoDialog()
{
if (dialog.activeSelf)
{
tempoObj = null;
dialog.SetActive(false);
Editor.instance.inAuthorativeMenu = false;
}
else
{
Editor.instance.inAuthorativeMenu = true;
ResetAllDialogs();
dialog.SetActive(true);
swingSlider.maxValue = 0.25f;
swingSlider.minValue = 0;
}
}
public void RefreshDialog()
{
if (tempoObj != null)
{
tempoInput.text = tempoObj.chartEntity["tempo"].ToString("F");
}
}
public void SetTempoObj(TempoTimelineObj tempoObj)
{
this.tempoObj = tempoObj;
deleteButton.gameObject.SetActive(!tempoObj.first);
tempoInput.text = tempoObj.chartEntity["tempo"].ToString("F");
swingInput.text = (tempoObj.chartEntity["swing"] * 400).ToString("F");
swingSlider.value = tempoObj.chartEntity["swing"];
swingDivisionToggle.isOn = tempoObj.chartEntity["swingDivision"] != 1f;
}
public void DeleteTempo()
{
if (tempoObj != null)
{
tempoObj.Remove();
}
if (dialog.activeSelf)
{
SwitchTempoDialog();
}
}
public void SetTempo()
{
if (tempoObj != null)
{
float tempo = float.Parse(tempoInput.text);
tempoObj.SetTempo(tempo);
tempoInput.text = tempoObj.chartEntity["tempo"].ToString("F");
}
}
public void DoubleTempo()
{
if (tempoObj != null)
{
tempoObj.SetTempo(tempoObj.chartEntity["tempo"] * 2);
tempoInput.text = tempoObj.chartEntity["tempo"].ToString("F");
}
}
public void HalveTempo()
{
if (tempoObj != null)
{
tempoObj.SetTempo(tempoObj.chartEntity["tempo"] * 0.5f);
tempoInput.text = tempoObj.chartEntity["tempo"].ToString("F");
}
}
public void SwingSliderUpdate()
{
if (tempoObj != null)
{
tempoObj.SetSwing(System.MathF.Round(swingSlider.value, 4));
swingInput.text = (tempoObj.chartEntity["swing"] * 400).ToString("F");
swingSlider.value = tempoObj.chartEntity["swing"];
}
}
public void SetSwing()
{
if (tempoObj != null)
{
float swing = float.Parse(swingInput.text);
tempoObj.SetSwing(swing * 0.25f / 100f);
swingInput.text = (tempoObj.chartEntity["swing"] * 400).ToString("F");
swingSlider.value = tempoObj.chartEntity["swing"];
}
}
public void SwingDivisionToggle()
{
if (tempoObj != null)
{
tempoObj.SetSwingDivision(swingDivisionToggle.isOn);
}
}
}