mirror of https://github.com/zeldaret/botw.git
ksys: Finish implementing ParamIO
This commit is contained in:
parent
201d2ff06f
commit
3699e85f8e
|
@ -90944,10 +90944,10 @@
|
|||
0x00000071011675d0,sub_71011675D0,240,_ZThn664_N4ksys3res9ActorLinkD1Ev
|
||||
0x00000071011676c0,sub_71011676C0,228,_ZThn664_N4ksys3res9ActorLinkD0Ev
|
||||
0x00000071011677a4,sub_71011677A4,372,_ZN4ksys3res9ActorLink33checkDerivedRuntimeTypeInfoStaticEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x0000007101167918,sub_7101167918,548,
|
||||
0x0000007101167b3c,sub_7101167B3C,316,
|
||||
0x0000007101167c78,sub_7101167C78,328,
|
||||
0x0000007101167dc0,sub_7101167DC0,76,
|
||||
0x0000007101167918,sub_7101167918,548,_ZN4ksys7ParamIO14applyParameterEPcS1_PN3agl3utl13ParameterBaseERKN4sead14SafeStringBaseIcEEPb
|
||||
0x0000007101167b3c,sub_7101167B3C,316,_ZN4ksys7ParamIO17applyParameterObjEPcS1_PN3agl3utl13IParameterObjERKN4sead14SafeStringBaseIcEEPb
|
||||
0x0000007101167c78,sub_7101167C78,328,_ZN4ksys7ParamIO18applyParameterListEPcS1_PN3agl3utl14IParameterListERKN4sead14SafeStringBaseIcEEPb
|
||||
0x0000007101167dc0,sub_7101167DC0,76,_ZN4ksys7ParamIO19applyResourceUpdateEPcS1_
|
||||
0x0000007101167e0c,sub_7101167E0C,124,_ZNK4ksys7ParamIO9getStringERKN3agl3utl15ResParameterObjEPKcS7_Pv
|
||||
0x0000007101167e88,sub_7101167E88,140,_ZNK4ksys7ParamIO7getVec3ERKN3agl3utl15ResParameterObjEPKcN4sead7Vector3IfEEPv?
|
||||
0x0000007101167f14,sub_7101167F14,152,_ZN4ksys3act13ActorParamMgr18SingletonDisposer_D2Ev
|
||||
|
|
Can't render this file because it is too large.
|
2
lib/agl
2
lib/agl
|
@ -1 +1 @@
|
|||
Subproject commit 1ee52998fa0ca6d4c2ada8bef6dfd70aa2e63cbe
|
||||
Subproject commit b1a372a1300566e221f2c739bc4348ed1b7c1f4b
|
|
@ -1,8 +1,65 @@
|
|||
#include "KingSystem/Utils/ParamIO.h"
|
||||
#include <agl/Utils/aglParameter.h>
|
||||
#include "KingSystem/ActorSystem/actActorParamMgr.h"
|
||||
|
||||
namespace ksys {
|
||||
|
||||
void ParamIO::applyParameter(char* data, char* data1, agl::utl::ParameterBase* param,
|
||||
const sead::SafeString& parent_name, bool* applied) {
|
||||
sead::FixedSafeString<128> name;
|
||||
name.format("%s/%s", parent_name.cstr(), param->getName().cstr());
|
||||
if (name != data)
|
||||
return;
|
||||
|
||||
if (param->getParameterType() == agl::utl::ParameterBase::ParameterType::StringRef) {
|
||||
auto* heap = act::ActorParamMgr::instance()->getDebugHeap();
|
||||
const auto len = sead::SafeString(data1).calcLength();
|
||||
auto* copy = new (heap) char[len + 1];
|
||||
std::memcpy(copy, data1, len);
|
||||
data1 = copy;
|
||||
data1[len] = '\0';
|
||||
}
|
||||
|
||||
param->applyString(data1, false);
|
||||
*applied = true;
|
||||
}
|
||||
|
||||
void ParamIO::applyParameterObj(char* data, char* data1, agl::utl::IParameterObj* obj,
|
||||
const sead::SafeString& parent_name, bool* applied) {
|
||||
sead::FixedSafeString<128> name;
|
||||
name.format("%s/%s", parent_name.cstr(), obj->getName().cstr());
|
||||
|
||||
if (obj->getNext())
|
||||
applyParameterObj(data, data1, obj->getNext(), parent_name, applied);
|
||||
|
||||
for (auto param = obj->getParamListHead(); param; param = param->getNext()) {
|
||||
applyParameter(data, data1, param, name, applied);
|
||||
if (param == obj->getParamListTail())
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ParamIO::applyParameterList(char* data, char* data1, agl::utl::IParameterList* list,
|
||||
const sead::SafeString& parent_name, bool* applied) {
|
||||
sead::FixedSafeString<128> name;
|
||||
name.format("%s/%s", parent_name.cstr(), list->getName().cstr());
|
||||
|
||||
if (auto* obj = list->getChildObjHead())
|
||||
applyParameterObj(data, data1, obj, name, applied);
|
||||
|
||||
if (auto* next = list->getNext())
|
||||
applyParameterList(data, data1, next, parent_name, applied);
|
||||
|
||||
if (auto* child = list->getChildListHead())
|
||||
applyParameterList(data, data1, child, name, applied);
|
||||
}
|
||||
|
||||
bool ParamIO::applyResourceUpdate(char* data, char* data1) {
|
||||
bool applied = false;
|
||||
applyParameterList(data, data1, this, "", &applied);
|
||||
return applied;
|
||||
}
|
||||
|
||||
const char* ParamIO::getString(const agl::utl::ResParameterObj& obj, const char* key,
|
||||
const char* default_value, void*) const {
|
||||
const auto param = agl::utl::getResParameter(obj, key);
|
||||
|
|
|
@ -14,7 +14,7 @@ public:
|
|||
|
||||
virtual bool ParamIO_m0() { return false; }
|
||||
|
||||
bool applyResourceUpdate(const char* data, const char* data1);
|
||||
bool applyResourceUpdate(char* data, char* data1);
|
||||
|
||||
const char* getString(const agl::utl::ResParameterObj& obj, const char* key,
|
||||
const char* default_value, void* = nullptr) const;
|
||||
|
@ -27,6 +27,13 @@ public:
|
|||
void setIndex(u32 idx) { mIdx = idx; }
|
||||
|
||||
protected:
|
||||
void applyParameter(char* data, char* data1, agl::utl::ParameterBase* param,
|
||||
const sead::SafeString& parent_name, bool* applied);
|
||||
void applyParameterObj(char* data, char* data1, agl::utl::IParameterObj* obj,
|
||||
const sead::SafeString& parent_name, bool* applied);
|
||||
void applyParameterList(char* data, char* data1, agl::utl::IParameterList* list,
|
||||
const sead::SafeString& parent_name, bool* applied);
|
||||
|
||||
u32 mIdx = 0x1c;
|
||||
sead::FixedSafeString<128> mPath;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue