mirror of https://github.com/zeldaret/botw.git
ksys/res: Add ModelResourceDivide
This commit is contained in:
parent
c72a150a9b
commit
cadf1688ed
|
@ -73684,13 +73684,13 @@
|
|||
0x0000007100d3c7fc,sub_7100D3C7FC,56,
|
||||
0x0000007100d3c834,sub_7100D3C834,64,
|
||||
0x0000007100d3c874,sub_7100D3C874,52,
|
||||
0x0000007100d3c8a8,sub_7100D3C8A8,100,
|
||||
0x0000007100d3c90c,sub_7100D3C90C,108,
|
||||
0x0000007100d3c978,ModelResourceDivide::createInstance,156,
|
||||
0x0000007100d3ca14,sub_7100D3CA14,60,
|
||||
0x0000007100d3ca50,sub_7100D3CA50,68,
|
||||
0x0000007100d3ca94,ModelResourceDivide::init,296,
|
||||
0x0000007100d3cbbc,ModelResourceDivide::__auto0,440,
|
||||
0x0000007100d3c8a8,sub_7100D3C8A8,100,_ZN4ksys3res19ModelResourceDivide18SingletonDisposer_D1Ev
|
||||
0x0000007100d3c90c,sub_7100D3C90C,108,_ZN4ksys3res19ModelResourceDivide18SingletonDisposer_D0Ev
|
||||
0x0000007100d3c978,ModelResourceDivide::createInstance,156,_ZN4ksys3res19ModelResourceDivide14createInstanceEPN4sead4HeapE
|
||||
0x0000007100d3ca14,sub_7100D3CA14,60,_ZN4ksys3res19ModelResourceDivideD1Ev
|
||||
0x0000007100d3ca50,sub_7100D3CA50,68,_ZN4ksys3res19ModelResourceDivideD0Ev
|
||||
0x0000007100d3ca94,ModelResourceDivide::init,296,_ZN4ksys3res19ModelResourceDivide4initEPN4sead4HeapE
|
||||
0x0000007100d3cbbc,ModelResourceDivide::getModelResource,440,_ZNK4ksys3res19ModelResourceDivide16getModelResourceERKN4sead14SafeStringBaseIcEES6_
|
||||
0x0000007100d3cd74,sub_7100D3CD74,16,
|
||||
0x0000007100d3cd84,sub_7100D3CD84,172,
|
||||
0x0000007100d3ce30,sub_7100D3CE30,168,
|
||||
|
|
Can't render this file because it is too large.
|
|
@ -14,6 +14,7 @@ class ActorDebug {
|
|||
public:
|
||||
enum class Flag {
|
||||
_10000000 = 0x10000000,
|
||||
_20000000 = 0x20000000,
|
||||
};
|
||||
|
||||
struct HashUnused {
|
||||
|
|
|
@ -1,7 +1,60 @@
|
|||
#include "KingSystem/Resource/resModelResourceDivide.h"
|
||||
#include "KingSystem/ActorSystem/actDebug.h"
|
||||
#include "KingSystem/Resource/resLoadRequest.h"
|
||||
#include "KingSystem/Resource/resResourceMgrTask.h"
|
||||
#include "KingSystem/Utils/Byaml/Byaml.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
SEAD_SINGLETON_DISPOSER_IMPL(ModelResourceDivide)
|
||||
|
||||
ModelResourceDivide::~ModelResourceDivide() {
|
||||
if (mIter)
|
||||
delete mIter;
|
||||
}
|
||||
|
||||
void ModelResourceDivide::init(sead::Heap* heap) {
|
||||
auto load_request = LoadRequest();
|
||||
load_request.mRequester = "ModelResourceDivide";
|
||||
load_request.mLoadCompressed = true;
|
||||
mHandle.load("System/Resource/ModelDivideTable.byml", &load_request);
|
||||
sead::DirectResource* table = mHandle.getResource();
|
||||
auto* cast_table = sead::DynamicCast<sead::DirectResource>(table);
|
||||
mIter = new (heap) al::ByamlIter(cast_table->getRawData());
|
||||
}
|
||||
|
||||
const char* ModelResourceDivide::getModelResource(const sead::SafeString& model_name,
|
||||
const sead::SafeString& fmdb_name) const {
|
||||
auto* debug = act::ActorDebug::instance();
|
||||
if (debug && !debug->hasFlag(act::ActorDebug::Flag::_20000000))
|
||||
return nullptr;
|
||||
|
||||
sead::FormatFixedSafeString<128> model_path("Model/%s.bfres", model_name.cstr());
|
||||
if (ResourceMgrTask::instance()->isHostPath(model_path))
|
||||
return nullptr;
|
||||
|
||||
al::ByamlIter model_iter{};
|
||||
if (!mIter->tryGetIterByKey(&model_iter, model_name.cstr()))
|
||||
return nullptr;
|
||||
|
||||
sead::FormatFixedSafeString<128> fmdb_file_name("%s.fmdb", fmdb_name.cstr());
|
||||
|
||||
for (int i = 0; i < model_iter.getSize(); ++i) {
|
||||
al::ByamlIter index_iter;
|
||||
if (!model_iter.tryGetIterByIndex(&index_iter, i))
|
||||
break;
|
||||
al::ByamlIter models_iter;
|
||||
if (!index_iter.tryGetIterByKey(&models_iter, "models"))
|
||||
break;
|
||||
al::ByamlIter fmdb_iter;
|
||||
const char* value;
|
||||
if (models_iter.tryGetIterByKey(&fmdb_iter, fmdb_file_name.cstr())) {
|
||||
if (index_iter.tryGetStringByKey(&value, "model_resource"))
|
||||
return value;
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
} // namespace ksys::res
|
||||
|
|
Loading…
Reference in New Issue