mirror of
https://github.com/zeldaret/botw
synced 2026-08-04 01:03:07 -04:00
Implement most of aocManager
And fix FileDevicePrefix's userdata param type
This commit is contained in:
@@ -421,15 +421,14 @@ void ResourceMgrTask::unloadSeadResource(sead::Resource* resource) {
|
||||
stubbedLogFunction();
|
||||
}
|
||||
|
||||
u32 ResourceMgrTask::getResourceSize(const sead::SafeString& name,
|
||||
sead::FileDevice* file_device) const {
|
||||
if (!file_device)
|
||||
u32 ResourceMgrTask::getResourceSize(const sead::SafeString& name, void* userdata) const {
|
||||
if (!userdata)
|
||||
return mResourceInfoContainer.getResourceSize(name);
|
||||
|
||||
mFileDevicePrefixesLock.readLock();
|
||||
|
||||
for (const auto& entry : mFileDevicePrefixes) {
|
||||
if (entry.getFileDevice() == file_device) {
|
||||
if (entry.getUserData() == userdata) {
|
||||
const u32 size = mResourceInfoContainer.getResourceSize(entry.getPrefix(), name);
|
||||
if (size == 0 && entry.getField28())
|
||||
break;
|
||||
|
||||
@@ -57,8 +57,8 @@ class FileDevicePrefix {
|
||||
public:
|
||||
FileDevicePrefix() = default;
|
||||
|
||||
sead::FileDevice* getFileDevice() const { return mFileDevice; }
|
||||
void setFileDevice(sead::FileDevice* device) { mFileDevice = device; }
|
||||
void* getUserData() const { return mUserData; }
|
||||
void setUserData(void* userdata) { mUserData = userdata; }
|
||||
|
||||
const sead::SafeString& getPrefix() const { return mPrefix; }
|
||||
void setPrefix(const sead::SafeString& prefix) { mPrefix = prefix; }
|
||||
@@ -66,13 +66,15 @@ public:
|
||||
bool getField28() const { return _28; }
|
||||
void setField28(bool value) { _28 = value; }
|
||||
|
||||
void registerPrefix(const sead::SafeString& prefix, void* userdata, bool set28);
|
||||
void registerPrefix(const char* prefix, void* userdata, bool set28);
|
||||
void deregister();
|
||||
|
||||
static constexpr size_t getListNodeOffset() { return offsetof(FileDevicePrefix, mListNode); }
|
||||
|
||||
private:
|
||||
sead::ListNode mListNode;
|
||||
sead::FileDevice* mFileDevice = nullptr;
|
||||
void* mUserData = nullptr;
|
||||
sead::SafeString mPrefix;
|
||||
bool _28 = false;
|
||||
};
|
||||
@@ -173,7 +175,7 @@ public:
|
||||
|
||||
void unloadSeadResource(sead::Resource* resource);
|
||||
|
||||
u32 getResourceSize(const sead::SafeString& name, sead::FileDevice* file_device) const;
|
||||
u32 getResourceSize(const sead::SafeString& name, void* userdata) const;
|
||||
|
||||
void registerFileDevicePrefix(FileDevicePrefix& prefix);
|
||||
void deregisterFileDevicePrefix(FileDevicePrefix& prefix);
|
||||
@@ -406,6 +408,19 @@ KSYS_CHECK_SIZE_NX150(sead::TaskBase, 0xd0);
|
||||
KSYS_CHECK_SIZE_NX150(sead::MethodTreeNode, 0x98);
|
||||
KSYS_CHECK_SIZE_NX150(ResourceMgrTask, 0x9c0eb8);
|
||||
|
||||
inline void FileDevicePrefix::registerPrefix(const sead::SafeString& prefix, void* userdata,
|
||||
bool set28) {
|
||||
setUserData(userdata);
|
||||
setPrefix(prefix);
|
||||
if (set28)
|
||||
setField28(true);
|
||||
ResourceMgrTask::instance()->registerFileDevicePrefix(*this);
|
||||
}
|
||||
|
||||
inline void FileDevicePrefix::registerPrefix(const char* prefix, void* userdata, bool set28) {
|
||||
registerPrefix(sead::SafeString(prefix), userdata, set28);
|
||||
}
|
||||
|
||||
inline void FileDevicePrefix::deregister() {
|
||||
if (mListNode.isLinked())
|
||||
ResourceMgrTask::instance()->deregisterFileDevicePrefix(*this);
|
||||
|
||||
Reference in New Issue
Block a user