NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
s_State.hpp
Go to the documentation of this file.
1#pragma once
2#include <game/sLib/s_FStateStateMgr.hpp>
3#include <game/sLib/s_FStateMgr.hpp>
4#include <game/sLib/s_StateMethodUsr_FI.hpp>
5#include <game/sLib/s_FStateVirtualID.hpp>
6/// @file
7
8/// @brief Declares a state.
9/// @param class The class name.
10/// @param name The state name.
11/// @hideinitializer
12#define STATE_FUNC_DECLARE(class, name) \
13 void initializeState_##name(); \
14 void executeState_##name(); \
15 void finalizeState_##name(); \
16 static sFStateID_c<class> StateID_##name
17
18/// @brief Declares a virtual state.
19/// @param class The class name.
20/// @param name The state name.
21/// @hideinitializer
22#define STATE_VIRTUAL_FUNC_DECLARE(class, name) \
23 virtual void initializeState_##name(); \
24 virtual void executeState_##name(); \
25 virtual void finalizeState_##name(); \
26 static sFStateVirtualID_c<class> StateID_##name; \
27 template <typename T> static typename T::StateIDSelf_##name StateBaseGetter##name(int) {} \
28 template <typename T> static sStateID_c StateBaseGetter##name(...) {} \
29 typedef decltype(StateBaseGetter##name<class>(0)) StateIDBase_##name; \
30 typedef class StateIDSelf_##name
31
32/// @brief Defines a state.
33/// @param class The class name.
34/// @param name The state name.
35/// @hideinitializer
36#define STATE_DEFINE(class, name) sFStateID_c<class> class::StateID_##name( \
37 #class "::StateID_" #name, \
38 &class::initializeState_##name, \
39 &class::executeState_##name, \
40 &class::finalizeState_##name)
41
42/// @brief Defines a virtual state.
43/// @param class The class name.
44/// @param name The state name.
45/// @hideinitializer
46#define STATE_VIRTUAL_DEFINE(class, name) \
47 template <typename T> \
48 static const sStateIDIf_c &baseID_##name() { \
49 return T::StateID_##name; \
50 } \
51 template <> \
52 const sStateIDIf_c &baseID_##name<sStateID_c>() { \
53 return sStateID::null; \
54 } \
55 sFStateVirtualID_c<class> class::StateID_##name( \
56 baseID_##name<class::StateIDBase_##name>(), \
57 #class "::StateID_" #name, \
58 &class::initializeState_##name, \
59 &class::executeState_##name, \
60 &class::finalizeState_##name \
61 );