Example #1
0
		public static HeightMap[,] ExtractTileHeightMaps(ADTFile adt)
		{
			var maps = new HeightMap[TerrainConstants.ChunksPerTileSide, TerrainConstants.ChunksPerTileSide];

			for (var y = 0; y < TerrainConstants.ChunksPerTileSide; y++)
			{
				for (var x = 0; x < TerrainConstants.ChunksPerTileSide; x++)
				{
					var chunk = adt.MapChunks[x, y];
					var heights = adt.HeightMaps[x, y].Heights;
					var liq = adt.LiquidMaps[x, y];

					var heightMap = new HeightMap
					{
						MedianHeight = chunk.Y
					};

					// Read in Outer Heights
					for (var row = 0; row < 17; row += 2)
					{
						if (row % 2 != 0) continue;
						for (var col = 0; col < 9; col++)
						{
							var count = ((row / 2) * 9) + ((row / 2) * 8) + col;
							heightMap.OuterHeightDiff[row / 2, col] = heights[count];
						}
					}

					// Read in Inner Heights
					for (var row = 1; row < 16; row++)
					{
						if (row % 2 != 1) continue;
						for (var col = 0; col < 8; col++)
						{
							var count = (((row + 1) / 2) * 9) + ((row / 2) * 8) + col;
							heightMap.InnerHeightDiff[row / 2, col] = heights[count];
						}
					}

					// Read in Liquid Heights
					if (liq != null && (liq.Used && liq.Heights != null))
					{
						for (var row = 0; row < 9; row++)
						{
							for (var col = 0; col < 9; col++)
							{
								if (row < liq.YOffset || row > (liq.YOffset + liq.Height) ||
									col < liq.XOffset || col > (liq.XOffset + liq.Width))
								{
									heightMap.LiquidHeight[row, col] = float.MinValue;
									continue;
								}

								var oldRow = row - liq.YOffset;
								var oldCol = col - liq.XOffset;
								heightMap.LiquidHeight[row, col] = liq.Heights[oldRow, oldCol];
							}
						}
					}

					maps[x, y] = heightMap;
				}
			}

			return maps;
		}
Example #2
0
		public static HeightMap[,] ReadHeightMaps(BinaryReader reader, bool[,] profile)
		{
			var heightMaps = new HeightMap[TerrainConstants.ChunksPerTileSide, TerrainConstants.ChunksPerTileSide];
			for (var y = 0; y < TerrainConstants.ChunksPerTileSide; y++)
			{
				for (var x = 0; x < TerrainConstants.ChunksPerTileSide; x++)
				{
					heightMaps[x, y] = ReadHeightMap(reader, profile[x, y]);
				}
			}
			return heightMaps;
		}
Example #3
0
		public static HeightMap ReadHeightMap(BinaryReader reader, bool readLiquid)
		{
			var map = new HeightMap
			{
				IsFlat = reader.ReadBoolean(),
				MedianHeight = reader.ReadSingle()
			};

			if (!map.IsFlat)
			{
				for (var y = 0; y < 9; y++)
				{
					for (var x = 0; x < 9; x++)
					{
						map.OuterHeightDiff[x, y] = reader.ReadSingle();
					}
				}

				for (var y = 0; y < 8; y++)
				{
					for (var x = 0; x < 8; x++)
					{
						map.InnerHeightDiff[x, y] = reader.ReadSingle();
					}
				}
			}

			if (readLiquid)
			{
				for (var y = 0; y < 9; y++)
				{
					for (var x = 0; x < 9; x++)
					{
						map.LiquidHeight[x, y] = reader.ReadSingle();
					}
				}
			}

			return map;
		}
Example #4
0
		public static void WriteHeightMap(BinaryWriter writer, HeightMap map, bool writeLiquid)
		{
			writer.Write(map.IsFlat);
			writer.Write(map.MedianHeight);

			if (!map.IsFlat)
			{
				for (var y = 0; y < 9; y++)
				{
					for (var x = 0; x < 9; x++)
					{
						writer.Write(map.OuterHeightDiff[x, y]);
					}
				}

				for (var y = 0; y < 8; y++)
				{
					for (var x = 0; x < 8; x++)
					{
						writer.Write(map.InnerHeightDiff[x, y]);
					}
				}
			}

			if (writeLiquid)
			{
				for (var y = 0; y < 9; y++)
				{
					for (var x = 0; x < 9; x++)
					{
						writer.Write(map.LiquidHeight[x, y]);
					}
				}
			}
		}