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 );
62
63/// @brief Defines a virtual state.
64/// @param class The class name.
65/// @param name The state name.
66/// @hideinitializer
67#define STATE_VIRTUAL_DEFINE_INH(class, name, inherit) \
68 template <typename T> \
69 static const sStateIDIf_c &baseID_##name() { \
70 return T::StateID_##name; \
71 } \
72 template <> \
73 const sStateIDIf_c &baseID_##name<sStateID_c>() { \
74 return sStateID::null; \
75 } \
76 sFStateVirtualID_c<class> class::StateID_##name( \
77 baseID_##name<inherit>(), \
78 #class "::StateID_" #name, \
79 &class::initializeState_##name, \
80 &class::executeState_##name, \
81 &class::finalizeState_##name \
82 );