ProjectDDD/Assets/Plugins/AllIn1VfxToolkit/Demo & Assets/Demo/Scripts/AllIn1TimeControl.cs
2025-07-08 19:46:31 +09:00

87 lines
3.4 KiB
C#

using UnityEngine;
using UnityEngine.UI;
namespace AllIn1VfxToolkit.Demo.Scripts
{
public class AllIn1TimeControl : MonoBehaviour
{
[SerializeField] private KeyCode increaseTimeScale = KeyCode.UpArrow;
[SerializeField] private KeyCode increaseTimeScaleAlt = KeyCode.W;
[SerializeField] private KeyCode decreaseTimeScale = KeyCode.DownArrow;
[SerializeField] private KeyCode decreaseTimeScaleAlt = KeyCode.S;
[SerializeField] private KeyCode pauseKey = KeyCode.P;
[SerializeField, Range(0f, 1f)] private float timeScaleInterval = 0.05f;
[SerializeField] private Slider timeScaleSlider;
[SerializeField] private Image pausedButtonImage;
[SerializeField] private Color pausedButtonColor;
private bool timeScaleSliderNotNull;
private float lastChangeTime;
private AllIn1DemoScaleTween pausedButtonTween;
private Text pausedButtonText;
private void Start()
{
timeScaleSliderNotNull = timeScaleSlider != null;
pausedButtonTween = pausedButtonImage.GetComponent<AllIn1DemoScaleTween>();
pausedButtonText = pausedButtonImage.GetComponentInChildren<Text>();
UpdateTimeScaleUI();
if(timeScaleSliderNotNull) timeScaleSlider.onValueChanged.AddListener(delegate { ChangeTimeScale(timeScaleSlider.value - Time.timeScale); });
}
private void Update()
{
if(Input.GetKeyDown(increaseTimeScale) || Input.GetKeyDown(increaseTimeScaleAlt)) ChangeTimeScale(timeScaleInterval);
if(Input.GetKeyDown(decreaseTimeScale) || Input.GetKeyDown(decreaseTimeScaleAlt)) ChangeTimeScale(-timeScaleInterval);
if(Input.GetKeyDown(pauseKey))
{
if(Time.timeScale < 0.01f) ChangeTimeScale(1f - Time.timeScale);
else ChangeTimeScale(-Time.timeScale);
pausedButtonTween.ScaleUpTween();
}
float timeScaleChangeInterval = 0.1f;
if(!(Time.unscaledTime - lastChangeTime > timeScaleChangeInterval)) return;
if(Input.GetKey(increaseTimeScale) || Input.GetKey(increaseTimeScaleAlt)) ChangeTimeScale(timeScaleInterval);
if(Input.GetKey(decreaseTimeScale) || Input.GetKey(decreaseTimeScaleAlt)) ChangeTimeScale(-timeScaleInterval);
}
private void ChangeTimeScale(float changeAmount)
{
Time.timeScale = Mathf.Clamp(Time.timeScale + changeAmount, 0.0f, 1f);
lastChangeTime = Time.unscaledTime;
UpdateTimeScaleUI();
}
private void UpdateTimeScaleUI()
{
if(timeScaleSliderNotNull) timeScaleSlider.value = Time.timeScale;
if(Time.timeScale < 0.01f)
{
pausedButtonText.text = "Unpause";
pausedButtonImage.color = pausedButtonColor;
}
else
{
pausedButtonText.text = "Pause";
pausedButtonImage.color = Color.white;
}
}
public void PauseUiButton()
{
if(Time.timeScale < 0.01f) Time.timeScale = 1f;
else Time.timeScale = 0f;
UpdateTimeScaleUI();
}
public void CurrentEffectChanged()
{
if(Time.timeScale < 0.01f)
{
Time.timeScale = 0.1f;
UpdateTimeScaleUI();
}
}
}
}