sead
Loading...
Searching...
No Matches
seadControllerMgr.h
Go to the documentation of this file.
1#ifndef SEAD_CONTROLLER_MGR_H_
2#define SEAD_CONTROLLER_MGR_H_
3
4#include <container/seadOffsetList.h>
5#include <controller/seadController.h>
6#include <framework/seadCalculateTask.h>
7#include <framework/seadTaskMgr.h>
8#include <framework/seadTaskParameter.h>
9
10namespace sead {
11
12class ControlDevice;
13class Controller;
14class ControllerAddon;
15
17{
19
20private:
22 {
23 public:
26 , mHeapArray()
27 {
28 heap_array = &mHeapArray;
29 }
30
31 private:
33 };
34
35public:
36 struct Parameter : public TaskParameter
37 {
39
40 public:
43
45 : controllerMax(0)
46 , proc(nullptr)
47 {
48 }
49 };
50
51public:
54 virtual ~ControllerMgr() { }
55
56 virtual void prepare();
57 virtual void calc();
58
59 void initialize(s32 controller_max, Heap* heap);
60 void finalize();
61
62 void initializeDefault(Heap* heap);
63 void finalizeDefault();
64
65 // TODO: Add/remove devices & controllers
66
70
71 template <typename T>
72 T getControllerByOrderAs(s32 index) const;
73 template <typename T>
74 T getControlDeviceAs() const;
75 template <typename T>
76 T getControllerAddonAs(s32 index) const;
77
78 s32 findControllerPort(const Controller* controller) const;
79
80private:
83};
84#ifdef cafe
85static_assert(sizeof(ControllerMgr) == 0xE8, "sead::ControllerMgr size mismatch");
86#endif // cafe
87
88template <typename T>
90{
91 for (PtrArray<Controller>::iterator it = mControllers.begin(); it != mControllers.end(); ++it)
92 {
93 T controller = DynamicCast<typename remove_pointer<T>::type>(&(*it));
94 if (controller)
95 {
96 if (index == 0)
97 return controller;
98
99 index--;
100 }
101 }
102
103 return nullptr;
104}
105
106template <typename T>
108{
109 for (OffsetList<ControlDevice>::iterator it = mDevices.begin(); it != mDevices.end(); ++it)
110 {
111 T device = DynamicCast<typename remove_pointer<T>::type>(&(*it));
112 if (device)
113 return device;
114 }
115
116 return nullptr;
117}
118
119template <typename T>
121{
122 Controller* controller = mControllers.at(index);
123 if (controller)
124 return controller->getAddonAs<T>();
125
126 return nullptr;
127}
128
129} // namespace sead
130
131#endif // SEAD_CONTROLLER_MGR_H_
Definition seadCalculateTask.h:10
Definition seadControlDevice.h:13
Definition seadControllerAddon.h:14
Definition seadControllerDefine.h:9
AddonId
Definition seadControllerDefine.h:41
ControllerId
Definition seadControllerDefine.h:12
DeviceId
Definition seadControllerDefine.h:27
Definition seadControllerMgr.h:22
HeapArray mHeapArray
Definition seadControllerMgr.h:32
ConstructArg()
Definition seadControllerMgr.h:24
Definition seadControllerMgr.h:17
ControllerAddon * getControllerAddon(s32 index, ControllerDefine::AddonId id) const
Definition seadControllerMgr.cpp:232
PtrArray< Controller > mControllers
Definition seadControllerMgr.h:82
T getControllerAddonAs(s32 index) const
Definition seadControllerMgr.h:120
ControllerMgr(const TaskConstructArg &arg)
Definition seadControllerMgr.cpp:26
ControlDevice * getControlDevice(ControllerDefine::DeviceId id) const
Definition seadControllerMgr.cpp:220
T getControllerByOrderAs(s32 index) const
Definition seadControllerMgr.h:89
T getControlDeviceAs() const
Definition seadControllerMgr.h:107
virtual void prepare()
Definition seadControllerMgr.cpp:32
s32 findControllerPort(const Controller *controller) const
Definition seadControllerMgr.cpp:241
void finalize()
Definition seadControllerMgr.cpp:52
void initialize(s32 controller_max, Heap *heap)
Definition seadControllerMgr.cpp:47
Controller * getControllerByOrder(ControllerDefine::ControllerId id, s32 index) const
Definition seadControllerMgr.cpp:203
OffsetList< ControlDevice > mDevices
Definition seadControllerMgr.h:81
virtual void calc()
Definition seadControllerMgr.cpp:194
virtual ~ControllerMgr()
Definition seadControllerMgr.h:54
void initializeDefault(Heap *heap)
Definition seadControllerMgr.cpp:57
ControllerMgr()
Definition seadControllerMgr.cpp:20
void finalizeDefault()
Definition seadControllerMgr.cpp:93
Definition seadController.h:28
Definition seadHeapPolicies.h:10
Definition seadHeap.h:23
Definition seadDelegate.h:266
Definition seadOffsetList.h:11
Definition seadPtrArray.h:111
Definition seadTaskParameter.h:9
Definition seadAssert.h:44
#define SEAD_RTTI_OVERRIDE(CLASS, BASE)
Definition seadRuntimeTypeInfo.h:96
#define SEAD_TASK_SINGLETON_DISPOSER(CLASS)
Definition seadTaskMgr.h:145
Definition seadControllerMgr.h:37
IDelegate1< ControllerMgr * > * proc
Definition seadControllerMgr.h:42
Parameter()
Definition seadControllerMgr.h:44
s32 controllerMax
Definition seadControllerMgr.h:41
Definition seadTaskID.h:14
TaskConstructArg()
Definition seadTaskID.h:15