Exemple #1
0
 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));
 }
Exemple #2
0
        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();
                }
            }
        }