diff options
| author | Léo Lam <leo@leolam.fr> | 2021-03-12 17:19:34 +0100 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2021-03-12 18:53:02 +0100 |
| commit | d072fcf7da93fcd03a10a169ac3e10476191916e (patch) | |
| tree | c51e8152885bfbfedf60a020483fe612952015e0 /src/KingSystem/ActorSystem/actBaseProcCreateTask.h | |
| parent | ea79008db6ce92fb3a06ee60410ef92e62a3b96a (diff) | |
ksys/act: Start adding BaseProcCreateTask
Diffstat (limited to 'src/KingSystem/ActorSystem/actBaseProcCreateTask.h')
| -rw-r--r-- | src/KingSystem/ActorSystem/actBaseProcCreateTask.h | 95 |
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 |
