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
58 void initialize(s32 controller_max, Heap* heap);
59 void finalize();
60
61 void initializeDefault(Heap* heap);
62 void finalizeDefault();
63
64 virtual void calc();
65
66 // TODO: Add/remove devices & controllers
67
68 s32 findControllerPort(const Controller* controller) const;
69
73
74 template <typename T>
75 T getControllerByOrderAs(s32 index) const;
76 template <typename T>
77 T getControlDeviceAs() const;
78 template <typename T>
79 T getControllerAddonAs(s32 index) const;
80
81private:
84};
85#ifdef cafe
86static_assert(sizeof(ControllerMgr) == 0xE8, "sead::ControllerMgr size mismatch");
87#endif // cafe
88
89template <typename T>
91{
92 for (PtrArray<Controller>::iterator it = mControllers.begin(); it != mControllers.end(); ++it)
93 {
94 T controller = DynamicCast<typename remove_pointer<T>::type>(&(*it));
95 if (controller)
96 {
97 if (index == 0)
98 return controller;
99
100 index--;
101 }
102 }
103
104 return nullptr;
105}
106
107template <typename T>
109{
110 for (OffsetList<ControlDevice>::iterator it = mDevices.begin(); it != mDevices.end(); ++it)
111 {
112 T device = DynamicCast<typename remove_pointer<T>::type>(&(*it));
113 if (device)
114 return device;
115 }
116
117 return nullptr;
118}
119
120template <typename T>
122{
123 Controller* controller = mControllers.at(index);
124 if (controller)
125 return controller->getAddonAs<T>();
126
127 return nullptr;
128}
129
130} // namespace sead
131
132#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:83
T getControllerAddonAs(s32 index) const
Definition seadControllerMgr.h:121
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:90
T getControlDeviceAs() const
Definition seadControllerMgr.h:108
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:82
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:119
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:151
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