From 828e9bece29eea24863b4c89db0c0f84556ec2dc Mon Sep 17 00:00:00 2001 From: HackaLittleBit Date: Thu, 25 Jan 2018 18:22:53 +0000 Subject: [PATCH] De-duplicate ship entry to exit direction map table --- src/pathfinder/opf/opf_ship.cpp | 2 +- src/ship.h | 2 ++ src/ship_cmd.cpp | 14 ++------------ 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/pathfinder/opf/opf_ship.cpp b/src/pathfinder/opf/opf_ship.cpp index 023c6a4a09..31a1e30167 100644 --- a/src/pathfinder/opf/opf_ship.cpp +++ b/src/pathfinder/opf/opf_ship.cpp @@ -121,7 +121,7 @@ static void OPFShipFollowTrack(TileIndex tile, DiagDirection direction, TrackPat } /** Directions to search towards given track bits and the ship's enter direction. */ -static const DiagDirection _ship_search_directions[6][4] = { +extern const DiagDirection _ship_search_directions[6][4] = { { DIAGDIR_NE, INVALID_DIAGDIR, DIAGDIR_SW, INVALID_DIAGDIR }, { INVALID_DIAGDIR, DIAGDIR_SE, INVALID_DIAGDIR, DIAGDIR_NW }, { INVALID_DIAGDIR, DIAGDIR_NE, DIAGDIR_NW, INVALID_DIAGDIR }, diff --git a/src/ship.h b/src/ship.h index 18f04c8faf..61b25e682f 100644 --- a/src/ship.h +++ b/src/ship.h @@ -15,6 +15,8 @@ #include "vehicle_base.h" #include "water_map.h" +extern const DiagDirection _ship_search_directions[TRACK_END][DIAGDIR_END]; + void GetShipSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type); WaterClass GetEffectiveWaterClass(TileIndex tile); diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 4bbb8bf19e..0224e58f79 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -509,16 +509,6 @@ static const byte _ship_subcoord[4][6][3] = { } }; -/* Used for finding tile exit direction using the enter direction and following track */ -static const DiagDirection _diagdir_tile_exit[TRACK_END][DIAGDIR_END] = { - { DIAGDIR_NE , INVALID_DIAGDIR, DIAGDIR_SW , INVALID_DIAGDIR}, // TRACK_X = 0 - { INVALID_DIAGDIR, DIAGDIR_SE , INVALID_DIAGDIR, DIAGDIR_NW }, // TRACK_Y = 1 - { INVALID_DIAGDIR, DIAGDIR_NE , DIAGDIR_NW , INVALID_DIAGDIR}, // TRACK_UPPER = 2 - { DIAGDIR_SE , INVALID_DIAGDIR, INVALID_DIAGDIR, DIAGDIR_SW }, // TRACK_LOWER = 3 - { DIAGDIR_NW , DIAGDIR_SW , INVALID_DIAGDIR, INVALID_DIAGDIR}, // TRACK_LEFT = 4 - { INVALID_DIAGDIR, INVALID_DIAGDIR, DIAGDIR_SE , DIAGDIR_NE } // TRACK_RIGHT = 5 -}; - struct ShipCollideChecker { TrackBits track_bits; ///< Trackbits (track that was chosen by the pathfinder converted in trackbits.) . @@ -556,7 +546,7 @@ static void CheckDistanceBetweenShips(TileIndex tile, Ship *v, TrackBits tracks, Track track = *track_old; - TileIndex tile_plus_one = TileAddByDiagDir(tile, _diagdir_tile_exit[track][diagdir]); + TileIndex tile_plus_one = TileAddByDiagDir(tile, _ship_search_directions[track][diagdir]); if (!IsValidTile(tile_plus_one)) tile_plus_one = tile; ShipCollideChecker scc; @@ -579,7 +569,7 @@ static void CheckDistanceBetweenShips(TileIndex tile, Ship *v, TrackBits tracks, case TRACK_BIT_3WAY_NW: track == TRACK_UPPER ? track = TRACK_Y : track = TRACK_LEFT; break; } /* Don't bump in coast, don't get stuck. */ - if (track != *track_old && !IsWaterTile(TileAddByDiagDir(tile, _diagdir_tile_exit[track][diagdir]))) return; + if (track != *track_old && !IsWaterTile(TileAddByDiagDir(tile, _ship_search_directions[track][diagdir]))) return; *track_old = track; } }