Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions 3rdParty/magic_enum/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
include(functions/FetchContent_ExcludeFromAll_backport)
include(FetchContent)

FetchContent_Declare_ExcludeFromAll(magic_enum
URL https://github.com/Neargye/magic_enum/archive/refs/tags/v0.9.7.tar.gz
URL_HASH MD5=5afd218c48c3f7cf094889a182842a50
)
FetchContent_MakeAvailable_ExcludeFromAll(magic_enum)
1 change: 1 addition & 0 deletions Brewfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ brew "libsodium"
brew "pkg-config"
brew "googletest"
brew "google-benchmark"
brew "magic_enum"
16 changes: 16 additions & 0 deletions CMake/Dependencies.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,22 @@ else()
add_subdirectory(3rdParty/unordered_dense)
endif()

if(NOT DEFINED DEVILUTIONX_SYSTEM_MAGIC_ENUM)
find_package(magic_enum 0.9.7 QUIET)
if(magic_enum_FOUND)
message("-- Found magic_enum ${magic_enum_VERSION}")
else()
message("-- Suitable system magic_enum package not found, will use magic_enum from source")
set(DEVILUTIONX_SYSTEM_MAGIC_ENUM OFF)
endif()
endif()
dependency_options("magic_enum" DEVILUTIONX_SYSTEM_MAGIC_ENUM ON DEVILUTIONX_STATIC_MAGIC_ENUM)
if(DEVILUTIONX_SYSTEM_MAGIC_ENUM)
find_package(magic_enum REQUIRED)
else()
add_subdirectory(3rdParty/magic_enum)
endif()

