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)); }
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; }