From d072fcf7da93fcd03a10a169ac3e10476191916e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Fri, 12 Mar 2021 17:19:34 +0100 Subject: ksys/act: Start adding BaseProcCreateTask --- src/KingSystem/ActorSystem/actBaseProcCreateTask.h | 95 ++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/KingSystem/ActorSystem/actBaseProcCreateTask.h (limited to 'src/KingSystem/ActorSystem/actBaseProcCreateTask.h') 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 +#include +#include +#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* 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* mCreateDelegate{}; + BaseProcUnit* mUnit{}; + map::Object* mMapObject{}; + util::TaskDelegateT mTaskDelegate{ + this, &BaseProcCreateTask::onTaskDelegateInvoked}; + BaseProcLink mLink; + f32 mDistanceToLoadSphere = -1.0; + InstParamPack::Buffer mParams; +}; +KSYS_CHECK_SIZE_NX150(BaseProcCreateTask, 0x298); + +} // namespace ksys::act -- cgit v1.2.3