diff --git a/Assets/Scripts/LoraxCuller.cs b/Assets/Scripts/LoraxCuller.cs index fdf1f86..fc7ebd9 100644 --- a/Assets/Scripts/LoraxCuller.cs +++ b/Assets/Scripts/LoraxCuller.cs @@ -23,23 +23,37 @@ public class LoraxCuller : MonoBehaviour { } private void Update() { - for (int LoraxIndex = 0; LoraxIndex < Loraces.Length; LoraxIndex++) { - for (int ChunkIndex = 0; ChunkIndex < ChunkKeepAliveTransforms.Count; ChunkIndex++) { - GameObject OldChunk = EnabledChunks[LoraxIndex][ChunkIndex]; - if (OldChunk != null) { - OldChunk.SetActive(false); - } - } - } - + Hashtable Refs = new Hashtable(); for (int LoraxIndex = 0; LoraxIndex < Loraces.Length; LoraxIndex++) { Lorax Lorax = Loraces[LoraxIndex]; for (int ChunkIndex = 0; ChunkIndex < ChunkKeepAliveTransforms.Count; ChunkIndex++) { Vector3 KeepAlivePosition = ChunkKeepAliveTransforms[ChunkIndex].position; GameObject NewChunk = Lorax.GetChunkAt(KeepAlivePosition.x, KeepAlivePosition.z); + GameObject OldChunk = EnabledChunks[LoraxIndex][ChunkIndex]; NewChunk.SetActive(true); + + if (Refs.ContainsKey(NewChunk)) { + Refs[NewChunk] = (int)Refs[NewChunk] + 1; + } else { + Refs[NewChunk] = 1; + } + if (NewChunk != OldChunk && OldChunk != null) { + // No longer pointing to OldChunk, remove ref + if (Refs.ContainsKey(OldChunk)) { + Refs[OldChunk] = (int)Refs[OldChunk] - 1; + } else { + Refs[OldChunk] = -1; + } + } + EnabledChunks[LoraxIndex][ChunkIndex] = NewChunk; } } + + foreach (GameObject Key in Refs.Keys) { + if ((int)Refs[Key] < 0) { + Key.SetActive(false); + } + } } }