@@ -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}
0 commit comments