Skip to content

Commit 85318ea

Browse files
authored
Merge pull request #8 from DekuDesu/development
performance minor, refactored position math, refactored tracked objec…
2 parents 6fb7dfa + 36de05a commit 85318ea

5 files changed

Lines changed: 124 additions & 104 deletions

File tree

MiniMapLibrary/Basic/Range.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace MiniMapLibrary
6+
{
7+
public class Range1D
8+
{
9+
public float Min { get; set; }
10+
11+
public float Max { get; set; }
12+
13+
/// <summary>
14+
/// Equivalent to <see cref="Range1D.Max"/> - <see cref="Min"/>
15+
/// </summary>
16+
public float Difference => Max - Min;
17+
18+
/// <summary>
19+
/// Equivalent to -<see cref="Min"/>(neg)
20+
/// </summary>
21+
public float Offset => -Min;
22+
23+
public void CheckValue(float value)
24+
{
25+
if (value < Min)
26+
{
27+
Min = value;
28+
return;
29+
}
30+
if (value > Max)
31+
{
32+
Max = value;
33+
return;
34+
}
35+
}
36+
37+
public void Clear()
38+
{
39+
Min = float.MaxValue;
40+
Max = float.MinValue;
41+
}
42+
}
43+
}

MiniMapLibrary/Basic/Range3D.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using UnityEngine;
5+
6+
namespace MiniMapLibrary
7+
{
8+
public class Range3D
9+
{
10+
public Range1D X { get; set; } = new Range1D();
11+
12+
public Range1D Y { get; set; } = new Range1D();
13+
14+
public Range1D Z { get; set; } = new Range1D();
15+
16+
public void CheckValue(Vector3 position)
17+
{
18+
X.CheckValue(position.x);
19+
//Y.CheckValue(position.y);
20+
Z.CheckValue(position.z);
21+
}
22+
23+
public void Clear()
24+
{
25+
X.Clear();
26+
Y.Clear();
27+
Z.Clear();
28+
}
29+
}
30+
}

MiniMapMod/MiniMapPlugin.cs

Lines changed: 45 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,9 @@ public class MiniMapPlugin : BaseUnityPlugin
2121

2222
private readonly Minimap Minimap = new();
2323

24-
private float GlobalMinX;
25-
private float GlobalMaxX;
26-
private float GlobalMinZ;
27-
private float GlobalMaxZ;
24+
private readonly Range3D TrackedDimensions = new();
2825

29-
private float XDifference;
30-
private float XOffset;
31-
private float ZDifference;
32-
private float ZOffset;
33-
34-
private bool Enable = false;
26+
private bool Enable = true;
3527

3628
private bool ScannedStaticObjects = false;
3729

@@ -83,11 +75,9 @@ private void Update()
8375
{
8476
if (TryCreateMinimap())
8577
{
86-
ResetGlobalDimensions();
78+
TrackedDimensions.Clear();
8779

8880
ScanScene();
89-
90-
CalculateMinimapConstraints();
9181
}
9282
}
9383
}
@@ -163,7 +153,7 @@ private bool TryCreateMinimap()
163153
private void Reset()
164154
{
165155
TrackedObjects.Clear();
166-
ResetGlobalDimensions();
156+
TrackedDimensions.Clear();
167157
Minimap.Destroy();
168158
ScannedStaticObjects = false;
169159
}
@@ -184,38 +174,38 @@ private void ScanStaticTypes()
184174
return;
185175
}
186176

187-
RegisterTypes<ChestBehavior>(InteractableKind.Chest, dynamicObject: false);
177+
RegisterMonobehaviorType<ChestBehavior>(InteractableKind.Chest, dynamicObject: false);
188178

189-
RegisterTypes<ShrineBloodBehavior>(InteractableKind.Shrine, dynamicObject: false);
179+
RegisterMonobehaviorType<ShrineBloodBehavior>(InteractableKind.Shrine, dynamicObject: false);
190180

191-
RegisterTypes<ShrineChanceBehavior>(InteractableKind.Shrine, dynamicObject: false);
181+
RegisterMonobehaviorType<ShrineChanceBehavior>(InteractableKind.Shrine, dynamicObject: false);
192182

193-
RegisterTypes<ShrineBossBehavior>(InteractableKind.Shrine, dynamicObject: false);
183+
RegisterMonobehaviorType<ShrineBossBehavior>(InteractableKind.Shrine, dynamicObject: false);
194184

195-
RegisterTypes<ShrineCombatBehavior>(InteractableKind.Shrine, dynamicObject: false);
185+
RegisterMonobehaviorType<ShrineCombatBehavior>(InteractableKind.Shrine, dynamicObject: false);
196186

