Browse Source

magic_enum: Customize enums where they're declared

This necessitates dependencies on `magic_enum` in more
places but avoids obscure hard-to-debug errors, such
as the one seen in the DOS port PR.
pull/7922/merge
Gleb Mazovetskiy 7 months ago
parent
commit
fd02564a85
  1. 15
      Source/CMakeLists.txt
  2. 6
      Source/effects.cpp
  3. 12
      Source/monstdat.cpp
  4. 14
      Source/monstdat.h
  5. 8
      Source/sound_effect_enums.h
  6. 6
      Source/textdat.cpp
  7. 8
      Source/textdat.h

15
Source/CMakeLists.txt

@ -345,6 +345,7 @@ add_devilutionx_object_library(libdevilutionx_game_mode
) )
target_link_dependencies(libdevilutionx_game_mode PRIVATE target_link_dependencies(libdevilutionx_game_mode PRIVATE
tl tl
magic_enum::magic_enum
libdevilutionx_options libdevilutionx_options
) )
@ -374,6 +375,7 @@ add_devilutionx_object_library(libdevilutionx_init
init.cpp init.cpp
) )
target_link_dependencies(libdevilutionx_init PUBLIC target_link_dependencies(libdevilutionx_init PUBLIC
magic_enum::magic_enum
libdevilutionx_assets libdevilutionx_assets
libdevilutionx_config libdevilutionx_config
libdevilutionx_mpq libdevilutionx_mpq
@ -462,6 +464,7 @@ add_devilutionx_object_library(libdevilutionx_lighting
target_link_dependencies(libdevilutionx_lighting PUBLIC target_link_dependencies(libdevilutionx_lighting PUBLIC
DevilutionX::SDL DevilutionX::SDL
fmt::fmt fmt::fmt
magic_enum::magic_enum
tl tl
unordered_dense::unordered_dense unordered_dense::unordered_dense
libdevilutionx_vision libdevilutionx_vision
@ -600,6 +603,7 @@ add_devilutionx_object_library(libdevilutionx_options
target_link_dependencies(libdevilutionx_options PUBLIC target_link_dependencies(libdevilutionx_options PUBLIC
DevilutionX::SDL DevilutionX::SDL
fmt::fmt fmt::fmt
magic_enum::magic_enum
tl tl
unordered_dense::unordered_dense unordered_dense::unordered_dense
libdevilutionx_controller_buttons libdevilutionx_controller_buttons
@ -639,6 +643,7 @@ target_link_dependencies(libdevilutionx_player
PUBLIC PUBLIC
DevilutionX::SDL DevilutionX::SDL
fmt::fmt fmt::fmt
magic_enum::magic_enum
tl tl
unordered_dense::unordered_dense unordered_dense::unordered_dense
libdevilutionx_game_mode libdevilutionx_game_mode
@ -725,6 +730,16 @@ if(NOSOUND)
effects_stubs.cpp effects_stubs.cpp
engine/sound_stubs.cpp engine/sound_stubs.cpp
) )
target_link_dependencies(libdevilutionx_sound PUBLIC
DevilutionX::SDL
fmt::fmt
magic_enum::magic_enum
tl
unordered_dense::unordered_dense
libdevilutionx_options
libdevilutionx_random
libdevilutionx_sdl2_to_1_2_backports
)
else() else()
add_devilutionx_object_library(libdevilutionx_sound add_devilutionx_object_library(libdevilutionx_sound
effects.cpp effects.cpp

6
Source/effects.cpp

@ -22,12 +22,6 @@
#include "player.h" #include "player.h"
#include "utils/is_of.hpp" #include "utils/is_of.hpp"
template <>
struct magic_enum::customize::enum_range<devilution::SfxID> {
static constexpr int min = static_cast<int>(devilution::SfxID::None);
static constexpr int max = static_cast<int>(devilution::SfxID::LAST);
};
namespace devilution { namespace devilution {
int sfxdelay; int sfxdelay;

12
Source/monstdat.cpp

@ -29,18 +29,6 @@
#include "textdat.h" #include "textdat.h"
#include "utils/language.h" #include "utils/language.h"
template <>
struct magic_enum::customize::enum_range<devilution::_monster_id> {
static constexpr int min = devilution::MT_INVALID;
static constexpr int max = devilution::NUM_DEFAULT_MTYPES;
};
template <>
struct magic_enum::customize::enum_range<devilution::monster_resistance> {
static constexpr int min = 0;
static constexpr int max = 128;
};
namespace devilution { namespace devilution {
namespace { namespace {

14
Source/monstdat.h

@ -10,6 +10,8 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <magic_enum/magic_enum.hpp>
#include "cursor.h" #include "cursor.h"
#include "textdat.h" #include "textdat.h"
@ -349,3 +351,15 @@ void LoadMonsterData();
size_t GetNumMonsterSprites(); size_t GetNumMonsterSprites();
} // namespace devilution } // namespace devilution
template <>
struct magic_enum::customize::enum_range<devilution::_monster_id> {
static constexpr int min = devilution::MT_INVALID;
static constexpr int max = devilution::NUM_DEFAULT_MTYPES;
};
template <>
struct magic_enum::customize::enum_range<devilution::monster_resistance> {
static constexpr int min = 0;
static constexpr int max = 128;
};

8
Source/sound_effect_enums.h

@ -2,6 +2,8 @@
#include <cstdint> #include <cstdint>
#include <magic_enum/magic_enum.hpp>
namespace devilution { namespace devilution {
enum class HeroSpeech : uint8_t { enum class HeroSpeech : uint8_t {
@ -1039,3 +1041,9 @@ enum sfx_flag : uint8_t {
}; };
} // namespace devilution } // namespace devilution
template <>
struct magic_enum::customize::enum_range<devilution::SfxID> {
static constexpr int min = static_cast<int>(devilution::SfxID::None);
static constexpr int max = static_cast<int>(devilution::SfxID::LAST);
};

6
Source/textdat.cpp

@ -14,12 +14,6 @@
#include "effects.h" #include "effects.h"
#include "utils/language.h" #include "utils/language.h"
template <>
struct magic_enum::customize::enum_range<devilution::_speech_id> {
static constexpr int min = devilution::TEXT_NONE;
static constexpr int max = devilution::NUM_DEFAULT_TEXT_IDS;
};
namespace devilution { namespace devilution {
/* todo: move text out of struct */ /* todo: move text out of struct */

8
Source/textdat.h

@ -5,11 +5,11 @@
*/ */
#pragma once #pragma once
#include <cstddef>
#include <cstdint> #include <cstdint>
#include <string> #include <string>
#include <expected.hpp> #include <expected.hpp>
#include <magic_enum/magic_enum.hpp>
#include "sound_effect_enums.h" #include "sound_effect_enums.h"
@ -440,3 +440,9 @@ tl::expected<_speech_id, std::string> ParseSpeechId(std::string_view value);
void LoadTextData(); void LoadTextData();
} // namespace devilution } // namespace devilution
template <>
struct magic_enum::customize::enum_range<devilution::_speech_id> {
static constexpr int min = devilution::TEXT_NONE;
static constexpr int max = devilution::NUM_DEFAULT_TEXT_IDS;
};

Loading…
Cancel
Save