From 412c5416f9406548c5b59569fbbcf47438f72f07 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 7 May 2025 15:41:41 +0200 Subject: Core/Misc: Minor compile time improving changes (cherry picked from commit b5c99939a82ed956cd185cd7a2ede838e2fdf23e) # Conflicts: # src/server/game/Entities/Item/Item.cpp # src/server/game/Entities/Item/Item.h # src/server/game/Entities/Player/Player.cpp # src/server/game/Entities/Player/Player.h --- src/server/game/Scripting/ScriptMgr.h | 40 +++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'src/server/game/Scripting/ScriptMgr.h') diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index e3b7dc63981..39924cc3b57 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -21,7 +21,6 @@ #include "Common.h" #include "ObjectGuid.h" #include "Tuples.h" -#include "Types.h" #include #include #include @@ -1307,37 +1306,46 @@ class TC_GAME_API ScriptMgr namespace Trinity::SpellScripts { template - using is_SpellScript = std::is_base_of; + concept IsSpellScript = std::is_base_of_v; template - using is_AuraScript = std::is_base_of; + concept IsAuraScript = std::is_base_of_v; + + template + concept IsSpellOrAuraScript = IsSpellScript || IsAuraScript; + + template + concept ComplementScriptFor = (IsSpellScript && IsAuraScript) + || (IsAuraScript && IsSpellScript) + || std::same_as; + + template + concept ArgsTuple = Trinity::is_tuple_v; } -template +template Script2, Trinity::SpellScripts::ArgsTuple ArgsType> class GenericSpellAndAuraScriptLoader : public SpellScriptLoader { - using SpellScriptType = typename Trinity::find_type_if_t; - using AuraScriptType = typename Trinity::find_type_if_t; - using ArgsType = typename Trinity::find_type_if_t; - - static_assert(!std::conjunction_v, std::is_same>, "At least one of SpellScript/AuraScript arguments must be provided for GenericSpellAndAuraScriptLoader"); - public: GenericSpellAndAuraScriptLoader(char const* name, ArgsType&& args) : SpellScriptLoader(name), _args(std::move(args)) { } private: SpellScript* GetSpellScript() const override { - if constexpr (!std::is_same_v) - return Trinity::new_from_tuple(_args); + if constexpr (Trinity::SpellScripts::IsSpellScript) + return Trinity::new_from_tuple(_args); + else if constexpr (Trinity::SpellScripts::IsSpellScript) + return Trinity::new_from_tuple(_args); else return nullptr; } AuraScript* GetAuraScript() const override { - if constexpr (!std::is_same_v) - return Trinity::new_from_tuple(_args); + if constexpr (Trinity::SpellScripts::IsAuraScript) + return Trinity::new_from_tuple(_args); + else if constexpr (Trinity::SpellScripts::IsAuraScript) + return Trinity::new_from_tuple(_args); else return nullptr; } @@ -1345,10 +1353,10 @@ private: ArgsType _args; }; -#define RegisterSpellScriptWithArgs(spell_script, script_name, ...) new GenericSpellAndAuraScriptLoader(script_name, std::make_tuple(__VA_ARGS__)) -#define RegisterSpellScript(spell_script) RegisterSpellScriptWithArgs(spell_script, #spell_script) #define RegisterSpellAndAuraScriptPairWithArgs(script_1, script_2, script_name, ...) new GenericSpellAndAuraScriptLoader(script_name, std::make_tuple(__VA_ARGS__)) #define RegisterSpellAndAuraScriptPair(script_1, script_2) RegisterSpellAndAuraScriptPairWithArgs(script_1, script_2, #script_1) +#define RegisterSpellScriptWithArgs(spell_script, script_name, ...) RegisterSpellAndAuraScriptPairWithArgs(spell_script, void, script_name, __VA_ARGS__) +#define RegisterSpellScript(spell_script) RegisterSpellAndAuraScriptPairWithArgs(spell_script, void, #spell_script) template class GenericCreatureScript : public CreatureScript -- cgit v1.2.3