SpriteInstanceData BuildInstanceData(int i, int j, TilesetData.TileData tile, int tickCount) { if (tile == null || tile.Flags.HasFlag(TilesetData.TileFlags.Debug)) { return(_blankInstance); } int index = j * _mapData.Width + i; int subImage = tile.GetSubImageForTile(tickCount); _tileset.GetSubImageDetails( subImage, out var tileSize, out var texPosition, out var texSize, out var layer); DrawLayer drawLayer = tile.Layer.ToDrawLayer(); var position = new Vector3( new Vector2(i, j) * tileSize, drawLayer.ToZCoordinate(j)); var instance = _tileData.UseSmallGraphics ? SpriteInstanceData.TopMid( position, tileSize, texPosition, texSize, layer, 0) : SpriteInstanceData.TopLeft( position, tileSize, texPosition, texSize, layer, 0); // int zoneNum = _mapData.ZoneLookup[index]; // int eventNum = zoneNum == -1 ? -1 : _mapData.Zones[zoneNum].EventNumber; instance.Flags = 0 // |(_tileset is EightBitTexture ? SpriteFlags.UsePalette : 0) // | (HighlightIndex == index ? SpriteFlags.Highlight : 0) // | (eventNum != -1 && _highLightEvent != eventNum ? SpriteFlags.Highlight : 0) // | (_highLightEvent == eventNum ? SpriteFlags.GreenTint : 0) // | (tile.Collision != TilesetData.Passability.Passable ? SpriteFlags.RedTint : 0) // | ((tile.Flags & TilesetData.TileFlags.TextId) != 0 ? SpriteFlags.RedTint : 0) // | (((int) tile.Type) == 8 ? SpriteFlags.GreenTint : 0) // | (((int) tile.Type) == 12 ? SpriteFlags.BlueTint : 0) // | (((int) tile.Type) == 14 ? SpriteFlags.GreenTint | SpriteFlags.RedTint : 0) //&& tickCount % 2 == 0 ? SpriteFlags.Transparent : 0) ; return(instance); }
public object Load(BinaryReader br, long streamLength, string name, AssetInfo config) { var td = new TilesetData(); td.UseSmallGraphics = config.UseSmallGraphics ?? false; var validPassabilities = typeof(TilesetData.Passability).GetEnumValues().Cast <int>().ToList(); var validLayers = typeof(TilesetData.TileLayer).GetEnumValues().Cast <byte>().ToList(); var validTypes = typeof(TilesetData.TileType).GetEnumValues().Cast <byte>().ToList(); int tileCount = (int)(streamLength / 8); for (int i = 0; i < tileCount; i++) { var t = new TilesetData.TileData { TileNumber = i }; byte firstByte = br.ReadByte(); // 0 t.Layer = (TilesetData.TileLayer)(firstByte >> 4); // Upper nibble of first byte (0h) Debug.Assert(validLayers.Contains((byte)t.Layer), "Unexpected tile layer found"); t.Type = (TilesetData.TileType)(firstByte & 0xf); // Lower nibble of first byte (0l) Debug.Assert(validTypes.Contains((byte)t.Type), "Unexpected tile type found"); t.Collision = (TilesetData.Passability)br.ReadByte(); // 1 Debug.Assert(validPassabilities.Contains((int)t.Collision)); t.Flags = (TilesetData.TileFlags)br.ReadUInt16(); // 2 Debug.Assert((t.Flags & TilesetData.TileFlags.UnusedMask) == 0, "Unused flags set"); t.ImageNumber = br.ReadUInt16(); // 4 t.FrameCount = br.ReadByte(); // 6 t.Unk7 = br.ReadByte(); // 7 td.Tiles.Add(t); } return(td); }