You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
2.4 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;
public class TimeScaleWindow : EditorWindow
{
// Add menu named "My Window" to the Window menu
private float weightedTimeScale = 0;
[MenuItem("AddOn/TimeScale")]
static void Init()
{
// Get existing open window or if none, make a new one:
TimeScaleWindow window = (TimeScaleWindow)EditorWindow.GetWindow(typeof(TimeScaleWindow));
window.Show();
}
void OnGUI()
{
GUILayout.Label("Base Settings", EditorStyles.boldLabel);
GUILayout.BeginHorizontal();
if (GUILayout.Button("<<")) NextPower(-1);
if (GUILayout.Button("<")) weightedTimeScale--;
if (GUILayout.Button(">")) weightedTimeScale++;
if (GUILayout.Button(">>")) NextPower(1);
GUILayout.EndHorizontal();
weightedTimeScale = GUILayout.HorizontalSlider(weightedTimeScale, -100f, 100f);
Time.timeScale = ConvertWeightedToRaw(weightedTimeScale);
GUILayout.BeginHorizontal();
if (GUILayout.Button("Pause")) weightedTimeScale = -100;
var centeredStyle = GUI.skin.GetStyle("Label");
centeredStyle.alignment = TextAnchor.UpperCenter;
GUILayout.Label(DisplayString(Time.timeScale), centeredStyle);
if (GUILayout.Button("Play")) Time.timeScale = 0;
GUILayout.EndHorizontal();
}
private float ConvertWeightedToRaw(float input)
{
if (input > 0)
return Mathf.Lerp(1, 100, input / 100);
else
return Mathf.Lerp(1, 0, -input / 100);
}
private void NextPower(int dir)
{
float sign = Mathf.Sign(weightedTimeScale);
Debug.Log("Sign: " + sign);
float value = Mathf.Abs(weightedTimeScale + dir);
Debug.Log("Value: " + value);
value = Mathf.NextPowerOfTwo((int)(value));
if (Mathf.Sign(dir) != Mathf.Sign(weightedTimeScale))
value /= 2;
Debug.Log("retVal: " + value + " * " + sign);
weightedTimeScale = value * sign;
}
private void SetSpeed(float newSpeed)
{
Time.timeScale = newSpeed;
}
private string DisplayString(float input)
{
return input.ToString() + " (" + weightedTimeScale + ")";
if (input > 1)
return Mathf.Floor(input).ToString();
else
return ("1/" + Mathf.Floor(-weightedTimeScale));
}
}