diff options
Diffstat (limited to 'src/resources')
-rw-r--r-- | src/resources/map/map.h | 12 | ||||
-rw-r--r-- | src/resources/mapreader.cpp | 29 |
2 files changed, 21 insertions, 20 deletions
diff --git a/src/resources/map/map.h b/src/resources/map/map.h index 40c0df7c1..a1f8c9f5a 100644 --- a/src/resources/map/map.h +++ b/src/resources/map/map.h @@ -69,18 +69,6 @@ class Map final : public Properties, public MemoryCounter { public: - enum CollisionTypes - { - COLLISION_EMPTY = 0, // no collision - COLLISION_WALL = 1, // full collison - COLLISION_AIR = 2, // air units can walk - COLLISION_WATER = 3, // water units can walk - COLLISION_GROUNDTOP = 4, // no collision (chair, bed, etc) - COLLISION_PLAYER_WALL = 5, // full collision for player - COLLISION_MONSTER_WALL = 6, // full collision for monster - COLLISION_MAX = 7 // count index - }; - /** * Constructor, taking map and tile size as parameters. */ diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index d7e182cac..809e19e1f 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -30,6 +30,7 @@ #include "const/resources/map/map.h" +#include "enums/resources/map/collisiontype.h" #include "enums/resources/map/mapitemtype.h" #include "enums/resources/map/maplayertype.h" @@ -560,29 +561,41 @@ inline static void setTile(Map *const map, { if (map->getVersion() >= 1) { - switch (gid - set->getFirstGid()) + const int collisionId = gid - set->getFirstGid(); + CollisionTypeT type; + if (collisionId < 0 || + collisionId >= CAST_S32(CollisionType::COLLISION_MAX)) { - case Map::COLLISION_EMPTY: + type = CollisionType::COLLISION_EMPTY; + } + else + { + type = static_cast<CollisionTypeT>(collisionId); + } + switch (type) + { + case CollisionType::COLLISION_EMPTY: map->addBlockMask(x, y, BlockType::GROUND); break; - case Map::COLLISION_WALL: + case CollisionType::COLLISION_WALL: map->addBlockMask(x, y, BlockType::WALL); break; - case Map::COLLISION_AIR: + case CollisionType::COLLISION_AIR: map->addBlockMask(x, y, BlockType::AIR); break; - case Map::COLLISION_WATER: + case CollisionType::COLLISION_WATER: map->addBlockMask(x, y, BlockType::WATER); break; - case Map::COLLISION_GROUNDTOP: + case CollisionType::COLLISION_GROUNDTOP: map->addBlockMask(x, y, BlockType::GROUNDTOP); break; - case Map::COLLISION_PLAYER_WALL: + case CollisionType::COLLISION_PLAYER_WALL: map->addBlockMask(x, y, BlockType::PLAYERWALL); break; - case Map::COLLISION_MONSTER_WALL: + case CollisionType::COLLISION_MONSTER_WALL: map->addBlockMask(x, y, BlockType::MONSTERWALL); break; + case CollisionType::COLLISION_MAX: default: break; } |