diff options
author | Naios <naios-dev@live.de> | 2015-10-30 23:58:34 +0100 |
---|---|---|
committer | Naios <naios-dev@live.de> | 2015-11-01 14:33:31 +0100 |
commit | 0b6f7845911c41dcc175996816abc2e06f7dadbd (patch) | |
tree | b1429edf73b94b15922281544d43e5687d1be8ac /src/server/game/AI/CreatureAIImpl.h | |
parent | 92b08fc74b368e9512c5238d91e381b6df644219 (diff) |
Core/AI: Convert the hardcoded variadic RAND functions into one C++11 variadic template version.
Diffstat (limited to 'src/server/game/AI/CreatureAIImpl.h')
-rw-r--r-- | src/server/game/AI/CreatureAIImpl.h | 290 |
1 files changed, 6 insertions, 284 deletions
diff --git a/src/server/game/AI/CreatureAIImpl.h b/src/server/game/AI/CreatureAIImpl.h index a2c5c5db057..529f7420021 100644 --- a/src/server/game/AI/CreatureAIImpl.h +++ b/src/server/game/AI/CreatureAIImpl.h @@ -23,292 +23,14 @@ #include "CreatureAI.h" #include "SpellMgr.h" -template<class T> -inline -const T& RAND(const T& v1, const T& v2) -{ - return (urand(0, 1)) ? v1 : v2; -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3) -{ - switch (urand(0, 2)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4) -{ - switch (urand(0, 3)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5) -{ - switch (urand(0, 4)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6) -{ - switch (urand(0, 5)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7) -{ - switch (urand(0, 6)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8) -{ - switch (urand(0, 7)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9) -{ - switch (urand(0, 8)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10) -{ - switch (urand(0, 9)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11) -{ - switch (urand(0, 10)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11, const T& v12) -{ - switch (urand(0, 11)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - case 11: return v12; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11, const T& v12, const T& v13) -{ - switch (urand(0, 12)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - case 11: return v12; - case 12: return v13; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14) -{ - switch (urand(0, 13)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - case 11: return v12; - case 12: return v13; - case 13: return v14; - } -} - -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14, const T& v15) -{ - switch (urand(0, 14)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - case 11: return v12; - case 12: return v13; - case 13: return v14; - case 14: return v15; - } -} +#include <functional> +#include <type_traits> -template<class T> -inline -const T& RAND(const T& v1, const T& v2, const T& v3, const T& v4, const T& v5, const T& v6, const T& v7, const T& v8, - const T& v9, const T& v10, const T& v11, const T& v12, const T& v13, const T& v14, const T& v15, const T& v16) +template<typename First, typename Second, typename... Rest> +static inline First const& RAND(First const& first, Second const& second, Rest const&... rest) { - switch (urand(0, 15)) - { - default: - case 0: return v1; - case 1: return v2; - case 2: return v3; - case 3: return v4; - case 4: return v5; - case 5: return v6; - case 6: return v7; - case 7: return v8; - case 8: return v9; - case 9: return v10; - case 10: return v11; - case 11: return v12; - case 12: return v13; - case 13: return v14; - case 14: return v15; - case 15: return v16; - } + std::reference_wrapper<typename std::add_const<First>::type> const pack[] = { first, second, rest... }; + return pack[urand(0, sizeof...(rest) + 1)].get(); } enum AITarget |