sead
Loading...
Searching...
No Matches
seadTaskBase.h
Go to the documentation of this file.
1#ifndef SEAD_TASKBASE_H_
2#define SEAD_TASKBASE_H_
3
4#include <container/seadTList.h>
5#include <container/seadTreeNode.h>
6#include <framework/seadHeapPolicies.h>
7#include <framework/seadTaskID.h>
8#include <heap/seadDisposer.h>
9#include <prim/seadBitFlag.h>
10#include <prim/seadDelegateEventSlot.h>
11#include <prim/seadNamable.h>
12#include <prim/seadRuntimeTypeInfo.h>
13
14namespace sead {
15
16class FaderTaskBase;
17class Framework;
18class MethodTreeMgr;
19class MethodTreeNode;
20struct TaskConstructArg;
21class TaskEvent;
22class TaskMgr;
23class TaskParameter;
24
25class TaskBase : public TTreeNode<TaskBase*>, public IDisposer, public INamable
26{
28
29public:
31 typedef TList<TaskBase*> List;
32
33public:
34 enum State
35 {
39 cSleep = 3,
41 cDying = 5,
44 };
45
46 enum Tag
47 {
49 cApp = 1
50 };
51
71#ifdef cafe
72 static_assert(sizeof(CreateArg) == 0x80, "sead::TaskBase::CreateArg size mismatch");
73#endif // cafe
74
76 {
77 MgrTaskArg(const TaskClassID& class_id);
78 };
79 static_assert(sizeof(MgrTaskArg) == sizeof(CreateArg), "sead::TaskBase::MgrTaskArg size mismatch");
80
82 {
83 SystemMgrTaskArg(const TaskClassID& class_id);
84 };
85 static_assert(sizeof(SystemMgrTaskArg) == sizeof(MgrTaskArg), "sead::TaskBase::SystemMgrTaskArg size mismatch");
86
87 struct TakeoverArg;
88 struct PushArg;
89
90public:
92 TaskBase(const TaskConstructArg& arg, const char* name);
93
94 virtual void pauseCalc(bool b) = 0;
95 virtual void pauseDraw(bool b) = 0;
96 virtual void pauseCalcRec(bool b) = 0;
97 virtual void pauseDrawRec(bool b) = 0;
98
99 virtual void pauseCalcChild(bool b)
100 {
101 }
102
103 virtual void pauseDrawChild(bool b)
104 {
105 }
106
107 virtual ~TaskBase();
108
109 virtual void prepare();
110 virtual void enterCommon();
111 virtual void enter();
112 virtual void exit();
113 virtual void onEvent(const TaskEvent&);
114 virtual void attachCalcImpl() = 0;
115 virtual void attachDrawImpl() = 0;
116 virtual void detachCalcImpl() = 0;
117 virtual void detachDrawImpl() = 0;
119 virtual MethodTreeNode* getMethodTreeNode(s32 method_type) = 0;
120
121 virtual void onDestroy()
122 {
124 }
125
127
129 {
131 }
132
134 {
136 }
137
139 {
142 }
143
146
147 template <typename T>
148 T* getParameter() const
149 {
150 T* param = DynamicCast<T>(mParameter);
151 return param;
152 }
153
155
157 {
158 if (parent() != nullptr)
159 return parent()->val();
160 else
161 return nullptr;
162 }
163
165 {
166 return mHeapArray.getPrimaryHeap();
167 }
168
170 {
171 return mTaskMgr;
172 }
173
174 Tag getTag() const
175 {
176 return mTag;
177 }
178
179protected:
188
189 friend class TaskMgr;
190};
191#ifdef cafe
192static_assert(sizeof(TaskBase) == 0x74, "sead::TaskBase size mismatch");
193#endif // cafe
194
195} // namespace sead
196
197#endif // SEAD_TASKBASE_H_
Definition seadFramework.h:24
Definition seadHeapPolicies.h:10
Definition seadHeapPolicies.h:75
Definition seadHeap.h:23
Definition seadDisposer.h:12
Definition seadNamable.h:9
Definition seadMethodTreeMgr.h:13
Definition seadMethodTree.h:17
Definition seadTList.h:13
Definition seadTList.h:49
Definition seadTaskBase.h:26
MethodTreeMgr * getMethodTreeMgr() const
Heap * getHeap()
Definition seadTaskBase.h:164
T * getParameter() const
Definition seadTaskBase.h:148
BitFlag32 mInternalFlag
Definition seadTaskBase.h:181
Tag getTag() const
Definition seadTaskBase.h:174
TaskMgr * mTaskMgr
Definition seadTaskBase.h:184
virtual void onDestroy()
Definition seadTaskBase.h:121
TaskMgr * getTaskMgr() const
Definition seadTaskBase.h:169
HeapArray mHeapArray
Definition seadTaskBase.h:183
virtual void enterCommon()
TaskBase(const TaskConstructArg &arg)
virtual void pauseDraw(bool b)=0
State
Definition seadTaskBase.h:35
@ cDestroyable
Definition seadTaskBase.h:42
@ cDying
Definition seadTaskBase.h:41
@ cPrepareDone
Definition seadTaskBase.h:38
@ cPrepare
Definition seadTaskBase.h:37
@ cRunning
Definition seadTaskBase.h:40
@ cCreated
Definition seadTaskBase.h:36
@ cSleep
Definition seadTaskBase.h:39
@ cDead
Definition seadTaskBase.h:43
virtual void onEvent(const TaskEvent &)
TaskParameter * mParameter
Definition seadTaskBase.h:180
void detachDraw()
Definition seadTaskBase.h:133
virtual ~TaskBase()
virtual void pauseCalcRec(bool b)=0
virtual void exit()
void detachCalcDraw()
Definition seadTaskBase.h:138
TaskBase(const TaskConstructArg &arg, const char *name)
virtual void attachDrawImpl()=0
virtual const RuntimeTypeInfo::Interface * getCorrespondingMethodTreeMgrTypeInfo() const =0
Tag mTag
Definition seadTaskBase.h:186
virtual void pauseCalcChild(bool b)
Definition seadTaskBase.h:99
virtual void pauseDrawChild(bool b)
Definition seadTaskBase.h:103
virtual void attachCalcImpl()=0
virtual void detachCalcImpl()=0
virtual void detachDrawImpl()=0
ListNode mTaskListNode
Definition seadTaskBase.h:182
virtual void prepare()
TaskClassID mClassID
Definition seadTaskBase.h:187
virtual void pauseDrawRec(bool b)=0
virtual MethodTreeNode * getMethodTreeNode(s32 method_type)=0
void adjustHeapAll()
TListNode< TaskBase * > ListNode
Definition seadTaskBase.h:30
virtual void enter()
State mState
Definition seadTaskBase.h:185
void detachCalc()
Definition seadTaskBase.h:128
Tag
Definition seadTaskBase.h:47
@ cSystem
Definition seadTaskBase.h:48
@ cApp
Definition seadTaskBase.h:49
TaskBase * getParentTask() const
Definition seadTaskBase.h:156
virtual void pauseCalc(bool b)=0
Framework * getFramework() const
void doneDestroy()
TList< TaskBase * > List
Definition seadTaskBase.h:31
Definition seadTaskID.h:40
Definition seadTaskMgr.h:19
Definition seadTaskParameter.h:9
Definition seadTaskID.h:83
Definition seadRuntimeTypeInfo.h:6
Definition seadAssert.h:44
BitFlag< u32 > BitFlag32
Definition seadBitFlag.h:125
#define SEAD_RTTI_BASE(CLASS)
Definition seadRuntimeTypeInfo.h:75
Definition seadRuntimeTypeInfo.h:9
Definition seadTaskBase.h:53
TaskBase * src_task
Definition seadTaskBase.h:64
void(* SingletonFunc)(TaskBase *)
Definition seadTaskBase.h:54
SingletonFunc instance_cb
Definition seadTaskBase.h:69
FaderTaskBase * fader
Definition seadTaskBase.h:63
Tag tag
Definition seadTaskBase.h:68
TaskBase ** created_task
Definition seadTaskBase.h:65
DelegateEvent< TaskBase * >::Slot * create_callback
Definition seadTaskBase.h:66
TaskBase * parent
Definition seadTaskBase.h:61
TaskClassID factory
Definition seadTaskBase.h:59
CreateArg(const TaskClassID &class_id)
TaskParameter * parameter
Definition seadTaskBase.h:62
HeapPolicies heap_policies
Definition seadTaskBase.h:60
TaskUserID user_id
Definition seadTaskBase.h:67
Definition seadTaskBase.h:76
MgrTaskArg(const TaskClassID &class_id)
Definition seadTaskBase.h:82
SystemMgrTaskArg(const TaskClassID &class_id)
Definition seadTaskID.h:14