diff options
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/enums/resources/map/collisiontype.h | 41 | ||||
-rw-r--r-- | src/resources/map/map.h | 12 | ||||
-rw-r--r-- | src/resources/mapreader.cpp | 29 |
5 files changed, 64 insertions, 20 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3e83dd3fd..74e4150ab 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1091,6 +1091,7 @@ SET(SRCS maingui.h enums/resources/map/blockmask.h enums/resources/map/blocktype.h + enums/resources/map/collisiontype.h enums/resources/skill/casttype.h resources/map/location.h resources/map/map.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 3fab04574..1e61acaa4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1327,6 +1327,7 @@ manaplus_SOURCES += main.cpp \ resources/updatefile.h \ enums/resources/map/blockmask.h \ enums/resources/map/blocktype.h \ + enums/resources/map/collisiontype.h \ enums/resources/skill/casttype.h \ resources/map/location.h \ resources/map/map.cpp \ diff --git a/src/enums/resources/map/collisiontype.h b/src/enums/resources/map/collisiontype.h new file mode 100644 index 000000000..7f52ff003 --- /dev/null +++ b/src/enums/resources/map/collisiontype.h @@ -0,0 +1,41 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef ENUMS_RESOURCES_MAP_COLLISIONTYPE_H +#define ENUMS_RESOURCES_MAP_COLLISIONTYPE_H + +#include "enums/simpletypes/enumdefines.h" + +enumStart(CollisionType) +{ + 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 +} +enumEnd(CollisionType); + +#endif // ENUMS_RESOURCES_MAP_COLLISIONTYPE_H 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; } |