From 5c657bde9fdd6ffd19f98bc8a3c8529c5532e490 Mon Sep 17 00:00:00 2001 From: Tulio Leao Date: Wed, 18 Dec 2019 00:25:12 -0300 Subject: [PATCH] Remove map_get_surface_element_at operating with TileCoordsXY --- src/openrct2/Game.cpp | 2 +- src/openrct2/actions/SetCheatAction.hpp | 2 +- src/openrct2/peep/Peep.cpp | 3 ++- src/openrct2/world/Location.hpp | 5 +++++ src/openrct2/world/Map.cpp | 22 +++++++++------------- src/openrct2/world/Map.h | 1 - src/openrct2/world/MapGen.cpp | 18 +++++++++--------- src/openrct2/world/MapHelpers.cpp | 24 ++++++++++++------------ test/tests/Pathfinding.cpp | 6 ++++-- 9 files changed, 43 insertions(+), 40 deletions(-) diff --git a/src/openrct2/Game.cpp b/src/openrct2/Game.cpp index 4527a37411..600a949423 100644 --- a/src/openrct2/Game.cpp +++ b/src/openrct2/Game.cpp @@ -490,7 +490,7 @@ void game_fix_save_vars() { for (int32_t x = 0; x < MAXIMUM_MAP_SIZE_TECHNICAL; x++) { - auto* surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto* surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (surfaceElement == nullptr) { diff --git a/src/openrct2/actions/SetCheatAction.hpp b/src/openrct2/actions/SetCheatAction.hpp index badd97d623..fa82882570 100644 --- a/src/openrct2/actions/SetCheatAction.hpp +++ b/src/openrct2/actions/SetCheatAction.hpp @@ -364,7 +364,7 @@ private: { for (x = 0; x < MAXIMUM_MAP_SIZE_TECHNICAL; x++) { - auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (surfaceElement == nullptr) continue; diff --git a/src/openrct2/peep/Peep.cpp b/src/openrct2/peep/Peep.cpp index 545582e052..d1dfef7e36 100644 --- a/src/openrct2/peep/Peep.cpp +++ b/src/openrct2/peep/Peep.cpp @@ -765,7 +765,8 @@ bool Peep::Place(TileCoordsXYZ location, bool apply) TileElement* tileElement = reinterpret_cast(pathElement); if (!pathElement) { - tileElement = reinterpret_cast(map_get_surface_element_at(TileCoordsXY{ location.x, location.y })); + tileElement = reinterpret_cast( + map_get_surface_element_at(TileCoordsXY{ location.x, location.y }.ToCoordsXY())); } if (!tileElement) diff --git a/src/openrct2/world/Location.hpp b/src/openrct2/world/Location.hpp index 811d2ad473..124846a7f3 100644 --- a/src/openrct2/world/Location.hpp +++ b/src/openrct2/world/Location.hpp @@ -177,6 +177,11 @@ struct TileCoordsXY return *this; } + CoordsXY ToCoordsXY() const + { + return { x * 32, y * 32 }; + } + TileCoordsXY Rotate(int32_t direction) const { TileCoordsXY rotatedCoords; diff --git a/src/openrct2/world/Map.cpp b/src/openrct2/world/Map.cpp index 223e5223fd..8cfbef5f21 100644 --- a/src/openrct2/world/Map.cpp +++ b/src/openrct2/world/Map.cpp @@ -203,8 +203,9 @@ void map_set_tile_elements(int32_t x, int32_t y, TileElement* elements) gTileElementTilePointers[x + y * MAXIMUM_MAP_SIZE_TECHNICAL] = elements; } -SurfaceElement* map_get_surface_element_at(const TileCoordsXY& tileCoords) +SurfaceElement* map_get_surface_element_at(const CoordsXY& coords) { + auto tileCoords = TileCoordsXY{ coords }; TileElement* tileElement = map_get_first_element_at(tileCoords.x, tileCoords.y); if (tileElement == nullptr) @@ -222,11 +223,6 @@ SurfaceElement* map_get_surface_element_at(const TileCoordsXY& tileCoords) return tileElement->AsSurface(); } -SurfaceElement* map_get_surface_element_at(const CoordsXY& coords) -{ - return map_get_surface_element_at(TileCoordsXY(coords)); -} - PathElement* map_get_path_element_at(const TileCoordsXYZ& loc) { TileElement* tileElement = map_get_first_element_at(loc.x, loc.y); @@ -327,7 +323,7 @@ void map_count_remaining_land_rights() { for (int32_t y = 0; y < MAXIMUM_MAP_SIZE_TECHNICAL; y++) { - auto* surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto* surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); // Surface elements are sometimes hacked out to save some space for other map elements if (surfaceElement == nullptr) { @@ -1474,7 +1470,7 @@ void map_update_tiles() interleaved_xy >>= 1; } - auto* surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto* surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (surfaceElement != nullptr) { surfaceElement->UpdateGrassLength({ x * 32, y * 32 }); @@ -1617,8 +1613,8 @@ void map_extend_boundary_surface() y = gMapSize - 2; for (x = 0; x < MAXIMUM_MAP_SIZE_TECHNICAL; x++) { - existingTileElement = map_get_surface_element_at(TileCoordsXY{ x, y - 1 }); - newTileElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + existingTileElement = map_get_surface_element_at(TileCoordsXY{ x, y - 1 }.ToCoordsXY()); + newTileElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (existingTileElement && newTileElement) { @@ -1631,8 +1627,8 @@ void map_extend_boundary_surface() x = gMapSize - 2; for (y = 0; y < MAXIMUM_MAP_SIZE_TECHNICAL; y++) { - existingTileElement = map_get_surface_element_at(TileCoordsXY{ x - 1, y }); - newTileElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + existingTileElement = map_get_surface_element_at(TileCoordsXY{ x - 1, y }.ToCoordsXY()); + newTileElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (existingTileElement && newTileElement) { @@ -2398,7 +2394,7 @@ void FixLandOwnershipTilesWithOwnership(std::initializer_list tile { for (const TileCoordsXY* tile = tiles.begin(); tile != tiles.end(); ++tile) { - auto surfaceElement = map_get_surface_element_at(*tile); + auto surfaceElement = map_get_surface_element_at(tile->ToCoordsXY()); if (surfaceElement != nullptr) { surfaceElement->SetOwnership(ownership); diff --git a/src/openrct2/world/Map.h b/src/openrct2/world/Map.h index e7975e7fac..c4cce2ae5f 100644 --- a/src/openrct2/world/Map.h +++ b/src/openrct2/world/Map.h @@ -143,7 +143,6 @@ TileElement* map_get_nth_element_at(int32_t x, int32_t y, int32_t n); void map_set_tile_elements(int32_t x, int32_t y, TileElement* elements); int32_t map_height_from_slope(const CoordsXY& coords, int32_t slope, bool isSloped); BannerElement* map_get_banner_element_at(int32_t x, int32_t y, int32_t z, uint8_t direction); -SurfaceElement* map_get_surface_element_at(const TileCoordsXY& tileCoords); SurfaceElement* map_get_surface_element_at(const CoordsXY& coords); PathElement* map_get_path_element_at(const TileCoordsXYZ& loc); WallElement* map_get_wall_element_at(CoordsXYZD wallCoords); diff --git a/src/openrct2/world/MapGen.cpp b/src/openrct2/world/MapGen.cpp index 01309de4a2..a515bfab1d 100644 --- a/src/openrct2/world/MapGen.cpp +++ b/src/openrct2/world/MapGen.cpp @@ -116,7 +116,7 @@ void mapgen_generate_blank(mapgen_settings* settings) { for (x = 1; x < settings->mapSize - 1; x++) { - auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (surfaceElement != nullptr) { surfaceElement->SetSurfaceStyle(settings->floor); @@ -167,7 +167,7 @@ void mapgen_generate(mapgen_settings* settings) { for (x = 1; x < mapSize - 1; x++) { - auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (surfaceElement != nullptr) { surfaceElement->SetSurfaceStyle(floorTexture); @@ -216,7 +216,7 @@ void mapgen_generate(mapgen_settings* settings) { for (x = 1; x < mapSize - 1; x++) { - auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (surfaceElement != nullptr && surfaceElement->base_height < waterLevel + 6) surfaceElement->SetSurfaceStyle(beachTexture); @@ -304,16 +304,16 @@ static void mapgen_place_trees() } } - CoordsXY tmp, pos; + TileCoordsXY tmp, pos; - std::vector availablePositions; + std::vector availablePositions; // Create list of available tiles for (int32_t y = 1; y < gMapSize - 1; y++) { for (int32_t x = 1; x < gMapSize - 1; x++) { - auto* surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto* surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (surfaceElement == nullptr) continue; @@ -399,7 +399,7 @@ static void mapgen_set_water_level(int32_t waterLevel) { for (x = 1; x < mapSize - 1; x++) { - auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (surfaceElement != nullptr && surfaceElement->base_height < waterLevel) surfaceElement->SetWaterHeight(waterLevel / 2); } @@ -461,7 +461,7 @@ static void mapgen_set_height() uint8_t baseHeight = (q00 + q01 + q10 + q11) / 4; - auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (surfaceElement == nullptr) continue; surfaceElement->base_height = std::max(2, baseHeight * 2); @@ -823,7 +823,7 @@ void mapgen_generate_from_heightmap(mapgen_settings* settings) { // The x and y axis are flipped in the world, so this uses y for x and x for y. auto* const surfaceElement = map_get_surface_element_at( - TileCoordsXY{ static_cast(y + 1), static_cast(x + 1) }); + TileCoordsXY{ static_cast(y + 1), static_cast(x + 1) }.ToCoordsXY()); if (surfaceElement == nullptr) continue; diff --git a/src/openrct2/world/MapHelpers.cpp b/src/openrct2/world/MapHelpers.cpp index 4e26abaf0a..73f355f7da 100644 --- a/src/openrct2/world/MapHelpers.cpp +++ b/src/openrct2/world/MapHelpers.cpp @@ -16,7 +16,7 @@ static uint8_t getBaseHeightOrZero(int32_t x, int32_t y) { - auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); return surfaceElement ? surfaceElement->base_height : 0; } @@ -31,7 +31,7 @@ int32_t map_smooth(int32_t l, int32_t t, int32_t r, int32_t b) { for (x = l; x < r; x++) { - auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (surfaceElement == nullptr) continue; surfaceElement->SetSlope(TILE_ELEMENT_SLOPE_FLAT); @@ -146,36 +146,36 @@ int32_t map_smooth(int32_t l, int32_t t, int32_t r, int32_t b) { uint8_t slope = surfaceElement->GetSlope(); // Corners - auto surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x + 1, y + 1 }); + auto surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x + 1, y + 1 }.ToCoordsXY()); if (surfaceElement2 != nullptr && surfaceElement2->base_height > surfaceElement->base_height) slope |= TILE_ELEMENT_SLOPE_N_CORNER_UP; - surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x - 1, y + 1 }); + surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x - 1, y + 1 }.ToCoordsXY()); if (surfaceElement2 != nullptr && surfaceElement2->base_height > surfaceElement->base_height) slope |= TILE_ELEMENT_SLOPE_W_CORNER_UP; - surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x + 1, y - 1 }); + surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x + 1, y - 1 }.ToCoordsXY()); if (surfaceElement2 != nullptr && surfaceElement2->base_height > surfaceElement->base_height) slope |= TILE_ELEMENT_SLOPE_E_CORNER_UP; - surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x - 1, y - 1 }); + surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x - 1, y - 1 }.ToCoordsXY()); if (surfaceElement2 != nullptr && surfaceElement2->base_height > surfaceElement->base_height) slope |= TILE_ELEMENT_SLOPE_S_CORNER_UP; // Sides - surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x + 1, y + 0 }); + surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x + 1, y + 0 }.ToCoordsXY()); if (surfaceElement2 != nullptr && surfaceElement2->base_height > surfaceElement->base_height) slope |= TILE_ELEMENT_SLOPE_NE_SIDE_UP; - surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x - 1, y + 0 }); + surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x - 1, y + 0 }.ToCoordsXY()); if (surfaceElement2 != nullptr && surfaceElement2->base_height > surfaceElement->base_height) slope |= TILE_ELEMENT_SLOPE_SW_SIDE_UP; - surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x + 0, y - 1 }); + surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x + 0, y - 1 }.ToCoordsXY()); if (surfaceElement2 != nullptr && surfaceElement2->base_height > surfaceElement->base_height) slope |= TILE_ELEMENT_SLOPE_SE_SIDE_UP; - surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x + 0, y + 1 }); + surfaceElement2 = map_get_surface_element_at(TileCoordsXY{ x + 0, y + 1 }.ToCoordsXY()); if (surfaceElement2 != nullptr && surfaceElement2->base_height > surfaceElement->base_height) slope |= TILE_ELEMENT_SLOPE_NW_SIDE_UP; @@ -200,7 +200,7 @@ int32_t map_smooth(int32_t l, int32_t t, int32_t r, int32_t b) */ int32_t tile_smooth(int32_t x, int32_t y) { - auto* const surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }); + auto* const surfaceElement = map_get_surface_element_at(TileCoordsXY{ x, y }.ToCoordsXY()); if (surfaceElement == nullptr) return 0; @@ -241,7 +241,7 @@ int32_t tile_smooth(int32_t x, int32_t y) continue; // Get neighbour height. If the element is not valid (outside of map) assume the same height - auto* neighbourSurfaceElement = map_get_surface_element_at(TileCoordsXY{ x + x_offset, y + y_offset }); + auto* neighbourSurfaceElement = map_get_surface_element_at(TileCoordsXY{ x + x_offset, y + y_offset }.ToCoordsXY()); neighbourHeightOffset.baseheight[index] = neighbourSurfaceElement != nullptr ? neighbourSurfaceElement->base_height : surfaceElement->base_height; diff --git a/test/tests/Pathfinding.cpp b/test/tests/Pathfinding.cpp index 39a158fe6c..febc83023d 100644 --- a/test/tests/Pathfinding.cpp +++ b/test/tests/Pathfinding.cpp @@ -136,7 +136,8 @@ protected: static ::testing::AssertionResult AssertIsStartPosition(const char*, const TileCoordsXYZ& location) { const uint32_t expectedSurfaceStyle = 11u; - const uint32_t style = map_get_surface_element_at(TileCoordsXY{ location.x, location.y })->GetSurfaceStyle(); + const uint32_t style = map_get_surface_element_at(TileCoordsXY{ location.x, location.y }.ToCoordsXY()) + ->GetSurfaceStyle(); if (style != expectedSurfaceStyle) return ::testing::AssertionFailure() @@ -151,7 +152,8 @@ protected: { const uint32_t forbiddenSurfaceStyle = 8u; - const uint32_t style = map_get_surface_element_at(TileCoordsXY{ location.x, location.y })->GetSurfaceStyle(); + const uint32_t style = map_get_surface_element_at(TileCoordsXY{ location.x, location.y }.ToCoordsXY()) + ->GetSurfaceStyle(); if (style == forbiddenSurfaceStyle) return ::testing::AssertionFailure()