Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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();
                    }
                }
            }
        }