summaryrefslogtreecommitdiff
path: root/src/KingSystem/ActorSystem/actBaseProcCreateTask.h
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-03-12 17:19:34 +0100
committerLéo Lam <leo@leolam.fr>2021-03-12 18:53:02 +0100
commitd072fcf7da93fcd03a10a169ac3e10476191916e (patch)
treec51e8152885bfbfedf60a020483fe612952015e0 /src/KingSystem/ActorSystem/actBaseProcCreateTask.h
parentea79008db6ce92fb3a06ee60410ef92e62a3b96a (diff)
ksys/act: Start adding BaseProcCreateTask
Diffstat (limited to 'src/KingSystem/ActorSystem/actBaseProcCreateTask.h')
-rw-r--r--src/KingSystem/ActorSystem/actBaseProcCreateTask.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/KingSystem/ActorSystem/actBaseProcCreateTask.h b/src/KingSystem/ActorSystem/actBaseProcCreateTask.h
new file mode 100644
index 00000000..0d1c28cb
--- /dev/null
+++ b/src/KingSystem/ActorSystem/actBaseProcCreateTask.h
@@ -0,0 +1,95 @@
+#pragma once
+
+#include <basis/seadTypes.h>
+#include <prim/seadDelegate.h>
+#include <prim/seadSafeString.h>
+#include "KingSystem/ActorSystem/actBaseProcLink.h"
+#include "KingSystem/ActorSystem/actInstParamPack.h"
+#include "KingSystem/Map/mapMubinIter.h"
+#include "KingSystem/Utils/Thread/ManagedTask.h"
+#include "KingSystem/Utils/Thread/Task.h"
+#include "KingSystem/Utils/Thread/TaskData.h"
+#include "KingSystem/Utils/Types.h"
+
+namespace ksys::map {
+class Object;
+}
+
+namespace ksys::act {
+
+class BaseProc;
+class BaseProcHandle;
+class BaseProcUnit;
+
+struct BaseProcCreateArg {
+ sead::Heap* heap;
+ sead::Heap* heap2;
+ sead::SafeString proc_class;
+ sead::SafeString proc_name;
+ map::MubinIter* mubin_iter;
+ map::Object* map_object;
+ InstParamPack::Buffer* params;
+ BaseProcLink proc_link;
+};
+KSYS_CHECK_SIZE_NX150(BaseProcCreateArg, 0x58);
+
+class BaseProcCreateTaskData : public util::TaskData {
+ SEAD_RTTI_OVERRIDE(BaseProcCreateTaskData, util::TaskData)
+
+public:
+ BaseProcCreateTaskData() = default;
+ virtual ~BaseProcCreateTaskData() = default;
+
+ sead::Heap* mHeap{};
+ sead::SafeString mProcClass{};
+ sead::SafeString mProcName{};
+ sead::IDelegate1R<BaseProcCreateArg&, BaseProc*>* mCreateDelegate{};
+ BaseProcHandle* mProcHandle{};
+ map::MubinIter* mMubinIter{};
+ map::Object* mMapObject{};
+ InstParamPack::Buffer* mParams{};
+ BaseProc* mOtherProc{};
+ bool _60{};
+};
+KSYS_CHECK_SIZE_NX150(BaseProcCreateTaskData, 0x68);
+
+class BaseProcCreateTaskRequest : public util::TaskRequest {
+ SEAD_RTTI_OVERRIDE(BaseProcCreateTaskRequest, util::TaskRequest)
+
+public:
+ BaseProcCreateTaskRequest() = default;
+
+ BaseProcCreateTaskData* mData{};
+};
+
+class BaseProcCreateTask : public util::ManagedTask {
+ SEAD_RTTI_OVERRIDE(BaseProcCreateTask, util::ManagedTask)
+
+public:
+ explicit BaseProcCreateTask(sead::Heap* heap);
+
+ void onBaseProcCreationFailed(BaseProc* proc, bool set_flag_5);
+
+protected:
+ void prepareImpl_(util::TaskRequest* req) override;
+
+private:
+ bool onTaskDelegateInvoked(void* arg);
+ void doPrepare(const BaseProcCreateTaskData* data);
+
+ sead::Heap* mHeap;
+ sead::FixedSafeString<64> mClass;
+ sead::FixedSafeString<64> mName;
+ map::MubinIter mMubinIter;
+ sead::IDelegate1R<BaseProcCreateArg&, BaseProc*>* mCreateDelegate{};
+ BaseProcUnit* mUnit{};
+ map::Object* mMapObject{};
+ util::TaskDelegateT<BaseProcCreateTask> mTaskDelegate{
+ this, &BaseProcCreateTask::onTaskDelegateInvoked};
+ BaseProcLink mLink;
+ f32 mDistanceToLoadSphere = -1.0;
+ InstParamPack::Buffer mParams;
+};
+KSYS_CHECK_SIZE_NX150(BaseProcCreateTask, 0x298);
+
+} // namespace ksys::act