From 2d6f8d37f6949e872bec221ee647c61704eed572 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Thu, 15 Dec 2016 12:59:47 +0700 Subject: [PATCH] safe way for add/remove objects of world --- .../IsoTools/Scripts/Internal/IsoAssocList.cs | 4 +++ Assets/IsoTools/Scripts/IsoWorld.cs | 27 ++++++++++++------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/Assets/IsoTools/Scripts/Internal/IsoAssocList.cs b/Assets/IsoTools/Scripts/Internal/IsoAssocList.cs index 1068760..e989fd6 100644 --- a/Assets/IsoTools/Scripts/Internal/IsoAssocList.cs +++ b/Assets/IsoTools/Scripts/Internal/IsoAssocList.cs @@ -66,6 +66,10 @@ namespace IsoTools.Internal { return item; } + public T Peek() { + return _list.Peek(); + } + public void Clear() { _list.Clear(); _dict.Clear(); diff --git a/Assets/IsoTools/Scripts/IsoWorld.cs b/Assets/IsoTools/Scripts/IsoWorld.cs index b98d43a..be6f74a 100644 --- a/Assets/IsoTools/Scripts/IsoWorld.cs +++ b/Assets/IsoTools/Scripts/IsoWorld.cs @@ -374,6 +374,22 @@ namespace IsoTools { _oldVisibles.Remove(iso_object); } + void GrabEnabledIsoObjects() { + var iso_objects = FindObjectsOfType(); + for ( int i = 0, e = iso_objects.Length; i < e; ++i ) { + var iso_object = iso_objects[i]; + if ( iso_object.enabled ) { + AddIsoObject(iso_object); + } + } + } + + void DropIsoObjects() { + while ( _objects.Count > 0 ) { + RemoveIsoObject(_objects.Peek()); + } + } + // --------------------------------------------------------------------- // // Private @@ -775,14 +791,7 @@ namespace IsoTools { } void OnEnable() { - var all_iso_objects = FindObjectsOfType(); - _objects = new IsoAssocList(all_iso_objects.Length); - for ( int i = 0, e = all_iso_objects.Length; i < e; ++i ) { - var iso_object = all_iso_objects[i]; - if ( iso_object.enabled ) { - _objects.Add(iso_object); - } - } + GrabEnabledIsoObjects(); _visibles.Clear(); _oldVisibles.Clear(); _sectors.Clear(); @@ -790,7 +799,7 @@ namespace IsoTools { } void OnDisable() { - _objects.Clear(); + DropIsoObjects(); _visibles.Clear(); _oldVisibles.Clear(); _sectors.Clear();