197-
RegisterTypes<ShrineHealingBehavior>(InteractableKind.Shrine, dynamicObject: false);
187+
RegisterMonobehaviorType<ShrineHealingBehavior>(InteractableKind.Shrine, dynamicObject: false);
198188

199-
RegisterTypes<ShrineRestackBehavior>(InteractableKind.Shrine, dynamicObject: false);
189+
RegisterMonobehaviorType<ShrineRestackBehavior>(InteractableKind.Shrine, dynamicObject: false);
200190

201-
RegisterTypes<ShopTerminalBehavior>(InteractableKind.Chest, dynamicObject: false);
191+
RegisterMonobehaviorType<ShopTerminalBehavior>(InteractableKind.Chest, dynamicObject: false);
202192

203-
RegisterTypes<BarrelInteraction>(InteractableKind.Barrel, barrel => !barrel.Networkopened, dynamicObject: false);
193+
RegisterMonobehaviorType<BarrelInteraction>(InteractableKind.Barrel, barrel => !barrel.Networkopened, dynamicObject: false);
204194

205-
RegisterTypes<ScrapperController>(InteractableKind.Utility, dynamicObject: false);
195+
RegisterMonobehaviorType<ScrapperController>(InteractableKind.Utility, dynamicObject: false);
206196

207-
RegisterTypes<GenericInteraction>(InteractableKind.Special, dynamicObject: false);
197+
RegisterMonobehaviorType<GenericInteraction>(InteractableKind.Special, dynamicObject: false);
208198

209-
RegisterTypes<TeleporterInteraction>(InteractableKind.Teleporter, (teleporter) => teleporter.activationState != TeleporterInteraction.ActivationState.Charged, dynamicObject: false);
199+
RegisterMonobehaviorType<TeleporterInteraction>(InteractableKind.Teleporter, (teleporter) => teleporter.activationState != TeleporterInteraction.ActivationState.Charged, dynamicObject: false);
210200

211-
RegisterTypes<SummonMasterBehavior>(InteractableKind.Drone, dynamicObject: false);
201+
RegisterMonobehaviorType<SummonMasterBehavior>(InteractableKind.Drone, dynamicObject: false);
212202

213203
ScannedStaticObjects = true;
214204
}
215205

216206
private void ScanDynamicTypes()
217207
{
218-
RegisterTypes<AimAssistTarget>(InteractableKind.Enemy, x => true, dynamicObject: true);
208+
RegisterMonobehaviorType<AimAssistTarget>(InteractableKind.Enemy, x => true, dynamicObject: true);
219209
}
220210

221211
private void ClearDynamicTrackedObjects()
@@ -237,24 +227,11 @@ private void ClearDynamicTrackedObjects()
237227
}
238228
}
239229

240-
private void CalculateMinimapConstraints()
241-
{
242-
// set the values used to calculate the scaled positions in the minimap for the items
243-
244-
// at this point the global mins and maxes are set determine the differences
245-
XDifference = GlobalMaxX - GlobalMinX;
246-
ZDifference = GlobalMaxZ - GlobalMinZ;
247-
248-
// since the minimap uses a scale from 0d to 1d to position elements we should get the offsets for the x and z dimensions
249-
XOffset = -GlobalMinX;
250-
ZOffset = -GlobalMinZ;
251-
}
252-
253-
private void RegisterTypes<T>(InteractableKind kind, Func<T, bool> ActiveChecker = null, bool dynamicObject = true) where T : MonoBehaviour
230+
private void RegisterMonobehaviorType<T>(InteractableKind kind, Func<T, bool> ActiveChecker = null, bool dynamicObject = true) where T : MonoBehaviour
254231
{
255232
IEnumerable<T> found = GameObject.FindObjectsOfType(typeof(T)).Select(x => (T)x);
256233

257-
RegisterTrackedObjects(found, kind, ActiveChecker, dynamicObject);
234+
RegisterMonobehaviours(found, kind, ActiveChecker, dynamicObject);
258235
}
259236

260237
/// <summary>
@@ -268,86 +245,52 @@ private Vector2 WorldToMinimap(Vector3 position)
268245

269246
float z = position.z;
270247

271-
x += XOffset;
272-
z += ZOffset;
248+
x += TrackedDimensions.X.Offset;
249+
z += TrackedDimensions.Z.Offset;
273250

274-
x /= XDifference;
275-
z /= ZDifference;
251+
x /= TrackedDimensions.X.Difference;
252+
z /= TrackedDimensions.Z.Difference;
276253

