Skip to content
This repository was archived by the owner on May 17, 2023. It is now read-only.

Commit 1649b5b

Browse files
Add project files.
1 parent f043612 commit 1649b5b

File tree

7 files changed

+641
-0
lines changed

7 files changed

+641
-0
lines changed

GizmosAPI.sln

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 15
4+
VisualStudioVersion = 15.0.28307.1062
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GizmosAPI", "GizmosAPI\GizmosAPI.csproj", "{548EE246-8847-4EE9-A7BC-15448B85B39F}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Release|Any CPU = Release|Any CPU
12+
EndGlobalSection
13+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14+
{548EE246-8847-4EE9-A7BC-15448B85B39F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{548EE246-8847-4EE9-A7BC-15448B85B39F}.Debug|Any CPU.Build.0 = Debug|Any CPU
16+
{548EE246-8847-4EE9-A7BC-15448B85B39F}.Release|Any CPU.ActiveCfg = Release|Any CPU
17+
{548EE246-8847-4EE9-A7BC-15448B85B39F}.Release|Any CPU.Build.0 = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(SolutionProperties) = preSolution
20+
HideSolutionNode = FALSE
21+
EndGlobalSection
22+
GlobalSection(ExtensibilityGlobals) = postSolution
23+
SolutionGuid = {C9A610BA-0764-4D07-9122-6B06FFFE7446}
24+
EndGlobalSection
25+
EndGlobal

GizmosAPI/Gizmos/Gizmos.cs

Lines changed: 308 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,308 @@
1+
using IL2CPPAssetBundleAPI;
2+
using MelonLoader;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using UnityEngine;
7+
using Object = UnityEngine.Object;
8+
9+
namespace GizmosAPI
10+
{
11+
public class Gizmos
12+
{
13+
private static bool? _enabled = null;
14+
private static bool? _overrender = null;
15+
private static readonly string PrefsKey = "Gizmos";
16+
17+
private static GameObject Template;
18+
19+
internal static void Init(IL2CPPAssetBundle Bundle)
20+
{
21+
if (Bundle == null)
22+
{
23+
return;
24+
}
25+
26+
Template = Bundle.Load<GameObject>("Sphere");
27+
Template.hideFlags = HideFlags.DontUnloadUnusedAsset;
28+
}
29+
30+
/// <summary>
31+
/// Toggles wether the gizmos could be drawn or not.
32+
/// </summary>
33+
internal static bool Enabled
34+
{
35+
get
36+
{
37+
if (_enabled == null)
38+
{
39+
_enabled = PlayerPrefs.GetInt($"{PrefsKey}.Enabled", 1) == 1;
40+
}
41+
42+
return _enabled.Value;
43+
}
44+
set
45+
{
46+
if (_enabled != value)
47+
{
48+
_enabled = value;
49+
PlayerPrefs.SetInt($"{PrefsKey}.Enabled", value ? 1 : 0);
50+
}
51+
52+
Objects = Objects.Where(o => o != null).ToList();
53+
54+
foreach (var Obj in Objects)
55+
{
56+
Obj?.SetActive(value);
57+
}
58+
}
59+
}
60+
61+
internal static bool Overrender
62+
{
63+
get
64+
{
65+
if (_overrender == null)
66+
{
67+
_overrender = (!PlayerPrefs.HasKey($"{PrefsKey}.Overrender") || (PlayerPrefs.GetInt($"{PrefsKey}.Overrender", 1) == 1));
68+
}
69+
70+
return _overrender.Value;
71+
}
72+
set
73+
{
74+
if (_overrender != value)
75+
{
76+
_overrender = value;
77+
PlayerPrefs.SetInt($"{PrefsKey}.Overrender", value ? 1 : 0);
78+
}
79+
80+
Objects = Objects.Where(o => o != null).ToList();
81+
82+
foreach (var Obj in Objects)
83+
{
84+
Obj?.GetComponent<MeshRenderer>().material.SetFloat("_ZTest", value ? 0f : 4f);
85+
}
86+
}
87+
}
88+
89+
private static float ColourInterval = 0f;
90+
private static float ScaleInterval = 0f;
91+
internal static void Update()
92+
{
93+
if (Enabled)
94+
{
95+
if (Time.time > ColourInterval)
96+
{
97+
ColourInterval = Time.time + 0.1f;
98+
99+
foreach (var Influence in ObjectInfluences)
100+
{
101+
if (Influence.Item1 != null && Influence.Item2 != null)
102+
{
103+
var NewColour = Influence.Item3();
104+
105+
if (Influence.Item2.material.GetColor("_WireColor") != NewColour)
106+
{
107+
Influence.Item2.material.SetColor("_WireColor", NewColour);
108+
}
109+
}
110+
}
111+
}
112+
113+
if (Time.time > ScaleInterval)
114+
{
115+
ScaleInterval = Time.time + 1f;
116+
117+
foreach (var RawScale in ObjectScales)
118+
{
119+
if (RawScale.Item1 != null)
120+
{
121+
var Scale = RawScale.Item2() * 2f;
122+
var NewScale = new Vector3(Scale, Scale, Scale);
123+
124+
if (RawScale.Item1.transform.localScale != NewScale)
125+
{
126+
RawScale.Item1.transform.localScale = NewScale;
127+
}
128+
}
129+
}
130+
}
131+
}
132+
}
133+
134+
public static List<GameObject> Objects = new List<GameObject>();
135+
public static List<(GameObject, MeshRenderer, Func<Color>)> ObjectInfluences = new List<(GameObject, MeshRenderer, Func<Color>)>();
136+
public static List<(GameObject, Func<float>)> ObjectScales = new List<(GameObject, Func<float>)>();
137+
138+
public static GameObject MakeOutline(MeshRenderer renderer, Func<Color> ColourInfluence = null)
139+
{
140+
var Filter = renderer?.GetComponent<MeshFilter>();
141+
142+
if (Filter != null && !GetChildren(renderer.transform).Any(o => o != null && o.GetComponentInChildren<MeshRenderer>(true) is var rendererthing && rendererthing?.material?.shader?.name != null && rendererthing.material.shader.name.Contains("Outline")))
143+
{
144+
var NewObj = Object.Instantiate(Template, renderer.transform);
145+
NewObj.hideFlags = HideFlags.DontUnloadUnusedAsset;
146+
147+
NewObj.transform.localPosition = Vector3.zero;
148+
NewObj.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f);
149+
150+
NewObj.transform.localScale = new Vector3(1f, 1f, 1f);
151+
152+
NewObj.GetComponent<MeshFilter>().sharedMesh = null;
153+
NewObj.GetComponent<MeshFilter>().sharedMesh = Filter.sharedMesh;
154+
155+
if (ColourInfluence != null)
156+
{
157+
ObjectInfluences.Add((NewObj, NewObj?.GetComponent<MeshRenderer>(), ColourInfluence));
158+
ObjectInfluences = ObjectInfluences.Where(o => o.Item1 != null).ToList();
159+
}
160+
161+
Objects.Add(NewObj);
162+
163+
Objects = Objects.Where(o => o != null).ToList();
164+
165+
NewObj.SetActive(Enabled);
166+
167+
if (Overrender)
168+
{
169+
NewObj.GetComponent<MeshRenderer>().material.SetFloat("_ZTest", 0f);
170+
}
171+
172+
return NewObj;
173+
}
174+
175+
MelonLogger.Error("Renderer Or Filter Is Null!");
176+
177+
return null;
178+
}
179+
180+
public static GameObject MakeOutline(GameObject obj, float Radius, Color Colour)
181+
{
182+
if (obj != null && !GetChildren(obj.transform).Any(o => o != null && o.GetComponentInChildren<MeshRenderer>(true) is var rendererthing && rendererthing?.material?.shader?.name != null && rendererthing.material.shader.name.Contains("Outline")))
183+
{
184+
var NewObj = Object.Instantiate(Template, obj.transform);
185+
NewObj.hideFlags = HideFlags.DontUnloadUnusedAsset;
186+
187+
NewObj.transform.localPosition = Vector3.zero;
188+
NewObj.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f);
189+
190+
var Scale = Radius * 2f;
191+
NewObj.transform.localScale = new Vector3(Scale, Scale, Scale);
192+
193+
NewObj.GetComponent<MeshRenderer>().material = new Material(NewObj?.GetComponent<MeshRenderer>().material);
194+
195+
NewObj.GetComponent<MeshRenderer>().material.SetColor("_WireColor", Colour);
196+
197+
Objects.Add(NewObj);
198+
199+
Objects = Objects.Where(o => o != null).ToList();
200+
201+
NewObj.SetActive(Enabled);
202+
203+
if (Overrender)
204+
{
205+
NewObj.GetComponent<MeshRenderer>().material.SetFloat("_ZTest", 0f);
206+
}
207+
208+
return NewObj;
209+
}
210+
211+
MelonLogger.Error("Object Is Null!");
212+
213+
return null;
214+
}
215+
216+
public static GameObject MakeOutline(GameObject obj, float Radius, Func<Color> ColourInfluence = null)
217+
{
218+
if (obj != null && !GetChildren(obj.transform).Any(o => o != null && o.GetComponentInChildren<MeshRenderer>(true) is var rendererthing && rendererthing?.material?.shader?.name != null && rendererthing.material.shader.name.Contains("Outline")))
219+
{
220+
var NewObj = Object.Instantiate(Template, obj.transform);
221+
NewObj.hideFlags = HideFlags.DontUnloadUnusedAsset;
222+
223+
NewObj.transform.localPosition = Vector3.zero;
224+
NewObj.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f);
225+
226+
var Scale = Radius * 2f;
227+
NewObj.transform.localScale = new Vector3(Scale, Scale, Scale);
228+
229+
NewObj.GetComponent<MeshRenderer>().material = new Material(NewObj?.GetComponent<MeshRenderer>().material);
230+
231+
if (ColourInfluence != null)
232+
{
233+
ObjectInfluences.Add((NewObj, NewObj?.GetComponent<MeshRenderer>(), ColourInfluence));
234+
ObjectInfluences = ObjectInfluences.Where(o => o.Item1 != null).ToList();
235+
}
236+
237+
Objects.Add(NewObj);
238+
239+
Objects = Objects.Where(o => o != null).ToList();
240+
241+
NewObj.SetActive(Enabled);
242+
243+
if (Overrender)
244+
{
245+
NewObj.GetComponent<MeshRenderer>().material.SetFloat("_ZTest", 0f);
246+
}
247+
248+
return NewObj;
249+
}
250+
251+
MelonLogger.Error("Object Is Null!");
252+
253+
return null;
254+
}
255+
256+
public static GameObject MakeOutline(GameObject obj, Func<float> Radius, Func<Color> ColourInfluence = null)
257+
{
258+
if (obj != null && !GetChildren(obj.transform).Any(o => o != null && o.GetComponentInChildren<MeshRenderer>(true) is var rendererthing && rendererthing?.material?.shader?.name != null && rendererthing.material.shader.name.Contains("Outline")))
259+
{
260+
var NewObj = Object.Instantiate(Template, obj.transform);
261+
NewObj.hideFlags = HideFlags.DontUnloadUnusedAsset;
262+
263+
NewObj.transform.localPosition = Vector3.zero;
264+
NewObj.transform.localRotation = new Quaternion(0f, 0f, 0f, 0f);
265+
266+
var Scale = Radius() * 2f;
267+
ObjectScales.Add((NewObj, Radius));
268+
ObjectScales = ObjectScales.Where(o => o.Item1 != null).ToList();
269+
270+
NewObj.transform.localScale = new Vector3(Scale, Scale, Scale);
271+
272+
if (ColourInfluence != null)
273+
{
274+
ObjectInfluences.Add((NewObj, NewObj?.GetComponent<MeshRenderer>(), ColourInfluence));
275+
}
276+
277+
Objects.Add(NewObj);
278+
279+
Objects = Objects.Where(o => o != null).ToList();
280+
281+
NewObj.SetActive(Enabled);
282+
283+
if (Overrender)
284+
{
285+
NewObj.GetComponent<MeshRenderer>().material.SetFloat("_ZTest", 0f);
286+
}
287+
288+
return NewObj;
289+
}
290+
291+
MelonLogger.Error("Object Is Null!");
292+
293+
return null;
294+
}
295+
296+
private static List<Transform> GetChildren(Transform Parent)
297+
{
298+
var Children = new List<Transform>();
299+
300+
for (var i = 0; i < Parent.childCount; i++)
301+
{
302+
Children.Add(Parent.GetChild(i));
303+
}
304+
305+
return Children;
306+
}
307+
}
308+
}

0 commit comments

Comments
 (0)