public TerrainTile(Viewer viewer, TileManager tileManager, Tile tile) { Trace.Write(tile.Size > 2 ? "L" : "T"); TileX = tile.TileX; TileZ = tile.TileZ; Size = tile.Size; PatchCount = tile.PatchCount; // Terrain needs the next tiles over from its east (X+) and south (Z-) edges. viewer.Tiles.Load(TileX + tile.Size, TileZ, false); viewer.Tiles.Load(TileX + tile.Size, TileZ - 1, false); viewer.Tiles.Load(TileX, TileZ - 1, false); TerrainPatches = new TerrainPrimitive[PatchCount, PatchCount]; for (var x = 0; x < PatchCount; ++x) { for (var z = 0; z < PatchCount; ++z) { if (tile.GetPatch(x, z).DrawingEnabled) { TerrainPatches[x, z] = new TerrainPrimitive(viewer, tileManager, tile, x, z); } } } if (tile.ContainsWater) { WaterTile = new WaterPrimitive(viewer, tile); } }
internal void Mark() { if (WaterTile != null) { WaterPrimitive.Mark(); } for (var x = 0; x < PatchCount; ++x) { for (var z = 0; z < PatchCount; ++z) { if (TerrainPatches[x, z] != null) { TerrainPatches[x, z].Mark(); } } } }