-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSpeedify.cs
More file actions
122 lines (111 loc) · 3.83 KB
/
Speedify.cs
File metadata and controls
122 lines (111 loc) · 3.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using RedLoader;
using SonsSdk;
using SUI;
using System.Collections;
using UnityEngine;
namespace Speedify;
public class Speedify : SonsMod
{
public void RegisterAPI()
{
OptionalDependAPI.OptionalDependAPI.Register("Speedify", new API());
}
public class API
{
public void Run(float? speedifyTime = null, float? speedifyLength = null, float? speedifyResetSpeed = null)
{
Speedify.Run(speedifyTime, speedifyLength, speedifyResetSpeed);
}
}
public Speedify()
{
// Uncomment any of these if you need a method to run on a specific update loop.
OnUpdateCallback = OnUpdateMethod;
//OnLateUpdateCallback = MyLateUpdateMethod;
//OnFixedUpdateCallback = MyFixedUpdateMethod;
//OnGUICallback = MyGUIMethod;
// Uncomment this to automatically apply harmony patches in your assembly.
//HarmonyPatchAll = true;
}
protected override void OnInitializeMod()
{
// Do your early mod initialization which doesn't involve game or sdk references here
Config.Init();
}
protected override void OnSdkInitialized()
{
// Do your mod initialization which involves game or sdk references here
// This is for stuff like UI creation, event registration etc.
SpeedifyUi.Create();
// Add in-game settings ui for your mod.
SettingsRegistry.CreateSettings(this, null, typeof(Config));
Instance = this;
}
protected override void OnGameStart()
{
// This is called once the player spawns in the world and gains control.
}
public static Speedify Instance { get; private set; }
private static Coroutines.CoroutineToken speedifyCoroutine;
private static float userConfigSpeedifyTime;
private static bool isUsingCustomSpeed = false;
public static void Run(float? speedifyTime = null, float? speedifyLength = null, float? speedifyResetSpeed = null)
{
float SpeedifyTime = speedifyTime ?? Config.SpeedifyTime.Value;
float SpeedifyLength = speedifyLength ?? Config.SpeedifyLength.Value;
float SpeedifyResetSpeed = speedifyResetSpeed ?? Config.SpeedifyTime.DefaultValue;
if (speedifyCoroutine != null)
{
speedifyCoroutine.Stop();
speedifyCoroutine = null;
}
//If we turning on speedify
if (!Config.SpeedifyToggle.Value)
{
if (SpeedifyTime != Config.SpeedifyTime.Value)
{
userConfigSpeedifyTime = Config.SpeedifyTime.Value;
Config.SpeedifyTime.Value = SpeedifyTime;
isUsingCustomSpeed = true;
}
else
{
isUsingCustomSpeed = false;
}
if (SpeedifyLength != 0f)
{
speedifyCoroutine = SpeedifyLengthCoro(SpeedifyLength).RunCoro();
}
}
// If we're turning speedify off
else
{
SetTime(SpeedifyResetSpeed);
if (isUsingCustomSpeed)
{
Config.SpeedifyTime.Value = userConfigSpeedifyTime;
isUsingCustomSpeed = false;
}
}
Config.SpeedifyToggle.Value = !Config.SpeedifyToggle.Value;
}
public static void OnUpdateMethod()
{
if(Config.SpeedifyToggle.Value)
{
SetTime(Config.SpeedifyTime.Value);
}
}
public static void SetTime(float time)
{
Time.timeScale = time;
}
public static IEnumerator SpeedifyLengthCoro(float SpeedifyLength)
{
yield return Config.SpeedifyLengthRealTimeToggle.Value
? new WaitForSecondsRealtime(SpeedifyLength * 60f)
: new WaitForSeconds(SpeedifyLength * 60f);
if (!Config.SpeedifyToggle.Value) { yield break; }
Run(null, 0f);
}
}