private void validateTileSizeForDimensions(HffHeader header) { if (header.width % header.tileSize != 0 || header.height % header.tileSize != 0) { throw new Exception("Map dimensions do not fit the tilesize"); } }
private float readValueFromReader(EndianBinaryReader reader, HffHeader header, uint xLocation, uint yLocation) { float value; if (header.floatingPointFlag) { float readSingleValue = reader.ReadSingle(); debugLine("v: " + readSingleValue); value = header.verticalScale * readSingleValue + header.verticalOffset; debugLine("cv: " + value); } else { switch (header.dataSize) { case 1: sbyte readSbyteValue = reader.ReadSByte(); debugLine("v: " + readSbyteValue); value = header.verticalScale * readSbyteValue + header.verticalOffset; debugLine("cv: " + value); break; case 2: ushort readShortValue = reader.ReadUInt16(); debugLine("v: " + readShortValue); value = header.verticalScale * readShortValue + header.verticalOffset; debugLine("cv: " + value); break; default: throw new Exception("Invalid pixel data at x: " + xLocation + ", y: " + yLocation); } } return value; }
private void readTile(int x, int y, HffHeader header, EndianBinaryReader reader, HffFile file) { for (int j = 1; j <= header.tileSize; j++) { for (int i = 1; i <= header.tileSize; i++) { uint xLocation = (uint)((x * header.tileSize) + i); uint yLocation = (uint)((y * header.tileSize) + j); float value = readValueFromReader(reader, header, xLocation, yLocation); file.addPixel(new HffPixelInfo(xLocation, yLocation, value)); } } }
private void readTiledData(EndianBinaryReader reader, HffHeader header, HffFile file) { validateTileSizeForDimensions(header); uint horizontalTiles = header.width / header.tileSize; uint verticalTiles = header.height / header.tileSize; for (int y = 0; y < verticalTiles; y++) { for (int x = 0; x < horizontalTiles; x++) { readTile(x, y, header, reader, file); } } }
private void readConventionalData(EndianBinaryReader reader, HffHeader header, HffFile file) { uint totalPixels = header.width * header.height; uint xLocation = 1; uint yLocation = 1; for (int i = 0; i < totalPixels; i++) { float value = readValueFromReader(reader, header, xLocation, yLocation); file.addPixel(new HffPixelInfo(xLocation, yLocation, value)); xLocation++; if (xLocation > header.width) { xLocation = 1; yLocation++; } } debugLine("pixel count: " + file.pixels.Count()); }