HeavenStudioPlus/Assets/Scripts/LevelEditor/Timeline/VolumeTimeline.cs

90 lines
2.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using TMPro;
using Starpelly;
namespace HeavenStudio.Editor.Track
{
public class VolumeTimeline : MonoBehaviour
{
[Header("Components")]
private RectTransform rectTransform;
public TMP_InputField StartingVolume;
private RectTransform StartingVolumeRect;
public List<VolumeTimelineObj> volumeTimelineObjs = new List<VolumeTimelineObj>();
private bool firstUpdate;
void Start()
{
rectTransform = this.GetComponent<RectTransform>();
StartingVolumeRect = StartingVolume.GetComponent<RectTransform>();
}
void Update()
{
if (!firstUpdate)
{
UpdateStartingVolumeText();
firstUpdate = true;
}
if (Timeline.instance.userIsEditingInputField)
return;
if (Timeline.instance.timelineState.musicVolume && !Conductor.instance.NotStopped())
{
if (RectTransformUtility.RectangleContainsScreenPoint(StartingVolumeRect, Input.mousePosition, Editor.instance.EditorCamera))
{
int increase = Mathf.RoundToInt(Input.mouseScrollDelta.y);
if (Input.GetKey(KeyCode.LeftShift))
increase *= 5;
if (increase != 0)
{
GameManager.instance.Beatmap.musicVolume += increase;
UpdateStartingVolumeText();
UpdateStartingVolumeFromText(); // In case the scrolled-to value is invalid.
}
}
}
}
public void UpdateStartingVolumeText()
{
StartingVolume.text = GameManager.instance.Beatmap.musicVolume.ToString();
}
public void UpdateStartingVolumeFromText()
{
// Failsafe against empty string.
if (String.IsNullOrEmpty(StartingVolume.text))
StartingVolume.text = "100";
var newVol = Convert.ToInt32(StartingVolume.text);
// Failsafe against invalid volume.
if (newVol > 100)
{
StartingVolume.text = "100";
newVol = 100;
}
else if (newVol < 0)
{
StartingVolume.text = "0";
newVol = 0;
}
GameManager.instance.Beatmap.musicVolume = newVol;
// In case the newVol ended up differing from the inputted string.
UpdateStartingVolumeText();
}
}
}