-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSledParameters.cs
More file actions
156 lines (139 loc) · 4.46 KB
/
SledParameters.cs
File metadata and controls
156 lines (139 loc) · 4.46 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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using MelonLoader;
using UnityEngine;
namespace SimpleModMenu
{
internal class SledParameters
{
private GameObject body;
private GameObject sled;
private MeshInterpretter meshInterpretter;
public SledData sledData;
public bool isInitialized = false;
/// <summary>
/// Initializes the sled parameters by finding the body and sled GameObjects.
/// </summary>
/// <returns>The IEnumerator</returns>
public IEnumerator Initialize()
{
while (body == null)
{
FindBody();
yield return null;
}
FindSled();
if (sled == null)
{
MelonLogger.Warning("Sled was not found after body initialized.");
}
MelonLogger.Msg("Body found!");
isInitialized = true;
}
/// <summary>
/// Finds the body GameObject in the scene.
/// </summary>
public void FindBody()
{
this.body = GameObject.Find("Snowmobile(Clone)/Body");
}
/// <summary>
/// Finds the sled GameObject by searching for its parent for the CharacterControlPoints class.
/// </summary>
public void FindSled()
{
if (body == null) return;
foreach (Transform parent in body.transform)
{
if (parent.Find("CharacterControlPoints"))
{
Melon<Core>.Logger.Msg("Found parent object: " + parent.gameObject.name);
this.sled = parent.gameObject;
}
}
}
/// <summary>
/// Retrieves the sled data from the sled.
/// </summary>
public void GetSledData()
{
if (meshInterpretter == null)
{
Melon<Core>.Logger.Error("MeshInterpretter component not found on sled.");
return;
}
this.sledData = new SledData();
SledData.CopyValues(meshInterpretter, sledData.originalValues);
SledData.CopyValues(meshInterpretter, sledData.newValues);
}
/// <summary>
/// Applies the new sled parameters to the sled.
/// </summary>
public void Apply()
{
if (meshInterpretter == null)
{
Melon<Core>.Logger.Error("MeshInterpretter component not found on sled.");
return;
}
SledData.CopyValues(sledData.newValues, meshInterpretter);
}
/// <summary>
/// Retrieves the MeshInterpretter component from the sled's body GameObject.
/// </summary>
public void GetMeshInterpretter()
{
if (body == null)
{
Melon<Core>.Logger.Error("Body is null, cannot get MeshInterpretter.");
return;
}
this.meshInterpretter = body.GetComponent<MeshInterpretter>();
if (meshInterpretter == null)
{
Melon<Core>.Logger.Error("MeshInterpretter component not found on sled.");
}
}
/// <summary>
/// Reloads the sled parameters by finding the body and sled GameObjects again.
/// </summary>
public void Reload()
{
FindBody();
if (body == null) { Melon<Core>.Logger.Error("Body not found during reload"); }
FindSled();
if (sled == null) { Melon<Core>.Logger.Error("Sled not found during reload"); }
}
/// <summary>
/// Checks if the sled or body has changed since the last initialization.
/// </summary>
public void CheckIfSledChanged()
{
if (body == null || sled == null && isInitialized)
{
FindBody();
FindSled();
GetMeshInterpretter();
GetSledData();
}
}
/// <summary>
/// Gets the sled GameObject.
/// </summary>
/// <returns>The gameobject</returns>
public GameObject GetSled()
{
return sled;
}
/// <summary>
/// Gets the body GameObject.
/// </summary>
/// <returns>The gameobject</returns>
public GameObject GetBody()
{
return body;
}
}
}