mirror of https://github.com/zeldaret/botw.git
ksys: Add ASSetting
This commit is contained in:
parent
8c8d9c0e70
commit
737a9b522b
|
|
@ -96592,30 +96592,30 @@
|
|||
0x00000071012f1868,sub_71012F1868,756,
|
||||
0x00000071012f1b5c,sub_71012F1B5C,756,
|
||||
0x00000071012f1e50,sub_71012F1E50,168,
|
||||
0x00000071012f1ef8,sub_71012F1EF8,896,
|
||||
0x00000071012f1ef8,sub_71012F1EF8,896,_ZN4ksys3res9ASSetting10BoneParams5parseERKNS0_13ASParamParser9ParseArgsE!
|
||||
0x00000071012f2278,sub_71012F2278,300,
|
||||
0x00000071012f23a4,sub_71012F23A4,132,
|
||||
0x00000071012f2428,sub_71012F2428,508,
|
||||
0x00000071012f2624,sub_71012F2624,636,
|
||||
0x00000071012f28a0,sub_71012F28A0,428,
|
||||
0x00000071012f28a0,sub_71012F28A0,428,_ZNK4ksys3act9ASSetting13getBoneParamsERKN4sead14SafeStringBaseIcEE?
|
||||
0x00000071012f2a4c,sub_71012F2A4C,80,
|
||||
0x00000071012f2a9c,sub_71012F2A9C,252,
|
||||
0x00000071012f2b98,sub_71012F2B98,360,
|
||||
0x00000071012f2d00,sub_71012F2D00,8,
|
||||
0x00000071012f2d08,sub_71012F2D08,8,
|
||||
0x00000071012f2d10,sub_71012F2D10,36,
|
||||
0x00000071012f2d34,sub_71012F2D34,40,
|
||||
0x00000071012f2d5c,sub_71012F2D5C,40,
|
||||
0x00000071012f2d84,nullsub_4831,4,
|
||||
0x00000071012f2d88,nullsub_4832,4,
|
||||
0x00000071012f2d8c,sub_71012F2D8C,1016,
|
||||
0x00000071012f3184,sub_71012F3184,376,
|
||||
0x00000071012f32fc,sub_71012F32FC,8,
|
||||
0x00000071012f3304,sub_71012F3304,100,
|
||||
0x00000071012f3368,sub_71012F3368,108,
|
||||
0x00000071012f33d4,ASSetting::createInstance,152,
|
||||
0x00000071012f346c,sub_71012F346C,88,
|
||||
0x00000071012f34c4,ASSetting::init,132,
|
||||
0x00000071012f2a9c,sub_71012F2A9C,252,_ZN4ksys3res9ASSettingC1Ev
|
||||
0x00000071012f2b98,sub_71012F2B98,360,_ZN4ksys3res9ASSettingD1Ev
|
||||
0x00000071012f2d00,sub_71012F2D00,8,_ZThn464_N4ksys3res9ASSettingD1Ev
|
||||
0x00000071012f2d08,sub_71012F2D08,8,_ZThn496_N4ksys3res9ASSettingD1Ev
|
||||
0x00000071012f2d10,sub_71012F2D10,36,_ZN4ksys3res9ASSettingD0Ev
|
||||
0x00000071012f2d34,sub_71012F2D34,40,_ZThn464_N4ksys3res9ASSettingD0Ev
|
||||
0x00000071012f2d5c,sub_71012F2D5C,40,_ZThn496_N4ksys3res9ASSettingD0Ev
|
||||
0x00000071012f2d84,nullsub_4831,4,_ZN4ksys3res9ASSetting9doCreate_EPhjPN4sead4HeapE
|
||||
0x00000071012f2d88,nullsub_4832,4,_ZThn464_N4ksys3res9ASSetting9doCreate_EPhjPN4sead4HeapE
|
||||
0x00000071012f2d8c,sub_71012F2D8C,1016,_ZN4ksys3res9ASSetting6parse_EPhmPN4sead4HeapE
|
||||
0x00000071012f3184,sub_71012F3184,376,_ZN4ksys3res17allocBlenderBonesERN4sead6BufferINS0_9ASSetting11BlenderBoneEEEiPNS1_4HeapEi
|
||||
0x00000071012f32fc,sub_71012F32FC,8,_ZThn464_N4ksys3res9ASSetting6parse_EPhmPN4sead4HeapE
|
||||
0x00000071012f3304,sub_71012F3304,100,_ZN4ksys3act9ASSetting18SingletonDisposer_D2Ev
|
||||
0x00000071012f3368,sub_71012F3368,108,_ZN4ksys3act9ASSetting18SingletonDisposer_D0Ev
|
||||
0x00000071012f33d4,ASSetting::createInstance,152,_ZN4ksys3act9ASSetting14createInstanceEPN4sead4HeapE
|
||||
0x00000071012f346c,sub_71012F346C,88,_ZN4ksys3act9ASSetting14deleteInstanceEv
|
||||
0x00000071012f34c4,ASSetting::init,132,_ZN4ksys3act9ASSetting4initERKN4sead14SafeStringBaseIcEE
|
||||
0x00000071012f3548,sub_71012F3548,204,
|
||||
0x00000071012f3614,sub_71012F3614,92,
|
||||
0x00000071012f3670,sub_71012F3670,104,
|
||||
|
|
@ -96646,20 +96646,20 @@
|
|||
0x00000071012f45e0,sub_71012F45E0,188,
|
||||
0x00000071012f469c,sub_71012F469C,204,
|
||||
0x00000071012f4768,sub_71012F4768,92,
|
||||
0x00000071012f47c4,sub_71012F47C4,36,
|
||||
0x00000071012f47c4,sub_71012F47C4,36,_ZN4ksys3res13ASParamParserD2Ev
|
||||
0x00000071012f47e8,j__ZdlPv_1320,4,
|
||||
0x00000071012f47ec,sub_71012F47EC,204,
|
||||
0x00000071012f48b8,sub_71012F48B8,92,
|
||||
0x00000071012f4914,sub_71012F4914,164,
|
||||
0x00000071012f49b8,sub_71012F49B8,128,
|
||||
0x00000071012f4a38,sub_71012F4A38,8,
|
||||
0x00000071012f4a40,sub_71012F4A40,92,
|
||||
0x00000071012f4a9c,sub_71012F4A9C,8,
|
||||
0x00000071012f4aa4,sub_71012F4AA4,8,
|
||||
0x00000071012f4aac,sub_71012F4AAC,92,
|
||||
0x00000071012f4b08,sub_71012F4B08,8,
|
||||
0x00000071012f4b10,sub_71012F4B10,20,
|
||||
0x00000071012f4b24,sub_71012F4B24,52,
|
||||
0x00000071012f47ec,sub_71012F47EC,204,_ZNK4ksys3res9ASSetting10BoneParams27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071012f48b8,sub_71012F48B8,92,_ZNK4ksys3res9ASSetting10BoneParams18getRuntimeTypeInfoEv
|
||||
0x00000071012f4914,sub_71012F4914,164,_ZN4ksys3res9ASSetting10BoneParamsD1Ev
|
||||
0x00000071012f49b8,sub_71012F49B8,128,_ZN4ksys3res9ASSetting10BoneParamsD0Ev
|
||||
0x00000071012f4a38,sub_71012F4A38,8,_ZNK4ksys3res9ASSetting27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071012f4a40,sub_71012F4A40,92,_ZNK4ksys3res9ASSetting18getRuntimeTypeInfoEv
|
||||
0x00000071012f4a9c,sub_71012F4A9C,8,_ZNK4ksys3res9ASSetting10needsParseEv
|
||||
0x00000071012f4aa4,sub_71012F4AA4,8,_ZThn464_NK4ksys3res9ASSetting27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071012f4aac,sub_71012F4AAC,92,_ZThn464_NK4ksys3res9ASSetting18getRuntimeTypeInfoEv
|
||||
0x00000071012f4b08,sub_71012F4B08,8,_ZThn464_NK4ksys3res9ASSetting10needsParseEv
|
||||
0x00000071012f4b10,sub_71012F4B10,20,_ZN4ksys3act9ASSettingD1Ev
|
||||
0x00000071012f4b24,sub_71012F4B24,52,_ZN4ksys3act9ASSettingD0Ev
|
||||
0x00000071012f4b58,sub_71012F4B58,56,
|
||||
0x00000071012f4b90,sub_71012F4B90,124,
|
||||
0x00000071012f4c0c,sub_71012F4C0C,124,
|
||||
|
|
@ -96670,11 +96670,11 @@
|
|||
0x00000071012f4ec0,sub_71012F4EC0,124,
|
||||
0x00000071012f4f3c,sub_71012F4F3C,8,
|
||||
0x00000071012f4f44,sub_71012F4F44,268,
|
||||
0x00000071012f5050,sub_71012F5050,112,
|
||||
0x00000071012f50c0,sub_71012F50C0,92,
|
||||
0x00000071012f511c,j__ZdlPv_1321,4,
|
||||
0x00000071012f5120,sub_71012F5120,8,
|
||||
0x00000071012f5128,sub_71012F5128,372,
|
||||
0x00000071012f5050,sub_71012F5050,112,_ZNK4ksys3res13ASParamParser27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071012f50c0,sub_71012F50C0,92,_ZNK4ksys3res13ASParamParser18getRuntimeTypeInfoEv
|
||||
0x00000071012f511c,j__ZdlPv_1321,4,_ZN4ksys3res13ASParamParserD0Ev
|
||||
0x00000071012f5120,sub_71012F5120,8,_ZN4ksys3res13ASParamParser5parseERKNS1_9ParseArgsE
|
||||
0x00000071012f5128,sub_71012F5128,372,_ZN4ksys3res9ASSetting33checkDerivedRuntimeTypeInfoStaticEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071012f529c,nullsub_4833,4,_ZN4ksys3res9Awareness9doCreate_EPhjPN4sead4HeapE
|
||||
0x00000071012f52a0,nullsub_4834,4,_ZThn632_N4ksys3res9Awareness9doCreate_EPhjPN4sead4HeapE
|
||||
0x00000071012f52a4,Bawareness::parse,5992,_ZN4ksys3res9Awareness6parse_EPhmPN4sead4HeapE
|
||||
|
|
|
|||
|
Can't render this file because it is too large.
|
|
|
@ -50,6 +50,8 @@ target_sources(uking PRIVATE
|
|||
actAiQueries.h
|
||||
actAiRoot.cpp
|
||||
actAiRoot.h
|
||||
actASSetting.cpp
|
||||
actASSetting.h
|
||||
actAttention.cpp
|
||||
actAttention.h
|
||||
actBaseProc.cpp
|
||||
|
|
|
|||
|
|
@ -1 +1,31 @@
|
|||
#include "KingSystem/ActorSystem/actASSetting.h"
|
||||
#include "KingSystem/Resource/resLoadRequest.h"
|
||||
#include "KingSystem/Resource/resResourceASSetting.h"
|
||||
|
||||
namespace ksys::act {
|
||||
|
||||
SEAD_SINGLETON_DISPOSER_IMPL(ASSetting)
|
||||
|
||||
ASSetting::~ASSetting() = default;
|
||||
|
||||
void ASSetting::init(const sead::SafeString& config_path) {
|
||||
res::LoadRequest req;
|
||||
req.mRequester = "ASSetting";
|
||||
req._22 = true;
|
||||
mHandle.load(config_path, &req);
|
||||
}
|
||||
|
||||
// NON_MATCHING: sead::DirectResource to res::ASSetting cast nullptr check; branching for the return
|
||||
const res::ASSetting::BoneParams* ASSetting::getBoneParams(const sead::SafeString& key) const {
|
||||
auto* res = sead::DynamicCast<res::ASSetting>(mHandle.getResource());
|
||||
if (!res)
|
||||
return nullptr;
|
||||
|
||||
for (const auto& bones : res->getBlenderBones()) {
|
||||
if (key == bones.mKeyName.ref())
|
||||
return &bones.mBoneParams;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
} // namespace ksys::act
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
#include <heap/seadDisposer.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
#include "KingSystem/Resource/resHandle.h"
|
||||
#include "KingSystem/Resource/resResourceASSetting.h"
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
|
||||
namespace ksys::act {
|
||||
|
||||
|
|
@ -8,6 +12,15 @@ namespace ksys::act {
|
|||
class ASSetting {
|
||||
SEAD_SINGLETON_DISPOSER(ASSetting)
|
||||
ASSetting() = default;
|
||||
virtual ~ASSetting();
|
||||
|
||||
public:
|
||||
void init(const sead::SafeString& config_path);
|
||||
const res::ASSetting::BoneParams* getBoneParams(const sead::SafeString& key) const;
|
||||
|
||||
private:
|
||||
res::Handle mHandle;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(ASSetting, 0x78);
|
||||
|
||||
} // namespace ksys::act
|
||||
|
|
|
|||
|
|
@ -142,6 +142,8 @@ target_sources(uking PRIVATE
|
|||
resResourceAS.h
|
||||
resResourceASList.cpp
|
||||
resResourceASList.h
|
||||
resResourceASSetting.cpp
|
||||
resResourceASSetting.h
|
||||
resResourceAttClient.cpp
|
||||
resResourceAttClient.h
|
||||
resResourceAttClientList.cpp
|
||||
|
|
|
|||
|
|
@ -0,0 +1,106 @@
|
|||
#include "KingSystem/Resource/resResourceASSetting.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
ASSetting::ASSetting() {
|
||||
mType = "assetting";
|
||||
mVersion = 0;
|
||||
}
|
||||
|
||||
ASSetting::~ASSetting() {
|
||||
mBlenderBones.freeBuffer();
|
||||
}
|
||||
|
||||
void ASSetting::doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) {}
|
||||
|
||||
bool allocBlenderBones(sead::Buffer<ASSetting::BlenderBone>& buffer, int size, sead::Heap* heap,
|
||||
int align = sizeof(void*)) {
|
||||
return buffer.tryAllocBuffer(size, heap, align);
|
||||
}
|
||||
|
||||
bool ASSetting::parse_(u8* data, size_t size, sead::Heap* heap) {
|
||||
if (!data)
|
||||
return true;
|
||||
|
||||
agl::utl::ResParameterArchive archive{data};
|
||||
const auto root = archive.getRootList();
|
||||
|
||||
addList(&mBlenderBoneList, "BlenderBone");
|
||||
|
||||
const auto lists = agl::utl::getResParameterList(root, "BlenderBone");
|
||||
if (!lists.ptr())
|
||||
return true;
|
||||
|
||||
const auto num_blender_bones = lists.getResParameterListNum();
|
||||
if (num_blender_bones == 0)
|
||||
return true;
|
||||
|
||||
if (!allocBlenderBones(mBlenderBones, num_blender_bones, heap))
|
||||
return false;
|
||||
|
||||
auto res_it = lists.listBegin();
|
||||
const auto res_it_end = lists.listEnd();
|
||||
sead::FixedSafeString<32> list_name{"BlenderBone"};
|
||||
const auto list_name_base_len = list_name.calcLength();
|
||||
|
||||
ASParamParser::ParseArgs args;
|
||||
args.res_list = {};
|
||||
args.heap = heap;
|
||||
|
||||
auto it = mBlenderBones.begin();
|
||||
const auto end = mBlenderBones.end();
|
||||
for (; it != end && res_it != res_it_end; ++it, ++res_it) {
|
||||
list_name.trim(list_name_base_len);
|
||||
list_name.appendWithFormat("%d", it.getIndex());
|
||||
mBlenderBoneList.addList(&it->mList, list_name);
|
||||
|
||||
it->mKeyName.init("", "KeyName", "キー名", "", &it->mNameParamObj);
|
||||
it->mList.addObj(&it->mNameParamObj, "NameParam");
|
||||
it->mList.addList(&it->mBoneParams.getList(), "BoneParam");
|
||||
|
||||
const auto list = *res_it;
|
||||
args.user_data = std::addressof(*it);
|
||||
args.res_list = agl::utl::getResParameterList(list, "BoneParam");
|
||||
if (!it->mBoneParams.parse(args))
|
||||
return false;
|
||||
}
|
||||
|
||||
applyResParameterArchive(archive);
|
||||
return true;
|
||||
}
|
||||
|
||||
ASSetting::BoneParams::~BoneParams() {
|
||||
mBuffer.freeBuffer();
|
||||
}
|
||||
|
||||
// NON_MATCHING: parameter object iteration(???)
|
||||
bool ASSetting::BoneParams::parse(const ASParamParser::ParseArgs& args) {
|
||||
const auto num_objects = args.res_list.getResParameterObjNum();
|
||||
if (num_objects == 0)
|
||||
return true;
|
||||
|
||||
if (!mBuffer.tryAllocBuffer(num_objects, args.heap))
|
||||
return false;
|
||||
|
||||
sead::FixedSafeString<32> obj_name{"BoneParam"};
|
||||
const auto obj_name_base_len = obj_name.calcLength();
|
||||
|
||||
auto it = mBuffer.begin();
|
||||
const auto end = mBuffer.end();
|
||||
|
||||
auto res_it = args.res_list.objBegin();
|
||||
const auto res_end = args.res_list.objEnd();
|
||||
|
||||
for (; it != end && res_it != res_end; ++it, ++res_it) {
|
||||
it->mBone.init("", "Bone", "ボーン名", "", &it->mObj);
|
||||
it->mWeight.init(0.0, "Weight", "ウェイト値", "Min=0.f,Max=1.f", &it->mObj);
|
||||
|
||||
obj_name.trim(obj_name_base_len);
|
||||
obj_name.appendWithFormat("%d", res_it.getIndex());
|
||||
mList.addObj(&it->mObj, obj_name);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace ksys::res
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
#pragma once
|
||||
|
||||
#include <agl/Utils/aglParameter.h>
|
||||
#include <agl/Utils/aglParameterIO.h>
|
||||
#include <agl/Utils/aglParameterList.h>
|
||||
#include <agl/Utils/aglParameterObj.h>
|
||||
#include <agl/Utils/aglResParameter.h>
|
||||
#include <basis/seadTypes.h>
|
||||
#include <container/seadBuffer.h>
|
||||
#include <prim/seadRuntimeTypeInfo.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
#include "KingSystem/Resource/resResource.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
class ASParamParser {
|
||||
SEAD_RTTI_BASE(ASParamParser)
|
||||
public:
|
||||
struct ParseArgs {
|
||||
void* user_data;
|
||||
agl::utl::ResParameterList res_list;
|
||||
sead::Heap* heap;
|
||||
};
|
||||
|
||||
virtual ~ASParamParser() = default;
|
||||
virtual bool parse(const ParseArgs& args) { return true; }
|
||||
|
||||
agl::utl::ParameterList& getList() { return mList; }
|
||||
const agl::utl::ParameterList& getList() const { return mList; }
|
||||
|
||||
protected:
|
||||
u32 _8 = 8;
|
||||
agl::utl::ParameterList mList;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(ASParamParser, 0x58);
|
||||
|
||||
class ASSetting : public agl::utl::IParameterIO, public Resource {
|
||||
SEAD_RTTI_OVERRIDE(ASSetting, Resource)
|
||||
|
||||
public:
|
||||
struct BoneParam {
|
||||
agl::utl::ParameterObj mObj;
|
||||
agl::utl::Parameter<sead::SafeString> mBone;
|
||||
agl::utl::Parameter<float> mWeight;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(BoneParam, 0x78);
|
||||
|
||||
class BoneParams : public ASParamParser {
|
||||
SEAD_RTTI_OVERRIDE(BoneParams, ASParamParser)
|
||||
public:
|
||||
~BoneParams() override;
|
||||
bool parse(const ParseArgs& args) override;
|
||||
|
||||
sead::Buffer<BoneParam> mBuffer;
|
||||
};
|
||||
|
||||
struct BlenderBone {
|
||||
agl::utl::ParameterList mList;
|
||||
agl::utl::ParameterObj mNameParamObj;
|
||||
agl::utl::Parameter<sead::SafeString> mKeyName;
|
||||
BoneParams mBoneParams;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(BlenderBone, 0x108);
|
||||
|
||||
ASSetting();
|
||||
~ASSetting() override;
|
||||
|
||||
void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override;
|
||||
bool needsParse() const override { return true; }
|
||||
bool parse_(u8* data, size_t size, sead::Heap* heap) override;
|
||||
|
||||
const sead::Buffer<BlenderBone>& getBlenderBones() const { return mBlenderBones; }
|
||||
|
||||
private:
|
||||
sead::Buffer<BlenderBone> mBlenderBones;
|
||||
agl::utl::ParameterList mBlenderBoneList;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(ASSetting, 0x260);
|
||||
|
||||
} // namespace ksys::res
|
||||
Loading…
Reference in New Issue