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; }
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; }); }