예제 #1
0
        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);
        }
예제 #2
0
        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);
        }