277254
return new(x * Settings.MinimapSize.Width, z * Settings.MinimapSize.Height);
278255
}
279256

280-
private void RegisterTrackedObjects<T>(IEnumerable<T> objects, InteractableKind Kind = InteractableKind.none, Func<T, bool> ActiveChecker = null, bool dynamicObject = true) where T : MonoBehaviour
257+
private void RegisterMonobehaviours<T>(IEnumerable<T> objects, InteractableKind Kind = InteractableKind.none, Func<T, bool> ActiveChecker = null, bool dynamicObject = true) where T : MonoBehaviour
281258
{
259+
if (Kind == InteractableKind.none)
260+
{
261+
return;
262+
}
263+
282264
foreach (var item in objects)
283265
{
284-
if (Kind != InteractableKind.none)
266+
if (ActiveChecker == null)
285267
{
286-
ITrackedObject newObject = null;
268+
PurchaseInteraction interaction = item.gameObject.GetComponent<PurchaseInteraction>();
287269

288-
if (ActiveChecker == null)
270+
if (interaction != null)
289271
{
290-
PurchaseInteraction interaction = item.gameObject.GetComponent<PurchaseInteraction>();
291-
292-
if (interaction != null)
293-
{
294-
newObject = new TrackedObject<PurchaseInteraction>(Kind, item.gameObject, null)
295-
{
296-
BackingObject = interaction,
297-
ActiveChecker = (interaction) => interaction.available,
298-
DynamicObject = dynamicObject
299-
};
300-
}
301-
}
272+
RegisterObject(Kind, item.gameObject, interaction, (interaction) => interaction.available, dynamicObject);
302273

303-
if (newObject == null)
304-
{
305-
newObject = new TrackedObject<T>(Kind, item.gameObject, null)
306-
{
307-
BackingObject = item,
308-
ActiveChecker = ActiveChecker,
309-
DynamicObject = dynamicObject
310-
};
274+
continue;
311275
}
312-
313-
TrackedObjects.Add(newObject);
314-
315-
CheckPositionConstraints(item.transform.position);
316276
}
317-
}
318-
}
319277

320-
private void CheckPositionConstraints(Vector3 position)
321-
{
322-
if (position.x < GlobalMinX)
323-
{
324-
GlobalMinX = position.x;
325-
}
326-
else if (position.x > GlobalMaxX)
327-
{
328-
GlobalMaxX = position.x;
329-
}
330-
331-
if (position.z < GlobalMinZ)
332-
{
333-
GlobalMinZ = position.z;
334-
}
335-
else if (position.z > GlobalMaxZ)
336-
{
337-
GlobalMaxZ = position.z;
278+
RegisterObject(Kind, item.gameObject, item, ActiveChecker, dynamicObject);
338279
}
339280
}
340281

341-
private void ResetGlobalDimensions()
282+
private void RegisterObject<T>(InteractableKind type, GameObject gameObject, T BackingObject, Func<T, bool> Expression, bool Dynamic)
342283
{
343-
GlobalMinX = float.MaxValue;
344-
GlobalMaxX = float.MinValue;
284+
ITrackedObject newObject = new TrackedObject<T>(type, gameObject, null)
285+
{
286+
BackingObject = BackingObject,
287+
ActiveChecker = Expression,
288+
DynamicObject = Dynamic
289+
};
345290

346-
GlobalMinZ = float.MaxValue;
347-
GlobalMaxZ = float.MinValue;
291+
TrackedObjects.Add(newObject);
348292

349-
ZOffset = 0;
350-
XOffset = 0;
293+
TrackedDimensions.CheckValue(gameObject.transform.position);
351294
}
352295
}
353296
}

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ https://www.autism.org/donate-autism-research-institute/
3838
If you have an issue, discover a bug, or have a recommendation please file an issue on my github page.
3939

4040
### Change Log
41+
Hotfix 2.04
42+
- enabled mini-map by default, making it so players dont need to remember to press 'M' to show it every time they start the game
43+
- performance minor
44+
4145
Hotfixes 2.03
4246
- changed icon sizes
4347
- added support for colors

manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"name": "MiniMapMod",
3-
"version_number": "2.0.3",
3+
"version_number": "2.0.4",
44
"website_url": "https://github.com/DekuDesu",
5-
"description": "Adds a MiniMap to your game v2.0.3",
5+
"description": "Adds a MiniMap to your game v2.0.4",
66
"dependencies": [
77
"bbepis-BepInExPack-5.4.9",
88
"RiskofThunder-HookGenPatcher-1.2.1"

0 commit comments

Comments
 (0)