Beispiel #1
0
        private static Tile GetObjectTile(GPTrack track, int x, int y, int tileX, int tileY)
        {
            TrackObjects objects = track.Objects;

            foreach (TrackObject obj in objects)
            {
                // Since objects are rendered on 2x2 tiles,
                // add or substract 1 to account for this.
                if ((tileX == obj.X || tileX == obj.X + 1) &&
                    (tileY == obj.Y - 1 || tileY == obj.Y))
                {
                    int relativeX = tileX - obj.X;
                    int relativeY = tileY - obj.Y + 1;

                    Tile tile = Context.Game.ObjectGraphics.GetTile(track, obj, relativeX, relativeY);

                    int pixelX = x % Tile.Size;
                    int pixelY = y % Tile.Size;

                    if (tile.GetColorIndexAt(pixelX, pixelY) != 0)
                    {
                        // If the hovered pixel is not transparent, return the hovered tile
                        return(tile);
                    }
                }
            }

            return(null);
        }
        public Bitmap GetImage(GPTrack track)
        {
            Tile[]  tiles   = this.GetTiles(track.Objects.Tileset);
            Palette palette = track.Objects.Palette;

            return(TrackObjectGraphics.GetImage(tiles, palette));
        }
Beispiel #3
0
        private void TestSmkcImportExport(int trackGroupId, int trackId)
        {
            Game game = File.GetGame(Region.US);

            GPTrack track1   = game.TrackGroups[trackGroupId][trackId] as GPTrack;
            GPTrack track2   = game.TrackGroups[0][0] as GPTrack;
            string  filePath = File.GetOutputPath($"track_{trackGroupId}_{trackId}.smkc");

            track1.Export(filePath, game);
            track2.Import(filePath, game);

            Assert.AreEqual(track1.Map.GetBytes(), track2.Map.GetBytes());
            Assert.AreEqual(track1.Theme, track2.Theme);
            Assert.AreEqual(track1.OverlayTiles.GetBytes(), track2.OverlayTiles.GetBytes());
            Assert.AreEqual(track1.StartPosition.GetBytes(), track2.StartPosition.GetBytes());
            Assert.AreEqual(track1.LapLine.GetBytes(), track2.LapLine.GetBytes());
            Assert.AreEqual(track1.Objects.GetBytes(), track2.Objects.GetBytes());
            Assert.AreEqual(track1.Objects.Zones.GetBytes(), track2.Objects.Zones.GetBytes());
            Assert.AreEqual(track1.Objects.Tileset, track2.Objects.Tileset);
            Assert.AreEqual(track1.Objects.Interaction, track2.Objects.Interaction);
            Assert.AreEqual(track1.Objects.Routine, track2.Objects.Routine);
            Assert.AreEqual(track1.Objects.PaletteIndexes.GetBytes(), track2.Objects.PaletteIndexes.GetBytes());
            Assert.AreEqual(track1.Objects.Flashing, track2.Objects.Flashing);
            Assert.AreEqual(track1.AI.GetBytes(), track2.AI.GetBytes());
        }
        public Tile GetTile(GPTrack track, TrackObject trackObject, int x, int y)
        {
            int index;

            if (!(trackObject is TrackObjectMatchRace matchRaceObject))
            {
                index = (int)track.Objects.Tileset;
            }