public TChunk(int index_x, int index_y, Vector3 origin, Vector3 center, ref GameObject terrain_chunk, ref GameObject ws_chunk, ref GenerateTerrainChunk generator) { this.index_x = index_x; this.index_y = index_y; this.origin = origin; this.center = center; this.terrain_chunk = terrain_chunk; this.ws_chunk = ws_chunk; this.generator = generator; }
public TC_HashTable(int elements, int num_entries, int world_size_x, int world_size_y) { this.elements = elements; this.elems_per_entry = elements / num_entries + 1; this.num_entries = num_entries; this.world_size_x = world_size_x; this.world_size_y = world_size_y; this.indexes_saved = new List <Vector2> (); dummy1 = new GameObject(); dummy2 = dummy1.AddComponent <GenerateTerrainChunk> (); dummy2.isValid = false; hash_table = new List <TChunk> [num_entries]; for (int i = 0; i < num_entries; ++i) { hash_table[i] = new List <TChunk> (); } }
// object initialization public void init() { TerrainGenerator = gameObject.GetComponent <GenerateTerrain> (); SceneryObject_Ref = SceneryObject_Prefab; slope_height = tile_size * slope_factor; chunk_size_x = side_tile_count * tile_size; chunk_size_y = side_tile_count * tile_size; origin = gameObject.transform.position; MapLoader mloader = new MapLoader(); mloader.openFile(texture_size_x, texture_size_y, heightmap_path); List <int[, ]> lmaps = mloader.getLevelMapList(level_count, level_zero_grayscale, side_tile_count, out terrain_chunks_x, out terrain_chunks_y); mloader = new MapLoader(); mloader.openFile(texture_size_x, texture_size_y, tileTypeMap_path); List <TileType[, ]> ttmaps = mloader.getTileTypeMapList(side_tile_count); WorldLevelMaps = setWorldLevelMaps(ref lmaps, terrain_chunks_x, terrain_chunks_y); WorldTileTypeMaps = setWorldTileTypeMaps(ref ttmaps, terrain_chunks_x, terrain_chunks_y); initSceneryObjPool(); initPathObjPool(); loaded_chunks = new TC_HashTable(terrain_chunks_x * terrain_chunks_y, terrain_chunks_x, terrain_chunks_x, terrain_chunks_y); last_cam_position = Vector3.zero; TerrainChunks = new TChunk[terrain_chunks_y, terrain_chunks_x]; for (int i = 0; i < terrain_chunks_y; ++i) { for (int j = 0; j < terrain_chunks_x; ++j) { int index_x = j; int index_y = i; List <int[]> neighbor_level_maps = getNeighborLevelMaps(index_x, index_y, ref WorldLevelMaps); Vector3 chunk_origin = origin; chunk_origin.x += chunk_size_x * index_x; chunk_origin.z -= chunk_size_y * index_y; Vector3 chunk_center = new Vector3(chunk_origin.x + chunk_size_x * 0.5f, 0, chunk_origin.z - chunk_size_y * 0.5f); GameObject new_terrain_chunk = (GameObject)Instantiate(TerrainChunk_Prefab); new_terrain_chunk.transform.parent = transform; GenerateTerrainChunk generator = new_terrain_chunk.GetComponent <GenerateTerrainChunk> (); generator.generate(index_x, index_y, tile_size, slope_height, side_tile_count, chunk_origin, chunk_center, ref WorldLevelMaps, WorldTileTypeMaps, terrain_chunks_x, terrain_chunks_y, textures_x, textures_y, ref neighbor_level_maps, new_terrain_chunk.GetComponent <MeshFilter> ()); GameObject new_ws_chunk = (GameObject)Instantiate(WaterSurfaceChunk_Prefab); new_ws_chunk.transform.parent = new_terrain_chunk.transform; new_ws_chunk.transform.position = new_terrain_chunk.transform.position; generator.generateWaterSurface(new_ws_chunk); TChunk terrain_chunk = new TChunk(index_x, index_y, chunk_origin, chunk_center, ref new_terrain_chunk, ref new_ws_chunk, ref generator); TerrainChunks[index_y, index_x] = terrain_chunk; } } }