if(SUPPORTS_MPQ OR NOT NONET)
add_subdirectory(3rdParty/PKWare)
endif()
Expand Down
2 changes: 2 additions & 0 deletions Source/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,7 @@ add_devilutionx_object_library(libdevilutionx_monster
target_link_dependencies(libdevilutionx_monster
PUBLIC
DevilutionX::SDL
magic_enum::magic_enum
sol2::sol2
tl
libdevilutionx_game_mode
Expand Down Expand Up @@ -854,6 +855,7 @@ target_link_dependencies(libdevilutionx PUBLIC
fmt::fmt
libsmackerdec
${LUA_LIBRARIES}
magic_enum::magic_enum
sol2::sol2
tl
unordered_dense::unordered_dense
Expand Down
168 changes: 11 additions & 157 deletions Source/monstdat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <cstdint>

#include <ankerl/unordered_dense.h>
#include <magic_enum/magic_enum.hpp>

#include "cursor.h"
#include "data/file.hpp"
Expand All @@ -18,6 +19,12 @@
#include "textdat.h"
#include "utils/language.h"

template <>
struct magic_enum::customize::enum_range<devilution::_monster_id> {
static constexpr int min = devilution::MT_INVALID;

Check warning on line 24 in Source/monstdat.cpp

View workflow job for this annotation

GitHub Actions / tidy-check

Source/monstdat.cpp:24:23 [readability-identifier-naming]

invalid case style for constexpr variable 'min'
static constexpr int max = devilution::NUM_MTYPES;

Check warning on line 25 in Source/monstdat.cpp

View workflow job for this annotation

GitHub Actions / tidy-check

Source/monstdat.cpp:25:23 [readability-identifier-naming]

invalid case style for constexpr variable 'max'
};

namespace devilution {

namespace {
Expand Down Expand Up @@ -208,163 +215,10 @@

tl::expected<_monster_id, std::string> ParseMonsterId(std::string_view value)
{
if (value == "MT_NZOMBIE") return MT_NZOMBIE;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What happens once this is renamed to MonsterType::Zombie? Ideal it should produce Zombie

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that's exactly what it would produce :)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In that case could you resolve the merge conflict, after that i think it's ready to merge.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I fixed the merge conflicts now :)

if (value == "MT_BZOMBIE") return MT_BZOMBIE;
if (value == "MT_GZOMBIE") return MT_GZOMBIE;
if (value == "MT_YZOMBIE") return MT_YZOMBIE;
if (value == "MT_RFALLSP") return MT_RFALLSP;
if (value == "MT_DFALLSP") return MT_DFALLSP;
if (value == "MT_YFALLSP") return MT_YFALLSP;
if (value == "MT_BFALLSP") return MT_BFALLSP;
if (value == "MT_WSKELAX") return MT_WSKELAX;
if (value == "MT_TSKELAX") return MT_TSKELAX;
if (value == "MT_RSKELAX") return MT_RSKELAX;
if (value == "MT_XSKELAX") return MT_XSKELAX;
if (value == "MT_RFALLSD") return MT_RFALLSD;
if (value == "MT_DFALLSD") return MT_DFALLSD;
if (value == "MT_YFALLSD") return MT_YFALLSD;
if (value == "MT_BFALLSD") return MT_BFALLSD;
if (value == "MT_NSCAV") return MT_NSCAV;
if (value == "MT_BSCAV") return MT_BSCAV;
if (value == "MT_WSCAV") return MT_WSCAV;
if (value == "MT_YSCAV") return MT_YSCAV;
if (value == "MT_WSKELBW") return MT_WSKELBW;
if (value == "MT_TSKELBW") return MT_TSKELBW;
if (value == "MT_RSKELBW") return MT_RSKELBW;
if (value == "MT_XSKELBW") return MT_XSKELBW;
if (value == "MT_WSKELSD") return MT_WSKELSD;
if (value == "MT_TSKELSD") return MT_TSKELSD;
if (value == "MT_RSKELSD") return MT_RSKELSD;
if (value == "MT_XSKELSD") return MT_XSKELSD;
if (value == "MT_SNEAK") return MT_SNEAK;
if (value == "MT_STALKER") return MT_STALKER;
if (value == "MT_UNSEEN") return MT_UNSEEN;
if (value == "MT_ILLWEAV") return MT_ILLWEAV;
if (value == "MT_NGOATMC") return MT_NGOATMC;
if (value == "MT_BGOATMC") return MT_BGOATMC;
if (value == "MT_RGOATMC") return MT_RGOATMC;
if (value == "MT_GGOATMC") return MT_GGOATMC;
if (value == "MT_FIEND") return MT_FIEND;
if (value == "MT_GLOOM") return MT_GLOOM;
if (value == "MT_BLINK") return MT_BLINK;
if (value == "MT_FAMILIAR") return MT_FAMILIAR;
if (value == "MT_NGOATBW") return MT_NGOATBW;
if (value == "MT_BGOATBW") return MT_BGOATBW;
if (value == "MT_RGOATBW") return MT_RGOATBW;
if (value == "MT_GGOATBW") return MT_GGOATBW;
if (value == "MT_NACID") return MT_NACID;
if (value == "MT_RACID") return MT_RACID;
if (value == "MT_BACID") return MT_BACID;
if (value == "MT_XACID") return MT_XACID;
if (value == "MT_SKING") return MT_SKING;
if (value == "MT_FAT") return MT_FAT;
if (value == "MT_MUDMAN") return MT_MUDMAN;
if (value == "MT_TOAD") return MT_TOAD;
if (value == "MT_FLAYED") return MT_FLAYED;
if (value == "MT_WYRM") return MT_WYRM;
if (value == "MT_CAVSLUG") return MT_CAVSLUG;
if (value == "MT_DEVOUR") return MT_DEVOUR;
if (value == "MT_DVLWYRM") return MT_DVLWYRM;
if (value == "MT_NMAGMA") return MT_NMAGMA;
if (value == "MT_YMAGMA") return MT_YMAGMA;
if (value == "MT_BMAGMA") return MT_BMAGMA;
if (value == "MT_WMAGMA") return MT_WMAGMA;
if (value == "MT_HORNED") return MT_HORNED;
if (value == "MT_MUDRUN") return MT_MUDRUN;
if (value == "MT_FROSTC") return MT_FROSTC;
if (value == "MT_OBLORD") return MT_OBLORD;
if (value == "MT_BONEDMN") return MT_BONEDMN;
if (value == "MT_REDDTH") return MT_REDDTH;
if (value == "MT_LTCHDMN") return MT_LTCHDMN;
if (value == "MT_UDEDBLRG") return MT_UDEDBLRG;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INCIN") return MT_INCIN;
if (value == "MT_FLAMLRD") return MT_FLAMLRD;
if (value == "MT_DOOMFIRE") return MT_DOOMFIRE;
if (value == "MT_HELLBURN") return MT_HELLBURN;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_RSTORM") return MT_RSTORM;
if (value == "MT_STORM") return MT_STORM;
if (value == "MT_STORML") return MT_STORML;
if (value == "MT_MAEL") return MT_MAEL;
if (value == "MT_WINGED") return MT_WINGED;
if (value == "MT_GARGOYLE") return MT_GARGOYLE;
if (value == "MT_BLOODCLW") return MT_BLOODCLW;
if (value == "MT_DEATHW") return MT_DEATHW;
if (value == "MT_MEGA") return MT_MEGA;
if (value == "MT_GUARD") return MT_GUARD;
if (value == "MT_VTEXLRD") return MT_VTEXLRD;
if (value == "MT_BALROG") return MT_BALROG;
if (value == "MT_NSNAKE") return MT_NSNAKE;
if (value == "MT_RSNAKE") return MT_RSNAKE;
if (value == "MT_GSNAKE") return MT_GSNAKE;
if (value == "MT_BSNAKE") return MT_BSNAKE;
if (value == "MT_NBLACK") return MT_NBLACK;
if (value == "MT_RTBLACK") return MT_RTBLACK;
if (value == "MT_BTBLACK") return MT_BTBLACK;
if (value == "MT_RBLACK") return MT_RBLACK;
if (value == "MT_UNRAV") return MT_UNRAV;
if (value == "MT_HOLOWONE") return MT_HOLOWONE;
if (value == "MT_PAINMSTR") return MT_PAINMSTR;
if (value == "MT_REALWEAV") return MT_REALWEAV;
if (value == "MT_SUCCUBUS") return MT_SUCCUBUS;
if (value == "MT_SNOWWICH") return MT_SNOWWICH;
if (value == "MT_HLSPWN") return MT_HLSPWN;
if (value == "MT_SOLBRNR") return MT_SOLBRNR;
if (value == "MT_COUNSLR") return MT_COUNSLR;
if (value == "MT_MAGISTR") return MT_MAGISTR;
if (value == "MT_CABALIST") return MT_CABALIST;
if (value == "MT_ADVOCATE") return MT_ADVOCATE;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_DIABLO") return MT_DIABLO;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_GOLEM") return MT_GOLEM;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_INVALID") return MT_INVALID;
if (value == "MT_BIGFALL") return MT_BIGFALL;
if (value == "MT_DARKMAGE") return MT_DARKMAGE;
if (value == "MT_HELLBOAR") return MT_HELLBOAR;
if (value == "MT_STINGER") return MT_STINGER;
if (value == "MT_PSYCHORB") return MT_PSYCHORB;
if (value == "MT_ARACHNON") return MT_ARACHNON;
if (value == "MT_FELLTWIN") return MT_FELLTWIN;
if (value == "MT_HORKSPWN") return MT_HORKSPWN;
if (value == "MT_VENMTAIL") return MT_VENMTAIL;
if (value == "MT_NECRMORB") return MT_NECRMORB;
if (value == "MT_SPIDLORD") return MT_SPIDLORD;
if (value == "MT_LASHWORM") return MT_LASHWORM;
if (value == "MT_TORCHANT") return MT_TORCHANT;
if (value == "MT_HORKDMN") return MT_HORKDMN;
if (value == "MT_DEFILER") return MT_DEFILER;
if (value == "MT_GRAVEDIG") return MT_GRAVEDIG;
if (value == "MT_TOMBRAT") return MT_TOMBRAT;
if (value == "MT_FIREBAT") return MT_FIREBAT;
if (value == "MT_SKLWING") return MT_SKLWING;
if (value == "MT_LICH") return MT_LICH;
if (value == "MT_CRYPTDMN") return MT_CRYPTDMN;
if (value == "MT_HELLBAT") return MT_HELLBAT;
if (value == "MT_BONEDEMN") return MT_BONEDEMN;
if (value == "MT_LICH") return MT_LICH;
if (value == "MT_BICLOPS") return MT_BICLOPS;
if (value == "MT_FLESTHNG") return MT_FLESTHNG;
if (value == "MT_REAPER") return MT_REAPER;
if (value == "MT_NAKRUL") return MT_NAKRUL;
if (value == "MT_CLEAVER") return MT_CLEAVER;
if (value == "MT_INVILORD") return MT_INVILORD;
if (value == "MT_LRDSAYTR") return MT_LRDSAYTR;
const std::optional<_monster_id> enumValueOpt = magic_enum::enum_cast<_monster_id>(value);
if (enumValueOpt.has_value()) {
return enumValueOpt.value();
}
return tl::make_unexpected("Unknown enum value");
}

Expand All @@ -380,7 +234,7 @@

} // namespace

tl::expected<MonsterAIID, std::string> ParseAiId(std::string_view value)

Check warning on line 237 in Source/monstdat.cpp

View workflow job for this annotation

GitHub Actions / tidy-check

Source/monstdat.cpp:237:40 [readability-function-cognitive-complexity]

function 'ParseAiId' has cognitive complexity of 40 (threshold 25)
{
if (value == "Zombie") return MonsterAIID::Zombie;
if (value == "Fat") return MonsterAIID::Fat;
Expand Down
1 change: 1 addition & 0 deletions tools/make_src_dist.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"libmpq",
"libsmackerdec",
"libzt",
"magic_enum",
"sdl_audiolib",
"sheenbidi",
"unordered_dense",
Expand Down
3 changes: 2 additions & 1 deletion vcpkg.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"dependencies": [
"fmt",
"bzip2",
"lua"
"lua",
"magic-enum"
],
"builtin-baseline": "b91c3336aee7f32412508f7dd351ae2cabdb8819",
"features": {
Expand Down
Loading