protected internal static Chunk CreateByDistanceToTrigger( Vector3Int position, int hierarchySize, ChunkWithChunks parent, ChunkTracker chunkTracker, GeometryManager geometryManager, Vector3Int triggerPosition) { if (IsChunkTooLarge(position, hierarchySize, triggerPosition)) { return(new ChunkWithChunks(position, hierarchySize, parent, chunkTracker, geometryManager)); } return(new ChunkWithGeometry(position, hierarchySize, parent, chunkTracker, geometryManager)); }
protected internal void Divide() { Hide(); var newChunk = new ChunkWithChunks(this); newChunk.Initialized += () => { Destroy(); Parent.ReplaceChild(this, newChunk); newChunk.Instantiate(); }; newChunk.StartInitializing(); }
protected void OnChildDivided(ChunkWithChunks chunk) { TryDestroyThatNeedsToBeDestroyed(); for (int i = 0; i < 27; i++) { if (i == 13) { continue; } int x = (i % 3) - 1; int y = ((i - x) / 3) % 3 - 1; int z = ((i - y) / 9) % 3 - 1; Vector3Int newPosition = chunk.Position + new Vector3Int(x, y, z) * Chunk.HierarchySize2WorldSize(HierarchySize); if (!_children.ContainsKey(newPosition)) { var newChunk = new ChunkWithGeometry(newPosition, HierarchySize, this, ChunkTracker, GeometryManager); _children.Add(newPosition, newChunk); newChunk.Initialized += newChunk.Instantiate; newChunk.StartInitializing(); } } }