mirror of
https://github.com/RHeavenStudioPlus/HeavenStudioPlus.git
synced 2024-12-01 22:07:31 +00:00
fd1df6687e
* 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
128 lines
3.3 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|