mirror of
https://github.com/zeldaret/botw
synced 2026-06-15 14:21:24 -04:00
53 lines
1.2 KiB
C++
53 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <container/seadBuffer.h>
|
|
#include <prim/seadDelegate.h>
|
|
#include "KingSystem/Utils/Types.h"
|
|
|
|
namespace ksys::util {
|
|
class TaskMgr;
|
|
class TaskQueue;
|
|
} // namespace ksys::util
|
|
|
|
namespace ksys::act {
|
|
|
|
class ActorParam;
|
|
class BaseProc;
|
|
|
|
class BaseProcDeleter {
|
|
public:
|
|
struct InitArg {
|
|
sead::Heap* heap;
|
|
util::TaskQueue* task_queue;
|
|
int task_queue_size;
|
|
};
|
|
|
|
BaseProcDeleter();
|
|
virtual ~BaseProcDeleter();
|
|
|
|
void init(const InitArg& arg);
|
|
bool requestPreDelete(BaseProc* proc);
|
|
void requestUnloadActorParam(ActorParam* param);
|
|
void unblockTasks();
|
|
|
|
private:
|
|
enum class TaskLane : u8 {
|
|
UnloadActorParam = 3,
|
|
PreDelete = 4,
|
|
};
|
|
|
|
bool doPreDelete(void* proc);
|
|
bool doUnloadParam(void* actor_param);
|
|
|
|
util::TaskMgr* mTaskMgr{};
|
|
util::TaskQueue* mTaskQueue{};
|
|
sead::Buffer<void*> mBuffer;
|
|
sead::Delegate1R<BaseProcDeleter, void*, bool> mPreDeleteDelegate{
|
|
this, &BaseProcDeleter::doPreDelete};
|
|
sead::Delegate1R<BaseProcDeleter, void*, bool> mUnloadActorParamDelegate{
|
|
this, &BaseProcDeleter::doUnloadParam};
|
|
};
|
|
KSYS_CHECK_SIZE_NX150(BaseProcDeleter, 0x68);
|
|
|
|
} // namespace ksys::act
|