Пример #1
0
        private void ShiftChunks(Vector2Int focalChunkOffset)
        {
            var shiftedChunks = new GridChunk[3, 3];

            ForEachLoadedChunkSlot(slot =>
            {
                var oldChunk = _loadedChunkSlots[slot.x, slot.y];

                if (oldChunk != null)
                {
                    var newChunkPosition = slot - focalChunkOffset;

                    if (LoadedChunkSlotExists(newChunkPosition) == false)
                    {
                        oldChunk.Dispose();
                        return;
                    }

                    oldChunk.MoveTo(newChunkPosition * ChunkSize);
                    shiftedChunks[newChunkPosition.x, newChunkPosition.y] = oldChunk;
                }
            });

            _loadedChunkSlots = shiftedChunks;
        }
Пример #2
0
        private void LoadChunks()
        {
            ForEachLoadedChunkSlot(slot =>
            {
                var scenePosition = new Vector2Int(slot.x * ChunkSize, slot.y * ChunkSize);
                var chunkPosition = _focalChunkPosition + new Vector2Int(slot.x - 1, slot.y - 1);

                if (ChunkPositionIsOutsideGrid(chunkPosition) || ChunkIsLoaded(chunkPosition))
                {
                    return;
                }

                var newChunk = new GridChunk(ChunkSize, chunkPosition, scenePosition, _cellGenerator);

                _loadedChunkSlots[slot.x, slot.y] = newChunk;
            });
        }