// ----------------------------------------------------------------------------------------------------------------- private void BuildTiles() { Texture2D heightmap = m_config.heightmap; float tile_gap = m_config.tile_gap_size; float tile_unit = m_config.tile_unit_size; float tw = m_config.tile_mesh.GetBounds().x; float th = m_config.tile_mesh.GetBounds().z; // Tile width m_tile_width = tw + tile_gap; m_tile_width_50 = m_tile_width * 0.5f; // Tile height m_tile_height = th + tile_gap; m_tile_height_75 = m_tile_height * 0.75f; m_tile_height_50 = m_tile_height * 0.5f; m_tile_height_25 = m_tile_height * 0.25f; // Level size m_width = heightmap.width; m_height = heightmap.height; utils.Log("Tile :: width={0:F2} height={1:F2} gap={2:F2} unit={3:F2}", tw, th, tile_gap, tile_unit); utils.Log("Map :: width={0} height={1}", heightmap.width, heightmap.height); // Init tags m_tag_owner = new CTag.COwner((int)CTile.ETag.T_MAX); m_tag_owner.InitTag((int)CTile.ETag.T_CURRENT, "current", 1, CTag.ELimitPolicy.LP_QUEUE); m_tag_owner.InitTag((int)CTile.ETag.T_VISITED, "visited", 10, CTag.ELimitPolicy.LP_QUEUE); m_tag_owner.InitTag((int)CTile.ETag.T_DEST_PATH, "dest-path", 25, CTag.ELimitPolicy.LP_DENY); m_tag_owner.InitTag((int)CTile.ETag.T_DEFAULT, "default"); m_tag_owner.InitTag((int)CTile.ETag.T_APPLE, "apple"); m_tag_owner.InitTag((int)CTile.ETag.T_BORDER, "border"); m_tag_owner.InitTag((int)CTile.ETag.T_TAIL, "tail"); // Build tiles m_tiles = new CTile[m_width, m_height]; for (int z = 0; z < m_height; z++) { for (int x = 0; x < m_width; x++) { CreateTile(x, z, heightmap); } } // Link together neightbor tiles for (int z = 0; z < m_height; z++) { for (int x = 0; x < m_width; x++) { CTile t = m_tiles[x, z]; for (int idx = (int)CTile.EDirection.DIR_1; idx < (int)CTile.EDirection.DIR_MAX; idx++) { CTile.EDirection dir = (CTile.EDirection)idx; t.SetNeighbor(dir, GetTileByOffset(t, dir, 1)); } } } // Create vertical border for (int z = 0; z < m_height; z++) { m_tag_owner.SetTag(m_tiles[0, z], (int)CTile.ETag.T_BORDER); m_tag_owner.SetTag(m_tiles[m_width - 1, z], (int)CTile.ETag.T_BORDER); } // Create horizontal border for (int x = 0; x < m_height; x++) { m_tag_owner.SetTag(m_tiles[x, 0], (int)CTile.ETag.T_BORDER); m_tag_owner.SetTag(m_tiles[x, m_height - 1], (int)CTile.ETag.T_BORDER); } }