mirror of
https://github.com/zeldaret/botw
synced 2026-07-06 05:04:38 -04:00
ksys/res: Add ControlTask, TaskRequest
This commit is contained in:
@@ -94,9 +94,15 @@ target_sources(uking PRIVATE
|
||||
resHandle.h
|
||||
resLoadRequest.cpp
|
||||
resLoadRequest.h
|
||||
resControlTask.cpp
|
||||
resControlTask.h
|
||||
resOffsetReadFileDevice.cpp
|
||||
resOffsetReadFileDevice.h
|
||||
resResourceMgrTask.cpp
|
||||
resResourceMgrTask.h
|
||||
resSystem.h
|
||||
resTaskRequest.cpp
|
||||
resTaskRequest.h
|
||||
resUnit.cpp
|
||||
resUnit.h
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#include "KingSystem/Resource/resControlTask.h"
|
||||
#include "KingSystem/Resource/resSystem.h"
|
||||
#include "KingSystem/Resource/resTaskRequest.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
ControlTask::ControlTask(sead::Heap* heap) : util::ManagedTask(heap) {}
|
||||
|
||||
void ControlTask::onRun_() {}
|
||||
|
||||
void ControlTask::prepareImpl_(util::TaskRequest* req_) {
|
||||
auto* req = static_cast<TaskRequest*>(req_);
|
||||
|
||||
mData.mHasResLoadReq = req->mHasResLoadReq;
|
||||
mData.mPackResUnit = req->mPackResUnit;
|
||||
mData.mResHandle = req->mResHandle;
|
||||
mData.mResPath = req->mResPath;
|
||||
mData.mResLoadReq = req->mResLoadReq;
|
||||
mData.mResLoadReq.mPath = mData.mResPath;
|
||||
|
||||
if (getUserData() == nullptr)
|
||||
setUserData(&mData);
|
||||
}
|
||||
|
||||
void ControlTask::preRemoveImpl_() {
|
||||
if (returnFalse())
|
||||
stubbedLogFunction();
|
||||
}
|
||||
|
||||
} // namespace ksys::res
|
||||
@@ -0,0 +1,41 @@
|
||||
#pragma once
|
||||
|
||||
#include <prim/seadSafeString.h>
|
||||
#include "KingSystem/Resource/resLoadRequest.h"
|
||||
#include "KingSystem/Utils/Thread/ManagedTask.h"
|
||||
#include "KingSystem/Utils/Thread/TaskData.h"
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
class Handle;
|
||||
class ResourceUnit;
|
||||
|
||||
class ControlTaskData : public util::TaskData {
|
||||
SEAD_RTTI_OVERRIDE(ControlTaskData, util::TaskData)
|
||||
public:
|
||||
virtual ~ControlTaskData() = default;
|
||||
|
||||
bool mHasResLoadReq = false;
|
||||
ResourceUnit* mPackResUnit = nullptr;
|
||||
Handle* mResHandle = nullptr;
|
||||
sead::FixedSafeString<128> mResPath;
|
||||
LoadRequest mResLoadReq;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(ControlTaskData, 0x138);
|
||||
|
||||
class ControlTask : public util::ManagedTask {
|
||||
SEAD_RTTI_OVERRIDE(ControlTask, util::ManagedTask)
|
||||
public:
|
||||
explicit ControlTask(sead::Heap* heap);
|
||||
|
||||
private:
|
||||
void onRun_() override;
|
||||
void prepareImpl_(util::TaskRequest* req) override;
|
||||
void preRemoveImpl_() override;
|
||||
|
||||
ControlTaskData mData;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(ControlTask, 0x1f8);
|
||||
|
||||
} // namespace ksys::res
|
||||
@@ -1 +1,21 @@
|
||||
#include "KingSystem/Resource/resResourceMgrTask.h"
|
||||
#include <thread/seadThreadUtil.h>
|
||||
#include "KingSystem/Utils/Thread/GameTaskThread.h"
|
||||
#include "KingSystem/Utils/Thread/TaskThread.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
util::TaskThread* ResourceMgrTask::makeResourceLoadingThread(sead::Heap* heap,
|
||||
bool use_game_task_thread) {
|
||||
if (use_game_task_thread) {
|
||||
return new (heap) util::GameTaskThread(
|
||||
"Resource Loading", heap, sead::ThreadUtil::ConvertPrioritySeadToPlatform(19),
|
||||
sead::MessageQueue::BlockType::Blocking, 0x7fffffff, 0xfa000, 32);
|
||||
}
|
||||
|
||||
return new (heap) util::TaskThread(
|
||||
"Resource Loading", heap, sead::ThreadUtil::ConvertPrioritySeadToPlatform(19),
|
||||
sead::MessageQueue::BlockType::Blocking, 0x7fffffff, 0xa000, 32);
|
||||
}
|
||||
|
||||
} // namespace ksys::res
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
namespace sead {
|
||||
class Heap;
|
||||
}
|
||||
|
||||
namespace ksys {
|
||||
class OverlayArena;
|
||||
|
||||
namespace util {
|
||||
class TaskThread;
|
||||
}
|
||||
} // namespace ksys
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
@@ -14,6 +22,8 @@ public:
|
||||
void insertOverlayArena(OverlayArena* arena);
|
||||
OverlayArena* getSomeArena() const;
|
||||
|
||||
util::TaskThread* makeResourceLoadingThread(sead::Heap* heap, bool use_game_task_thread);
|
||||
|
||||
private:
|
||||
static ResourceMgrTask* sInstance;
|
||||
};
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#include "resTaskRequest.h"
|
||||
@@ -0,0 +1,25 @@
|
||||
#pragma once
|
||||
|
||||
#include "KingSystem/Resource/resLoadRequest.h"
|
||||
#include "KingSystem/Utils/Thread/Task.h"
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
class Handle;
|
||||
class ResourceUnit;
|
||||
|
||||
class TaskRequest : public util::TaskRequest {
|
||||
SEAD_RTTI_OVERRIDE(TaskRequest, util::TaskRequest)
|
||||
public:
|
||||
TaskRequest() = default;
|
||||
|
||||
bool mHasResLoadReq = false;
|
||||
ResourceUnit* mPackResUnit = nullptr;
|
||||
Handle* mResHandle = nullptr;
|
||||
sead::FixedSafeString<128> mResPath;
|
||||
LoadRequest mResLoadReq;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(TaskRequest, 0x180);
|
||||
|
||||
} // namespace ksys::res
|
||||
@@ -9,6 +9,7 @@ target_sources(uking PRIVATE
|
||||
Thread/ManagedTaskHandle.h
|
||||
Thread/Task.cpp
|
||||
Thread/Task.h
|
||||
Thread/TaskData.h
|
||||
Thread/TaskMgr.cpp
|
||||
Thread/TaskMgr.h
|
||||
Thread/TaskQueueBase.cpp
|
||||
|
||||
@@ -73,6 +73,8 @@ KSYS_CHECK_SIZE_NX150(TaskDelegateSetter, 0x10);
|
||||
class TaskRequest {
|
||||
SEAD_RTTI_BASE(TaskRequest)
|
||||
public:
|
||||
// TODO: initialize the members
|
||||
TaskRequest() = default;
|
||||
virtual ~TaskRequest() = default;
|
||||
|
||||
bool mHasHandle;
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
#include <prim/seadRuntimeTypeInfo.h>
|
||||
|
||||
namespace ksys::util {
|
||||
|
||||
class TaskData {
|
||||
SEAD_RTTI_BASE(TaskData)
|
||||
};
|
||||
|
||||
} // namespace ksys::util
|
||||
Reference in New Issue
Block a user