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));
|
|
}
|
|
|
|
}
|