public override TileChunk GetChunk(TileMap tile_map, int pos_x, int pos_y) { IPair index = new IPair(pos_x, pos_y); if (!chunks.ContainsKey(index)) { TileChunk chunk = ScriptableObject.CreateInstance <TileChunk>(); chunk.index_x = pos_x; chunk.index_y = pos_y; chunk.pos_x = pos_x * tile_map.chunk_size_x; chunk.pos_y = pos_y * tile_map.chunk_size_y; chunk.size_x = tile_map.chunk_size_x; chunk.size_y = tile_map.chunk_size_y; TileChunkDataLayer data_layer = new TileChunkDataLayer(chunk.size_x, chunk.size_y); for (int i = 0; i < chunk.size_x * chunk.size_y; ++i) { data_layer.ids[i] = (Random.value >= 0.5f ? 1 : 0); } chunk.data_layers = new List <TileChunkDataLayer>(); chunk.user_data = new List <ScriptableObject>(); chunk.data_layers.Add(data_layer); chunks.Add(index, chunk); } return(chunks[index]); }
public VoxelChunk GetVoxelChunkAtWorldLocation(Vector3 worldLocation) { Point3 id = GetChunkID(worldLocation); if (ChunkMap.ContainsKey(id)) { return(ChunkMap[id]); } return(null); }
public bool AddChunk(VoxelChunk chunk) { if (ChunkMap.Count < MaxChunks && !ChunkMap.ContainsKey(chunk.ID)) { ChunkMap[chunk.ID] = chunk; return(true); } else if (ChunkMap.ContainsKey(chunk.ID)) { return(false); } return(false); }
public List <VoxelChunk> GetAdjacentChunks(VoxelChunk chunk) { List <VoxelChunk> toReturn = new List <VoxelChunk>(); for (int dx = -1; dx < 2; dx++) { for (int dz = -1; dz < 2; dz++) { if (dx != 0 || dz != 0) { Point3 key = new Point3(chunk.ID.X + dx, 0, chunk.ID.Z + dz); if (ChunkMap.ContainsKey(key)) { toReturn.Add(ChunkMap[key]); } } } } return(toReturn); }