From 9c9a7ef99abf773bfc7b2e52c7ff33e10dc03c16 Mon Sep 17 00:00:00 2001 From: Josh Cooper Date: Thu, 21 Apr 2022 18:13:23 -0700 Subject: [PATCH] Adds consistent interface signatures for Maps module --- library/include/modules/Maps.h | 14 ++++--- library/modules/Maps.cpp | 67 +++++++++++++++++++++++++++------- 2 files changed, 62 insertions(+), 19 deletions(-) diff --git a/library/include/modules/Maps.h b/library/include/modules/Maps.h index bc6298601..225efae17 100644 --- a/library/include/modules/Maps.h +++ b/library/include/modules/Maps.h @@ -233,7 +233,8 @@ extern DFHACK_EXPORT bool ReadGeology(std::vector > *layer_ /** * Get pointers to features of a block */ -extern DFHACK_EXPORT bool ReadFeatures(uint32_t x, uint32_t y, uint32_t z, t_feature * local, t_feature * global); +extern DFHACK_EXPORT bool ReadFeatures(int32_t x, int32_t y, int32_t z, t_feature * local, t_feature * global); +extern DFHACK_EXPORT bool ReadFeatures(uint32_t x, uint32_t y, uint32_t z, t_feature * local, t_feature * global); // todo: deprecate me /** * Get pointers to features of an already read block */ @@ -242,7 +243,7 @@ extern DFHACK_EXPORT bool ReadFeatures(df::map_block * block,t_feature * local, /** * Get a pointer to a specific global feature directly. - */ +*/ DFHACK_EXPORT df::feature_init *getGlobalInitFeature(int32_t index); /** * Get a pointer to a specific local feature directly. rgn_coord is in the world region grid. @@ -261,9 +262,11 @@ extern DFHACK_EXPORT bool GetGlobalFeature(t_feature &feature, int32_t index); */ /// get size of the map in blocks -extern DFHACK_EXPORT void getSize(uint32_t& x, uint32_t& y, uint32_t& z); +extern DFHACK_EXPORT void getSize(int32_t& x, int32_t& y, int32_t& z); +extern DFHACK_EXPORT void getSize(uint32_t& x, uint32_t& y, uint32_t& z); // todo: deprecate me /// get size of the map in tiles -extern DFHACK_EXPORT void getTileSize(uint32_t& x, uint32_t& y, uint32_t& z); +extern DFHACK_EXPORT void getTileSize(int32_t& x, int32_t& y, int32_t& z); +extern DFHACK_EXPORT void getTileSize(uint32_t& x, uint32_t& y, uint32_t& z); // todo: deprecate me /// get the position of the map on world map extern DFHACK_EXPORT void getPosition(int32_t& x, int32_t& y, int32_t& z); @@ -333,7 +336,8 @@ extern DFHACK_EXPORT bool SortBlockEvents(df::map_block *block, ); /// remove a block event from the block by address -extern DFHACK_EXPORT bool RemoveBlockEvent(uint32_t x, uint32_t y, uint32_t z, df::block_square_event * which ); +extern DFHACK_EXPORT bool RemoveBlockEvent(int32_t x, int32_t y, int32_t z, df::block_square_event * which ); +extern DFHACK_EXPORT bool RemoveBlockEvent(uint32_t x, uint32_t y, uint32_t z, df::block_square_event * which ); // todo: deprecate me DFHACK_EXPORT bool canWalkBetween(df::coord pos1, df::coord pos2); DFHACK_EXPORT bool canStepBetween(df::coord pos1, df::coord pos2); diff --git a/library/modules/Maps.cpp b/library/modules/Maps.cpp index 889a40104..06f8c9673 100644 --- a/library/modules/Maps.cpp +++ b/library/modules/Maps.cpp @@ -107,9 +107,9 @@ bool Maps::IsValid () } // getter for map size in blocks -void Maps::getSize (uint32_t& x, uint32_t& y, uint32_t& z) +inline void getSizeInline (int32_t& x, int32_t& y, int32_t& z) { - if (!IsValid()) + if (!Maps::IsValid()) { x = y = z = 0; return; @@ -118,14 +118,38 @@ void Maps::getSize (uint32_t& x, uint32_t& y, uint32_t& z) y = world->map.y_count_block; z = world->map.z_count_block; } +void Maps::getSize (int32_t& x, int32_t& y, int32_t& z) +{ + getSizeInline(x, y, z); +} +void Maps::getSize (uint32_t& x, uint32_t& y, uint32_t& z) //todo: deprecate me +{ + int32_t sx, sy, sz; + getSizeInline(sx, sy, sz); + x = uint32_t(sx); + y = uint32_t(sy); + z = uint32_t(sz); +} // getter for map size in tiles -void Maps::getTileSize (uint32_t& x, uint32_t& y, uint32_t& z) +inline void getTileSizeInline (int32_t& x, int32_t& y, int32_t& z) { - getSize(x, y, z); + getSizeInline(x, y, z); x *= 16; y *= 16; } +void Maps::getTileSize (int32_t& x, int32_t& y, int32_t& z) +{ + getTileSizeInline(x, y, z); +} +void Maps::getTileSize (uint32_t& x, uint32_t& y, uint32_t& z) //todo: deprecate me +{ + int32_t sx, sy, sz; + getTileSizeInline(sx, sy, sz); + x = uint32_t(sx); + y = uint32_t(sy); + z = uint32_t(sz); +} // getter for map position void Maps::getPosition (int32_t& x, int32_t& y, int32_t& z) @@ -375,12 +399,20 @@ bool GetLocalFeature(t_feature &feature, df::coord2d rgn_pos, int32_t index) return true; } -bool Maps::ReadFeatures(uint32_t x, uint32_t y, uint32_t z, t_feature *local, t_feature *global) +inline bool ReadFeaturesInline(int32_t x, int32_t y, int32_t z, t_feature *local, t_feature *global) { - df::map_block *block = getBlock(x,y,z); + df::map_block* block = Maps::getBlock(x, y, z); if (!block) return false; - return ReadFeatures(block, local, global); + return Maps::ReadFeatures(block, local, global); +} +bool Maps::ReadFeatures(int32_t x, int32_t y, int32_t z, t_feature *local, t_feature *global) +{ + return ReadFeaturesInline(x, y, z, local, global); +} +bool Maps::ReadFeatures(uint32_t x, uint32_t y, uint32_t z, t_feature *local, t_feature *global) //todo: deprecate me +{ + return ReadFeaturesInline(int32_t(x), int32_t(y), int32_t(z), local, global); } bool Maps::ReadFeatures(df::map_block * block, t_feature * local, t_feature * global) @@ -477,12 +509,11 @@ bool Maps::SortBlockEvents(df::map_block *block, return true; } -bool Maps::RemoveBlockEvent(uint32_t x, uint32_t y, uint32_t z, df::block_square_event * which) +inline bool RemoveBlockEventInline(int32_t x, int32_t y, int32_t z, df::block_square_event * which) { - df::map_block * block = getBlock(x,y,z); + df::map_block* block = Maps::getBlock(x, y, z); if (!block) return false; - int idx = linear_index(block->block_events, which); if (idx >= 0) { @@ -493,6 +524,14 @@ bool Maps::RemoveBlockEvent(uint32_t x, uint32_t y, uint32_t z, df::block_square else return false; } +inline bool Maps::RemoveBlockEvent(int32_t x, int32_t y, int32_t z, df::block_square_event * which) +{ + return RemoveBlockEventInline(x, y, z, which); +} +bool Maps::RemoveBlockEvent(uint32_t x, uint32_t y, uint32_t z, df::block_square_event * which) //todo: deprecate me +{ + return RemoveBlockEventInline(int32_t(x), int32_t(y), int32_t(z), which); +} static df::coord2d biome_offsets[9] = { df::coord2d(-1,-1), df::coord2d(0,-1), df::coord2d(1,-1), @@ -658,8 +697,8 @@ bool Maps::canStepBetween(df::coord pos1, df::coord pos2) if ( x == 0 && y == 0 ) continue; df::tiletype* type = Maps::getTileType(df::coord(pos1.x+x,pos1.y+y,pos1.z)); - df::tiletype_shape shape1 = ENUM_ATTR(tiletype,shape,*type); - if ( shape1 == tiletype_shape::WALL ) { + df::tiletype_shape shape3 = ENUM_ATTR(tiletype,shape,*type); + if ( shape3 == tiletype_shape::WALL ) { foundWall = true; x = 2; break; @@ -695,8 +734,8 @@ bool Maps::canStepBetween(df::coord pos1, df::coord pos2) if ( x == 0 && y == 0 ) continue; df::tiletype* type = Maps::getTileType(df::coord(pos1.x+x,pos1.y+y,pos1.z)); - df::tiletype_shape shape1 = ENUM_ATTR(tiletype,shape,*type); - if ( shape1 == tiletype_shape::WALL ) { + df::tiletype_shape shape3 = ENUM_ATTR(tiletype,shape,*type); + if ( shape3 == tiletype_shape::WALL ) { foundWall = true; x = 2; break;