sead
Loading...
Searching...
No Matches
seadController.h
Go to the documentation of this file.
1#ifndef SEAD_CONTROLLER_H_
2#define SEAD_CONTROLLER_H_
3
4// TODO: Move this
5
6namespace {
7
8template <typename T> struct remove_pointer { typedef T type; };
9template <typename T> struct remove_pointer<T*> { typedef T type; };
10template <typename T> struct remove_pointer<T* const> { typedef T type; };
11template <typename T> struct remove_pointer<T* volatile> { typedef T type; };
12template <typename T> struct remove_pointer<T* const volatile> { typedef T type; };
13
14}
15
16#include <container/seadOffsetList.h>
17#include <controller/seadControllerBase.h>
18#include <controller/seadControllerDefine.h>
19#include <prim/seadRuntimeTypeInfo.h>
20
21namespace sead {
22
23class ControllerAddon;
24class ControllerMgr;
26
28{
30
31public:
66
101
102public:
104 virtual ~Controller() { }
105
106 virtual void calc();
107 virtual bool isConnected() const { return true; }
108
109protected:
110 virtual void calcImpl_() = 0;
111 virtual bool isIdle_();
112 virtual void setIdle_();
113
114public:
116
117 // TODO: Add/remove addon
119
120 template <typename T>
121 T getAddonAs() const;
122
123protected:
128
130 friend class ControllerMgr;
131};
132#ifdef cafe
133static_assert(sizeof(Controller) == 0x15C, "sead::Controller size mismatch");
134#endif // cafe
135
136template <typename T>
138{
139 for (OffsetList<ControllerAddon>::iterator it = mAddons.begin(); it != mAddons.end(); ++it)
140 {
141 T addon = DynamicCast<typename remove_pointer<T>::type>(&(*it));
142 if (addon)
143 return addon;
144 }
145
146 return nullptr;
147}
148
149} // namespace sead
150
151#endif // SEAD_CONTROLLER_H_
Definition seadControllerAddon.h:14
Definition seadControllerBase.h:13
Definition seadControllerDefine.h:9
AddonId
Definition seadControllerDefine.h:41
ControllerId
Definition seadControllerDefine.h:12
Definition seadControllerMgr.h:17
Definition seadControllerWrapperBase.h:13
Definition seadController.h:28
ControllerDefine::ControllerId getId() const
Definition seadController.h:115
OffsetList< ControllerAddon > mAddons
Definition seadController.h:126
OffsetList< ControllerWrapperBase > mWrappers
Definition seadController.h:127
virtual void calc()
Definition seadController.cpp:19
Controller(ControllerMgr *mgr)
Definition seadController.cpp:8
PadIdx
Definition seadController.h:33
@ cPadIdx_Touch
Definition seadController.h:51
@ cPadIdx_Start
Definition seadController.h:45
@ cPadIdx_C
Definition seadController.h:36
@ cPadIdx_LeftStickDown
Definition seadController.h:57
@ cPadIdx_Select
Definition seadController.h:46
@ cPadIdx_B
Definition seadController.h:35
@ cPadIdx_Plus
Definition seadController.h:44
@ cPadIdx_LeftStickRight
Definition seadController.h:59
@ cPadIdx_Left
Definition seadController.h:54
@ cPadIdx_LeftStickLeft
Definition seadController.h:58
@ cPadIdx_Up
Definition seadController.h:52
@ cPadIdx_LeftStickUp
Definition seadController.h:56
@ cPadIdx_Minus
Definition seadController.h:43
@ cPadIdx_ZR
Definition seadController.h:48
@ cPadIdx_Right
Definition seadController.h:55
@ cPadIdx_2
Definition seadController.h:40
@ cPadIdx_R
Definition seadController.h:50
@ cPadIdx_Z
Definition seadController.h:39
@ cPadIdx_RightStickDown
Definition seadController.h:61
@ cPadIdx_L
Definition seadController.h:49
@ cPadIdx_RightStickLeft
Definition seadController.h:62
@ cPadIdx_RightStickUp
Definition seadController.h:60
@ cPadIdx_ZL
Definition seadController.h:47
@ cPadIdx_RightStickRight
Definition seadController.h:63
@ cPadIdx_Y
Definition seadController.h:38
@ cPadIdx_A
Definition seadController.h:34
@ cPadIdx_1
Definition seadController.h:41
@ cPadIdx_Down
Definition seadController.h:53
@ cPadIdx_Home
Definition seadController.h:42
@ cPadIdx_X
Definition seadController.h:37
@ cPadIdx_Max
Definition seadController.h:64
virtual ~Controller()
Definition seadController.h:104
virtual bool isIdle_()
Definition seadController.cpp:55
ControllerAddon * getAddon(ControllerDefine::AddonId id) const
Definition seadController.cpp:43
virtual void calcImpl_()=0
ControllerDefine::ControllerId mId
Definition seadController.h:124
virtual bool isConnected() const
Definition seadController.h:107
T getAddonAs() const
Definition seadController.h:137
virtual void setIdle_()
Definition seadController.cpp:60
ControllerMgr * mMgr
Definition seadController.h:125
PadFlag
Definition seadController.h:68
@ cPadFlag_Minus
Definition seadController.h:78
@ cPadFlag_A
Definition seadController.h:69
@ cPadFlag_All
Definition seadController.h:99
@ cPadFlag_R
Definition seadController.h:85
@ cPadFlag_RightStickUp
Definition seadController.h:95
@ cPadFlag_X
Definition seadController.h:72
@ cPadFlag_Y
Definition seadController.h:73
@ cPadFlag_Home
Definition seadController.h:77
@ cPadFlag_B
Definition seadController.h:70
@ cPadFlag_Z
Definition seadController.h:74
@ cPadFlag_Plus
Definition seadController.h:79
@ cPadFlag_RightStickLeft
Definition seadController.h:97
@ cPadFlag_Start
Definition seadController.h:80
@ cPadFlag_C
Definition seadController.h:71
@ cPadFlag_LeftStickUp
Definition seadController.h:91
@ cPadFlag_Up
Definition seadController.h:87
@ cPadFlag_L
Definition seadController.h:84
@ cPadFlag_Left
Definition seadController.h:89
@ cPadFlag_ZL
Definition seadController.h:82
@ cPadFlag_LeftStickDown
Definition seadController.h:92
@ cPadFlag_Touch
Definition seadController.h:86
@ cPadFlag_Down
Definition seadController.h:88
@ cPadFlag_LeftStickRight
Definition seadController.h:94
@ cPadFlag_Right
Definition seadController.h:90
@ cPadFlag_ZR
Definition seadController.h:83
@ cPadFlag_2
Definition seadController.h:75
@ cPadFlag_RightStickDown
Definition seadController.h:96
@ cPadFlag_LeftStickLeft
Definition seadController.h:93
@ cPadFlag_RightStickRight
Definition seadController.h:98
@ cPadFlag_1
Definition seadController.h:76
@ cPadFlag_Select
Definition seadController.h:81
Definition seadOffsetList.h:11
Definition seadAssert.h:44
#define SEAD_RTTI_BASE(CLASS)
Definition seadRuntimeTypeInfo.h:75