mirror of https://github.com/zeldaret/botw.git
ksys/res: Implement remaining AS param parser classes
This commit is contained in:
parent
1a5d9aba68
commit
9846d6fef9
|
@ -90766,7 +90766,7 @@
|
||||||
0x00000071011611c4,nullsub_4590,4,
|
0x00000071011611c4,nullsub_4590,4,
|
||||||
0x00000071011611c8,nullsub_4591,4,
|
0x00000071011611c8,nullsub_4591,4,
|
||||||
0x00000071011611cc,nullsub_4592,4,
|
0x00000071011611cc,nullsub_4592,4,
|
||||||
0x00000071011611d0,sub_71011611D0,140,
|
0x00000071011611d0,sub_71011611D0,140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys3res13ASParamParserEE9isDerivedEPKNS0_9InterfaceE
|
||||||
0x000000710116125c,sub_710116125C,140,
|
0x000000710116125c,sub_710116125C,140,
|
||||||
0x00000071011612e8,sub_71011612E8,140,
|
0x00000071011612e8,sub_71011612E8,140,
|
||||||
0x0000007101161374,sub_7101161374,140,
|
0x0000007101161374,sub_7101161374,140,
|
||||||
|
@ -96583,18 +96583,18 @@
|
||||||
0x00000071012f0578,sub_71012F0578,100,
|
0x00000071012f0578,sub_71012F0578,100,
|
||||||
0x00000071012f05dc,sub_71012F05DC,88,
|
0x00000071012f05dc,sub_71012F05DC,88,
|
||||||
0x00000071012f0634,sub_71012F0634,8,
|
0x00000071012f0634,sub_71012F0634,8,
|
||||||
0x00000071012f063c,sub_71012F063C,708,
|
0x00000071012f063c,sub_71012F063C,708,_ZN4ksys3res17ASFrameCtrlParser5parseERKNS0_13ASParamParser9ParseArgsE
|
||||||
0x00000071012f0900,sub_71012F0900,1036,
|
0x00000071012f0900,sub_71012F0900,1036,_ZN4ksys3res21ASTriggerEventsParser5parseERKNS0_13ASParamParser9ParseArgsE
|
||||||
0x00000071012f0d0c,sub_71012F0D0C,952,
|
0x00000071012f0d0c,sub_71012F0D0C,952,_ZN4ksys3res18ASHoldEventsParser5parseERKNS0_13ASParamParser9ParseArgsE
|
||||||
0x00000071012f10c4,sub_71012F10C4,308,
|
0x00000071012f10c4,sub_71012F10C4,308,_ZN4sead6BufferIN4ksys3res18ASHoldEventsParser5EventEE14tryAllocBufferEiPNS_4HeapEi
|
||||||
0x00000071012f11f8,sub_71012F11F8,796,
|
0x00000071012f11f8,sub_71012F11F8,796,_ZN4ksys3res19ASStringArrayParser5parseERKNS0_13ASParamParser9ParseArgsE
|
||||||
0x00000071012f1514,sub_71012F1514,852,
|
0x00000071012f1514,sub_71012F1514,852,_ZN4ksys3res14ASRangesParser5parseERKNS0_13ASParamParser9ParseArgsE
|
||||||
0x00000071012f1868,sub_71012F1868,756,
|
0x00000071012f1868,sub_71012F1868,756,_ZN4ksys3res18ASFloatArrayParser5parseERKNS0_13ASParamParser9ParseArgsE
|
||||||
0x00000071012f1b5c,sub_71012F1B5C,756,
|
0x00000071012f1b5c,sub_71012F1B5C,756,_ZN4ksys3res16ASIntArrayParser5parseERKNS0_13ASParamParser9ParseArgsE
|
||||||
0x00000071012f1e50,sub_71012F1E50,168,
|
0x00000071012f1e50,sub_71012F1E50,168,_ZN4ksys3res16ASBitIndexParser5parseERKNS0_13ASParamParser9ParseArgsE
|
||||||
0x00000071012f1ef8,sub_71012F1EF8,896,_ZN4ksys3res9ASSetting10BoneParams5parseERKNS0_13ASParamParser9ParseArgsE
|
0x00000071012f1ef8,sub_71012F1EF8,896,_ZN4ksys3res9ASSetting10BoneParams5parseERKNS0_13ASParamParser9ParseArgsE
|
||||||
0x00000071012f2278,sub_71012F2278,300,_ZNK4ksys3res9ASSetting10BoneParams13getBoneWeightERKN4sead14SafeStringBaseIcEE
|
0x00000071012f2278,sub_71012F2278,300,_ZNK4ksys3res9ASSetting10BoneParams13getBoneWeightERKN4sead14SafeStringBaseIcEE
|
||||||
0x00000071012f23a4,sub_71012F23A4,132,
|
0x00000071012f23a4,sub_71012F23A4,132,_ZN4ksys3res12ASExtensionsD1Ev
|
||||||
0x00000071012f2428,sub_71012F2428,508,
|
0x00000071012f2428,sub_71012F2428,508,
|
||||||
0x00000071012f2624,sub_71012F2624,636,
|
0x00000071012f2624,sub_71012F2624,636,
|
||||||
0x00000071012f28a0,sub_71012F28A0,428,_ZNK4ksys3act9ASSetting13getBoneParamsERKN4sead14SafeStringBaseIcEE?
|
0x00000071012f28a0,sub_71012F28A0,428,_ZNK4ksys3act9ASSetting13getBoneParamsERKN4sead14SafeStringBaseIcEE?
|
||||||
|
@ -96616,38 +96616,38 @@
|
||||||
0x00000071012f33d4,ASSetting::createInstance,152,_ZN4ksys3act9ASSetting14createInstanceEPN4sead4HeapE
|
0x00000071012f33d4,ASSetting::createInstance,152,_ZN4ksys3act9ASSetting14createInstanceEPN4sead4HeapE
|
||||||
0x00000071012f346c,sub_71012F346C,88,_ZN4ksys3act9ASSetting14deleteInstanceEv
|
0x00000071012f346c,sub_71012F346C,88,_ZN4ksys3act9ASSetting14deleteInstanceEv
|
||||||
0x00000071012f34c4,ASSetting::init,132,_ZN4ksys3act9ASSetting4initERKN4sead14SafeStringBaseIcEE
|
0x00000071012f34c4,ASSetting::init,132,_ZN4ksys3act9ASSetting4initERKN4sead14SafeStringBaseIcEE
|
||||||
0x00000071012f3548,sub_71012F3548,204,
|
0x00000071012f3548,sub_71012F3548,204,_ZNK4ksys3res17ASFrameCtrlParser27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071012f3614,sub_71012F3614,92,
|
0x00000071012f3614,sub_71012F3614,92,_ZNK4ksys3res17ASFrameCtrlParser18getRuntimeTypeInfoEv
|
||||||
0x00000071012f3670,sub_71012F3670,104,
|
0x00000071012f3670,sub_71012F3670,104,_ZN4ksys3res17ASFrameCtrlParserD2Ev
|
||||||
0x00000071012f36d8,j__ZdlPv_1319,4,
|
0x00000071012f36d8,j__ZdlPv_1319,4,_ZN4ksys3res17ASFrameCtrlParserD0Ev
|
||||||
0x00000071012f36dc,sub_71012F36DC,204,
|
0x00000071012f36dc,sub_71012F36DC,204,_ZNK4ksys3res21ASTriggerEventsParser27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071012f37a8,sub_71012F37A8,92,
|
0x00000071012f37a8,sub_71012F37A8,92,_ZNK4ksys3res21ASTriggerEventsParser18getRuntimeTypeInfoEv
|
||||||
0x00000071012f3804,sub_71012F3804,288,
|
0x00000071012f3804,sub_71012F3804,288,_ZN4ksys3res21ASTriggerEventsParserD2Ev
|
||||||
0x00000071012f3924,sub_71012F3924,252,
|
0x00000071012f3924,sub_71012F3924,252,_ZN4ksys3res21ASTriggerEventsParserD0Ev
|
||||||
0x00000071012f3a20,sub_71012F3A20,204,
|
0x00000071012f3a20,sub_71012F3A20,204,_ZNK4ksys3res18ASHoldEventsParser27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071012f3aec,sub_71012F3AEC,92,
|
0x00000071012f3aec,sub_71012F3AEC,92,_ZNK4ksys3res18ASHoldEventsParser18getRuntimeTypeInfoEv
|
||||||
0x00000071012f3b48,sub_71012F3B48,168,
|
0x00000071012f3b48,sub_71012F3B48,168,_ZN4ksys3res18ASHoldEventsParserD2Ev
|
||||||
0x00000071012f3bf0,sub_71012F3BF0,132,
|
0x00000071012f3bf0,sub_71012F3BF0,132,_ZN4ksys3res18ASHoldEventsParserD0Ev
|
||||||
0x00000071012f3c74,sub_71012F3C74,204,
|
0x00000071012f3c74,sub_71012F3C74,204,_ZNK4ksys3res19ASStringArrayParser27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071012f3d40,sub_71012F3D40,92,
|
0x00000071012f3d40,sub_71012F3D40,92,_ZNK4ksys3res19ASStringArrayParser18getRuntimeTypeInfoEv
|
||||||
0x00000071012f3d9c,sub_71012F3D9C,160,
|
0x00000071012f3d9c,sub_71012F3D9C,160,_ZN4ksys3res19ASStringArrayParserD2Ev
|
||||||
0x00000071012f3e3c,sub_71012F3E3C,108,
|
0x00000071012f3e3c,sub_71012F3E3C,108,_ZN4ksys3res19ASStringArrayParserD0Ev
|
||||||
0x00000071012f3ea8,sub_71012F3EA8,204,
|
0x00000071012f3ea8,sub_71012F3EA8,204,_ZNK4ksys3res14ASRangesParser27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071012f3f74,sub_71012F3F74,92,
|
0x00000071012f3f74,sub_71012F3F74,92,_ZNK4ksys3res14ASRangesParser18getRuntimeTypeInfoEv
|
||||||
0x00000071012f3fd0,sub_71012F3FD0,164,
|
0x00000071012f3fd0,sub_71012F3FD0,164,_ZN4ksys3res14ASRangesParserD2Ev
|
||||||
0x00000071012f4074,sub_71012F4074,128,
|
0x00000071012f4074,sub_71012F4074,128,_ZN4ksys3res14ASRangesParserD0Ev
|
||||||
0x00000071012f40f4,sub_71012F40F4,204,
|
0x00000071012f40f4,sub_71012F40F4,204,_ZNK4ksys3res18ASFloatArrayParser27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071012f41c0,sub_71012F41C0,92,
|
0x00000071012f41c0,sub_71012F41C0,92,_ZNK4ksys3res18ASFloatArrayParser18getRuntimeTypeInfoEv
|
||||||
0x00000071012f421c,sub_71012F421C,240,
|
0x00000071012f421c,sub_71012F421C,240,_ZN4ksys3res18ASFloatArrayParserD2Ev
|
||||||
0x00000071012f430c,sub_71012F430C,188,
|
0x00000071012f430c,sub_71012F430C,188,_ZN4ksys3res18ASFloatArrayParserD0Ev
|
||||||
0x00000071012f43c8,sub_71012F43C8,204,
|
0x00000071012f43c8,sub_71012F43C8,204,_ZNK4ksys3res16ASIntArrayParser27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071012f4494,sub_71012F4494,92,
|
0x00000071012f4494,sub_71012F4494,92,_ZNK4ksys3res16ASIntArrayParser18getRuntimeTypeInfoEv
|
||||||
0x00000071012f44f0,sub_71012F44F0,240,
|
0x00000071012f44f0,sub_71012F44F0,240,_ZN4ksys3res16ASIntArrayParserD2Ev
|
||||||
0x00000071012f45e0,sub_71012F45E0,188,
|
0x00000071012f45e0,sub_71012F45E0,188,_ZN4ksys3res16ASIntArrayParserD0Ev
|
||||||
0x00000071012f469c,sub_71012F469C,204,
|
0x00000071012f469c,sub_71012F469C,204,_ZNK4ksys3res16ASBitIndexParser27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071012f4768,sub_71012F4768,92,
|
0x00000071012f4768,sub_71012F4768,92,_ZNK4ksys3res16ASBitIndexParser18getRuntimeTypeInfoEv
|
||||||
0x00000071012f47c4,sub_71012F47C4,36,_ZN4ksys3res13ASParamParserD2Ev
|
0x00000071012f47c4,sub_71012F47C4,36,_ZN4ksys3res13ASParamParserD2Ev
|
||||||
0x00000071012f47e8,j__ZdlPv_1320,4,
|
0x00000071012f47e8,j__ZdlPv_1320,4,_ZN4ksys3res16ASBitIndexParserD0Ev
|
||||||
0x00000071012f47ec,sub_71012F47EC,204,_ZNK4ksys3res9ASSetting10BoneParams27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
0x00000071012f47ec,sub_71012F47EC,204,_ZNK4ksys3res9ASSetting10BoneParams27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071012f48b8,sub_71012F48B8,92,_ZNK4ksys3res9ASSetting10BoneParams18getRuntimeTypeInfoEv
|
0x00000071012f48b8,sub_71012F48B8,92,_ZNK4ksys3res9ASSetting10BoneParams18getRuntimeTypeInfoEv
|
||||||
0x00000071012f4914,sub_71012F4914,164,_ZN4ksys3res9ASSetting10BoneParamsD1Ev
|
0x00000071012f4914,sub_71012F4914,164,_ZN4ksys3res9ASSetting10BoneParamsD1Ev
|
||||||
|
@ -96660,16 +96660,16 @@
|
||||||
0x00000071012f4b08,sub_71012F4B08,8,_ZThn464_NK4ksys3res9ASSetting10needsParseEv
|
0x00000071012f4b08,sub_71012F4B08,8,_ZThn464_NK4ksys3res9ASSetting10needsParseEv
|
||||||
0x00000071012f4b10,sub_71012F4B10,20,_ZN4ksys3act9ASSettingD1Ev
|
0x00000071012f4b10,sub_71012F4B10,20,_ZN4ksys3act9ASSettingD1Ev
|
||||||
0x00000071012f4b24,sub_71012F4B24,52,_ZN4ksys3act9ASSettingD0Ev
|
0x00000071012f4b24,sub_71012F4B24,52,_ZN4ksys3act9ASSettingD0Ev
|
||||||
0x00000071012f4b58,sub_71012F4B58,56,
|
0x00000071012f4b58,sub_71012F4B58,56,_ZN4ksys3resL12factoryImpl_INS0_17ASFrameCtrlParserEEEPNS0_13ASParamParserEPN4sead4HeapE
|
||||||
0x00000071012f4b90,sub_71012F4B90,124,
|
0x00000071012f4b90,sub_71012F4B90,124,_ZN4ksys3resL12factoryImpl_INS0_21ASTriggerEventsParserEEEPNS0_13ASParamParserEPN4sead4HeapE
|
||||||
0x00000071012f4c0c,sub_71012F4C0C,124,
|
0x00000071012f4c0c,sub_71012F4C0C,124,_ZN4ksys3resL12factoryImpl_INS0_18ASHoldEventsParserEEEPNS0_13ASParamParserEPN4sead4HeapE
|
||||||
0x00000071012f4c88,sub_71012F4C88,148,
|
0x00000071012f4c88,sub_71012F4C88,148,_ZN4ksys3resL12factoryImpl_INS0_19ASStringArrayParserEEEPNS0_13ASParamParserEPN4sead4HeapE
|
||||||
0x00000071012f4d1c,sub_71012F4D1C,124,
|
0x00000071012f4d1c,sub_71012F4D1C,124,_ZN4ksys3resL12factoryImpl_INS0_14ASRangesParserEEEPNS0_13ASParamParserEPN4sead4HeapE
|
||||||
0x00000071012f4d98,sub_71012F4D98,148,
|
0x00000071012f4d98,sub_71012F4D98,148,_ZN4ksys3resL12factoryImpl_INS0_18ASFloatArrayParserEEEPNS0_13ASParamParserEPN4sead4HeapE
|
||||||
0x00000071012f4e2c,sub_71012F4E2C,148,
|
0x00000071012f4e2c,sub_71012F4E2C,148,_ZN4ksys3resL12factoryImpl_INS0_16ASIntArrayParserEEEPNS0_13ASParamParserEPN4sead4HeapE
|
||||||
0x00000071012f4ec0,sub_71012F4EC0,124,
|
0x00000071012f4ec0,sub_71012F4EC0,124,_ZN4ksys3resL12factoryImpl_INS0_16ASBitIndexParserEEEPNS0_13ASParamParserEPN4sead4HeapE
|
||||||
0x00000071012f4f3c,sub_71012F4F3C,8,
|
0x00000071012f4f3c,sub_71012F4F3C,8,_ZN4ksys3resL25dummyASParserFactoryImpl_EPN4sead4HeapE
|
||||||
0x00000071012f4f44,sub_71012F4F44,268,
|
0x00000071012f4f44,sub_71012F4F44,268,_ZN4ksys3res17ASFrameCtrlParserC2Ev
|
||||||
0x00000071012f5050,sub_71012F5050,112,_ZNK4ksys3res13ASParamParser27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
0x00000071012f5050,sub_71012F5050,112,_ZNK4ksys3res13ASParamParser27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||||
0x00000071012f50c0,sub_71012F50C0,92,_ZNK4ksys3res13ASParamParser18getRuntimeTypeInfoEv
|
0x00000071012f50c0,sub_71012F50C0,92,_ZNK4ksys3res13ASParamParser18getRuntimeTypeInfoEv
|
||||||
0x00000071012f511c,j__ZdlPv_1321,4,_ZN4ksys3res13ASParamParserD0Ev
|
0x00000071012f511c,j__ZdlPv_1321,4,_ZN4ksys3res13ASParamParserD0Ev
|
||||||
|
|
Can't render this file because it is too large.
|
|
@ -1 +1,240 @@
|
||||||
#include "KingSystem/Resource/resResourceASResource.h"
|
#include "KingSystem/Resource/resResourceASResource.h"
|
||||||
|
#include <prim/seadSafeString.h>
|
||||||
|
|
||||||
|
namespace ksys::res {
|
||||||
|
|
||||||
|
bool ASFrameCtrlParser::parse(const ASParamParser::ParseArgs& args) {
|
||||||
|
mRate.init(1.0, "Rate", "再生速度", "Min=0.f,Max=10.f", &mObj);
|
||||||
|
mStartFrame.init(0.0, "StartFrame", "開始フレーム", "Min=0.f,Max=100.f", &mObj);
|
||||||
|
mEndFrame.init(-1.0, "EndFrame", "終了フレーム", "Min=-1.f,Max=100.f", &mObj);
|
||||||
|
mLoopStopCount.init(-1.0, "LoopStopCount", "ループ停止回数", "Min=-1.f,Max=10.f", &mObj);
|
||||||
|
mLoopStopCountRandom.init(0.0, "LoopStopCountRandom", "ランダムループ追加回数",
|
||||||
|
"Min=0.f,Max=10.f", &mObj);
|
||||||
|
mReversePlay.init(false, "ReversePlay", "逆再生", "", &mObj);
|
||||||
|
mUseGlobalFrame.init(false, "UseGlobalFrame", "グローバルフレーム使う", "", &mObj);
|
||||||
|
mFootType.init(0, "FootType", "足解決", "", &mObj);
|
||||||
|
mConnect.init(false, "Connect", "接続", "", &mObj);
|
||||||
|
mAnmLoop.init(0, "AnmLoop", "ループ設定", "", &mObj);
|
||||||
|
|
||||||
|
mList.addObj(&mObj, "FrameCtrl0");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASTriggerEventsParser::parse(const ASParamParser::ParseArgs& args) {
|
||||||
|
const int num_objs = args.res_list.getResParameterObjNum();
|
||||||
|
if (num_objs == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!mEvents.tryAllocBuffer(num_objs, args.heap))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
auto it = mEvents.begin();
|
||||||
|
const auto end = mEvents.end();
|
||||||
|
|
||||||
|
sead::FixedSafeString<32> obj_name{"Event"};
|
||||||
|
const auto obj_name_prefix_len = obj_name.calcLength();
|
||||||
|
|
||||||
|
auto res_it = args.res_list.objBegin();
|
||||||
|
const auto res_end = args.res_list.objEnd();
|
||||||
|
|
||||||
|
while (res_it != res_end && it != end) {
|
||||||
|
u32 type_index = -1;
|
||||||
|
const auto TypeIndex = agl::utl::getResParameter(res_it.getObj(), "TypeIndex");
|
||||||
|
if (TypeIndex.ptr())
|
||||||
|
type_index = *TypeIndex.getData<int>();
|
||||||
|
|
||||||
|
// TODO: add a TypeIndex enum
|
||||||
|
it->type_index = type_index > 33 ? 88 : int(type_index) + 54;
|
||||||
|
|
||||||
|
it->frame.init(0.0, "Frame", "フレーム", "Min=0.f,Max=100.f", &it->obj);
|
||||||
|
it->value.init("", "Value", "値", "", &it->obj);
|
||||||
|
|
||||||
|
obj_name.trim(obj_name_prefix_len);
|
||||||
|
obj_name.appendWithFormat("%d", it.getIndex());
|
||||||
|
mList.addObj(&it->obj, obj_name);
|
||||||
|
|
||||||
|
++res_it;
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASHoldEventsParser::parse(const ASParamParser::ParseArgs& args) {
|
||||||
|
const int num_objs = args.res_list.getResParameterObjNum();
|
||||||
|
if (num_objs == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!mEvents.tryAllocBuffer(num_objs, args.heap))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
auto it = mEvents.begin();
|
||||||
|
const auto end = mEvents.end();
|
||||||
|
|
||||||
|
sead::FixedSafeString<32> obj_name{"Event"};
|
||||||
|
const auto obj_name_prefix_len = obj_name.calcLength();
|
||||||
|
|
||||||
|
auto res_it = args.res_list.objBegin();
|
||||||
|
const auto res_end = args.res_list.objEnd();
|
||||||
|
|
||||||
|
while (res_it != res_end && it != end) {
|
||||||
|
u32 type_index = -1;
|
||||||
|
const auto TypeIndex = agl::utl::getResParameter(res_it.getObj(), "TypeIndex");
|
||||||
|
if (TypeIndex.ptr())
|
||||||
|
type_index = *TypeIndex.getData<int>();
|
||||||
|
|
||||||
|
// TODO: add a TypeIndex enum
|
||||||
|
it->type_index = type_index > 53 ? 88 : int(type_index);
|
||||||
|
|
||||||
|
it->start_frame.init(0.0, "StartFrame", "開始フレーム", "Min=0.f,Max=100.f", &it->obj);
|
||||||
|
it->end_frame.init(0.0, "EndFrame", "終了フレーム", "Min=0.f,Max=100.f", &it->obj);
|
||||||
|
it->value.init("", "Value", "値", "", &it->obj);
|
||||||
|
|
||||||
|
obj_name.trim(obj_name_prefix_len);
|
||||||
|
obj_name.appendWithFormat("%d", it.getIndex());
|
||||||
|
mList.addObj(&it->obj, obj_name);
|
||||||
|
|
||||||
|
++res_it;
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASStringArrayParser::parse(const ASParamParser::ParseArgs& args) {
|
||||||
|
const int size = args.res_list.getResParameterObj(0).getNum();
|
||||||
|
if (size != 0) {
|
||||||
|
if (!mValues.tryAllocBuffer(size, args.heap))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
sead::FixedSafeString<32> param_name{"Value"};
|
||||||
|
const auto param_name_prefix_len = param_name.calcLength();
|
||||||
|
|
||||||
|
for (int i = 0; i < size; ++i) {
|
||||||
|
param_name.trim(param_name_prefix_len);
|
||||||
|
param_name.appendWithFormat("%d", i);
|
||||||
|
mValues[i].value.init("", param_name, "値", "", &mObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mList.addObj(&mObj, "StringArray0");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASRangesParser::parse(const ASParamParser::ParseArgs& args) {
|
||||||
|
const int num_objs = args.res_list.getResParameterObjNum();
|
||||||
|
if (num_objs == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!mRanges.tryAllocBuffer(num_objs, args.heap))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
auto it = mRanges.begin();
|
||||||
|
const auto end = mRanges.end();
|
||||||
|
|
||||||
|
sead::FixedSafeString<32> obj_name{"Range"};
|
||||||
|
const auto obj_name_prefix_len = obj_name.calcLength();
|
||||||
|
|
||||||
|
auto res_it = args.res_list.objBegin();
|
||||||
|
const auto res_end = args.res_list.objEnd();
|
||||||
|
|
||||||
|
while (res_it != res_end && it != end) {
|
||||||
|
obj_name.trim(obj_name_prefix_len);
|
||||||
|
obj_name.appendWithFormat("%d", it.getIndex());
|
||||||
|
|
||||||
|
it->start.init(0.0, "Start", "開始", "Min=0.f,Max=1.f", &it->obj);
|
||||||
|
it->end.init(0.0, "End", "終了", "Min=0.f,Max=1.f", &it->obj);
|
||||||
|
|
||||||
|
mList.addObj(&it->obj, obj_name);
|
||||||
|
|
||||||
|
++res_it;
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASFloatArrayParser::parse(const ASParamParser::ParseArgs& args) {
|
||||||
|
const int size = args.res_list.getResParameterObj(0).getNum();
|
||||||
|
if (size != 0) {
|
||||||
|
if (!mValues.tryAllocBuffer(size, args.heap))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
sead::FixedSafeString<32> param_name{"Value"};
|
||||||
|
const auto param_name_prefix_len = param_name.calcLength();
|
||||||
|
|
||||||
|
for (int i = 0; i < size; ++i) {
|
||||||
|
param_name.trim(param_name_prefix_len);
|
||||||
|
param_name.appendWithFormat("%d", i);
|
||||||
|
mValues[i].value.init(1.0, param_name, "値", "", &mObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mList.addObj(&mObj, "FloatArray0");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASIntArrayParser::parse(const ASParamParser::ParseArgs& args) {
|
||||||
|
const int size = args.res_list.getResParameterObj(0).getNum();
|
||||||
|
if (size != 0) {
|
||||||
|
if (!mValues.tryAllocBuffer(size, args.heap))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
sead::FixedSafeString<32> param_name{"Value"};
|
||||||
|
const auto param_name_prefix_len = param_name.calcLength();
|
||||||
|
|
||||||
|
for (int i = 0; i < size; ++i) {
|
||||||
|
param_name.trim(param_name_prefix_len);
|
||||||
|
param_name.appendWithFormat("%d", i);
|
||||||
|
mValues[i].value.init(1, param_name, "値", "", &mObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mList.addObj(&mObj, "IntArray0");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASBitIndexParser::parse(const ASParamParser::ParseArgs& args) {
|
||||||
|
const auto obj = args.res_list.getResParameterObj(0);
|
||||||
|
if (obj.getNum() < 1)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
const auto TypeIndex = agl::utl::getResParameter(obj, "TypeIndex");
|
||||||
|
if (!TypeIndex.ptr())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
mTypeIndex = *TypeIndex.getData<int>();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
static ASParamParser* factoryImpl_(sead::Heap* heap) {
|
||||||
|
return new (heap) T;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ASParamParser* dummyASParserFactoryImpl_(sead::Heap*) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::array<ASExtensions::Factory, ASParamParser::NumTypes> ASExtensions::sFactories{{
|
||||||
|
{"FrameCtrl", factoryImpl_<ASFrameCtrlParser>},
|
||||||
|
{"TriggerEvents", factoryImpl_<ASTriggerEventsParser>},
|
||||||
|
{"HoldEvents", factoryImpl_<ASHoldEventsParser>},
|
||||||
|
{"StringArray", factoryImpl_<ASStringArrayParser>},
|
||||||
|
{"Ranges", factoryImpl_<ASRangesParser>},
|
||||||
|
{"FloatArray", factoryImpl_<ASFloatArrayParser>},
|
||||||
|
{"IntArray", factoryImpl_<ASIntArrayParser>},
|
||||||
|
{"BitIndex", factoryImpl_<ASBitIndexParser>},
|
||||||
|
{"BlenderBone", dummyASParserFactoryImpl_},
|
||||||
|
}};
|
||||||
|
|
||||||
|
ASExtensions::~ASExtensions() {
|
||||||
|
for (auto*& parser : mParsers) {
|
||||||
|
if (parser && parser->getType() != ASParamParser::Type::BlenderBone)
|
||||||
|
delete parser;
|
||||||
|
parser = nullptr;
|
||||||
|
}
|
||||||
|
mParsers.freeBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ksys::res
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <agl/Utils/aglParameter.h>
|
||||||
#include <agl/Utils/aglParameterList.h>
|
#include <agl/Utils/aglParameterList.h>
|
||||||
|
#include <agl/Utils/aglParameterObj.h>
|
||||||
#include <agl/Utils/aglResParameter.h>
|
#include <agl/Utils/aglResParameter.h>
|
||||||
|
#include <array>
|
||||||
#include <basis/seadTypes.h>
|
#include <basis/seadTypes.h>
|
||||||
|
#include <container/seadBuffer.h>
|
||||||
#include <prim/seadRuntimeTypeInfo.h>
|
#include <prim/seadRuntimeTypeInfo.h>
|
||||||
#include "KingSystem/Utils/Types.h"
|
#include "KingSystem/Utils/Types.h"
|
||||||
|
|
||||||
|
@ -15,22 +19,236 @@ namespace ksys::res {
|
||||||
class ASParamParser {
|
class ASParamParser {
|
||||||
SEAD_RTTI_BASE(ASParamParser)
|
SEAD_RTTI_BASE(ASParamParser)
|
||||||
public:
|
public:
|
||||||
|
enum class Type {
|
||||||
|
FrameCtrl = 0,
|
||||||
|
TriggerEvents = 1,
|
||||||
|
HoldEvents = 2,
|
||||||
|
StringArray = 3,
|
||||||
|
Ranges = 4,
|
||||||
|
FloatArray = 5,
|
||||||
|
IntArray = 6,
|
||||||
|
BitIndex = 7,
|
||||||
|
BlenderBone = 8,
|
||||||
|
};
|
||||||
|
static constexpr int NumTypes = 9;
|
||||||
|
|
||||||
struct ParseArgs {
|
struct ParseArgs {
|
||||||
void* user_data;
|
void* user_data;
|
||||||
agl::utl::ResParameterList res_list;
|
agl::utl::ResParameterList res_list;
|
||||||
sead::Heap* heap;
|
sead::Heap* heap;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
explicit ASParamParser(Type type) : mType(type) {}
|
||||||
virtual ~ASParamParser() = default;
|
virtual ~ASParamParser() = default;
|
||||||
virtual bool parse(const ParseArgs& args) { return true; }
|
virtual bool parse(const ParseArgs& args) { return true; }
|
||||||
|
|
||||||
|
Type getType() const { return mType; }
|
||||||
agl::utl::ParameterList& getList() { return mList; }
|
agl::utl::ParameterList& getList() { return mList; }
|
||||||
const agl::utl::ParameterList& getList() const { return mList; }
|
const agl::utl::ParameterList& getList() const { return mList; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
u32 _8 = 8;
|
Type mType;
|
||||||
agl::utl::ParameterList mList;
|
agl::utl::ParameterList mList;
|
||||||
};
|
};
|
||||||
KSYS_CHECK_SIZE_NX150(ASParamParser, 0x58);
|
KSYS_CHECK_SIZE_NX150(ASParamParser, 0x58);
|
||||||
|
|
||||||
|
class ASExtensions {
|
||||||
|
public:
|
||||||
|
ASExtensions() = default;
|
||||||
|
~ASExtensions();
|
||||||
|
ASExtensions(const ASExtensions&) = delete;
|
||||||
|
auto operator=(const ASExtensions&) = delete;
|
||||||
|
|
||||||
|
const sead::Buffer<ASParamParser*>& getParsers() const { return mParsers; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct Factory {
|
||||||
|
const char* name;
|
||||||
|
ASParamParser* (*make)(sead::Heap* heap);
|
||||||
|
};
|
||||||
|
static std::array<Factory, ASParamParser::NumTypes> sFactories;
|
||||||
|
|
||||||
|
agl::utl::ParameterList mList;
|
||||||
|
sead::Buffer<ASParamParser*> mParsers;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ASFrameCtrlParser : public ASParamParser {
|
||||||
|
SEAD_RTTI_OVERRIDE(ASFrameCtrlParser, ASParamParser)
|
||||||
|
public:
|
||||||
|
ASFrameCtrlParser() : ASParamParser(Type::FrameCtrl) {}
|
||||||
|
|
||||||
|
const auto& getRate() const { return *mRate; }
|
||||||
|
const auto& getStartFrame() const { return *mStartFrame; }
|
||||||
|
const auto& getEndFrame() const { return *mEndFrame; }
|
||||||
|
const auto& getLoopStopCount() const { return *mLoopStopCount; }
|
||||||
|
const auto& getLoopStopCountRandom() const { return *mLoopStopCountRandom; }
|
||||||
|
const auto& getReversePlay() const { return *mReversePlay; }
|
||||||
|
const auto& getUseGlobalFrame() const { return *mUseGlobalFrame; }
|
||||||
|
const auto& getConnect() const { return *mConnect; }
|
||||||
|
const auto& getFootType() const { return *mFootType; }
|
||||||
|
const auto& getAnmLoop() const { return *mAnmLoop; }
|
||||||
|
|
||||||
|
bool parse(const ParseArgs& args) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
agl::utl::ParameterObj mObj;
|
||||||
|
agl::utl::Parameter<float> mRate;
|
||||||
|
agl::utl::Parameter<float> mStartFrame;
|
||||||
|
agl::utl::Parameter<float> mEndFrame;
|
||||||
|
agl::utl::Parameter<float> mLoopStopCount;
|
||||||
|
agl::utl::Parameter<float> mLoopStopCountRandom;
|
||||||
|
agl::utl::Parameter<bool> mReversePlay;
|
||||||
|
agl::utl::Parameter<bool> mUseGlobalFrame;
|
||||||
|
agl::utl::Parameter<int> mConnect;
|
||||||
|
agl::utl::Parameter<int> mFootType;
|
||||||
|
agl::utl::Parameter<int> mAnmLoop;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ASTriggerEventsParser : public ASParamParser {
|
||||||
|
SEAD_RTTI_OVERRIDE(ASTriggerEventsParser, ASParamParser)
|
||||||
|
public:
|
||||||
|
struct Event {
|
||||||
|
agl::utl::ParameterObj obj;
|
||||||
|
int type_index;
|
||||||
|
agl::utl::Parameter<float> frame;
|
||||||
|
agl::utl::Parameter<sead::SafeString> value;
|
||||||
|
};
|
||||||
|
|
||||||
|
ASTriggerEventsParser() : ASParamParser(Type::TriggerEvents) {}
|
||||||
|
~ASTriggerEventsParser() override { mEvents.freeBuffer(); }
|
||||||
|
ASTriggerEventsParser(const ASTriggerEventsParser&) = delete;
|
||||||
|
auto operator=(const ASTriggerEventsParser&) = delete;
|
||||||
|
|
||||||
|
const sead::Buffer<Event>& getEvents() const { return mEvents; }
|
||||||
|
|
||||||
|
bool parse(const ParseArgs& args) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
sead::Buffer<Event> mEvents;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ASHoldEventsParser : public ASParamParser {
|
||||||
|
SEAD_RTTI_OVERRIDE(ASHoldEventsParser, ASParamParser)
|
||||||
|
public:
|
||||||
|
struct Event {
|
||||||
|
agl::utl::ParameterObj obj;
|
||||||
|
int type_index;
|
||||||
|
agl::utl::Parameter<float> start_frame;
|
||||||
|
agl::utl::Parameter<float> end_frame;
|
||||||
|
agl::utl::Parameter<sead::SafeString> value;
|
||||||
|
};
|
||||||
|
|
||||||
|
ASHoldEventsParser() : ASParamParser(Type::HoldEvents) {}
|
||||||
|
~ASHoldEventsParser() override { mEvents.freeBuffer(); }
|
||||||
|
ASHoldEventsParser(const ASHoldEventsParser&) = delete;
|
||||||
|
auto operator=(const ASHoldEventsParser&) = delete;
|
||||||
|
|
||||||
|
const sead::Buffer<Event>& getEvents() const { return mEvents; }
|
||||||
|
|
||||||
|
bool parse(const ParseArgs& args) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
sead::Buffer<Event> mEvents;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ASStringArrayParser : public ASParamParser {
|
||||||
|
SEAD_RTTI_OVERRIDE(ASStringArrayParser, ASParamParser)
|
||||||
|
public:
|
||||||
|
struct Value {
|
||||||
|
agl::utl::Parameter<sead::SafeString> value;
|
||||||
|
};
|
||||||
|
|
||||||
|
ASStringArrayParser() : ASParamParser(Type::StringArray) {}
|
||||||
|
~ASStringArrayParser() override { mValues.freeBuffer(); }
|
||||||
|
ASStringArrayParser(const ASStringArrayParser&) = delete;
|
||||||
|
auto operator=(const ASStringArrayParser&) = delete;
|
||||||
|
|
||||||
|
const sead::Buffer<Value>& getValues() const { return mValues; }
|
||||||
|
|
||||||
|
bool parse(const ParseArgs& args) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
agl::utl::ParameterObj mObj;
|
||||||
|
sead::Buffer<Value> mValues;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ASRangesParser : public ASParamParser {
|
||||||
|
SEAD_RTTI_OVERRIDE(ASRangesParser, ASParamParser)
|
||||||
|
public:
|
||||||
|
struct Range {
|
||||||
|
agl::utl::ParameterObj obj;
|
||||||
|
agl::utl::Parameter<float> start;
|
||||||
|
agl::utl::Parameter<float> end;
|
||||||
|
};
|
||||||
|
|
||||||
|
ASRangesParser() : ASParamParser(Type::Ranges) {}
|
||||||
|
~ASRangesParser() override { mRanges.freeBuffer(); }
|
||||||
|
ASRangesParser(const ASRangesParser&) = delete;
|
||||||
|
auto operator=(const ASRangesParser&) = delete;
|
||||||
|
|
||||||
|
const sead::Buffer<Range>& getRanges() const { return mRanges; }
|
||||||
|
|
||||||
|
bool parse(const ParseArgs& args) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
sead::Buffer<Range> mRanges;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ASFloatArrayParser : public ASParamParser {
|
||||||
|
SEAD_RTTI_OVERRIDE(ASFloatArrayParser, ASParamParser)
|
||||||
|
public:
|
||||||
|
struct Value {
|
||||||
|
agl::utl::Parameter<float> value;
|
||||||
|
};
|
||||||
|
|
||||||
|
ASFloatArrayParser() : ASParamParser(Type::FloatArray) {}
|
||||||
|
|
||||||
|
~ASFloatArrayParser() override { mValues.freeBuffer(); }
|
||||||
|
ASFloatArrayParser(const ASFloatArrayParser&) = delete;
|
||||||
|
auto operator=(const ASFloatArrayParser&) = delete;
|
||||||
|
|
||||||
|
const sead::Buffer<Value>& getValues() const { return mValues; }
|
||||||
|
|
||||||
|
bool parse(const ParseArgs& args) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
agl::utl::ParameterObj mObj;
|
||||||
|
sead::Buffer<Value> mValues;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ASIntArrayParser : public ASParamParser {
|
||||||
|
SEAD_RTTI_OVERRIDE(ASIntArrayParser, ASParamParser)
|
||||||
|
public:
|
||||||
|
struct Value {
|
||||||
|
agl::utl::Parameter<int> value;
|
||||||
|
};
|
||||||
|
|
||||||
|
ASIntArrayParser() : ASParamParser(Type::IntArray) {}
|
||||||
|
|
||||||
|
~ASIntArrayParser() override { mValues.freeBuffer(); }
|
||||||
|
ASIntArrayParser(const ASIntArrayParser&) = delete;
|
||||||
|
auto operator=(const ASIntArrayParser&) = delete;
|
||||||
|
|
||||||
|
const sead::Buffer<Value>& getValues() const { return mValues; }
|
||||||
|
|
||||||
|
bool parse(const ParseArgs& args) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
agl::utl::ParameterObj mObj;
|
||||||
|
sead::Buffer<Value> mValues;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ASBitIndexParser : public ASParamParser {
|
||||||
|
SEAD_RTTI_OVERRIDE(ASBitIndexParser, ASParamParser)
|
||||||
|
public:
|
||||||
|
ASBitIndexParser() : ASParamParser(Type::BitIndex) {}
|
||||||
|
|
||||||
|
int getBitIndex() const { return mTypeIndex; }
|
||||||
|
|
||||||
|
bool parse(const ParseArgs& args) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int mTypeIndex = -1;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace ksys::res
|
} // namespace ksys::res
|
||||||
|
|
|
@ -28,6 +28,7 @@ public:
|
||||||
class BoneParams : public ASParamParser {
|
class BoneParams : public ASParamParser {
|
||||||
SEAD_RTTI_OVERRIDE(BoneParams, ASParamParser)
|
SEAD_RTTI_OVERRIDE(BoneParams, ASParamParser)
|
||||||
public:
|
public:
|
||||||
|
BoneParams() : ASParamParser(Type::BlenderBone) {}
|
||||||
~BoneParams() override;
|
~BoneParams() override;
|
||||||
bool parse(const ParseArgs& args) override;
|
bool parse(const ParseArgs& args) override;
|
||||||
f32 getBoneWeight(const sead::SafeString& name) const;
|
f32 getBoneWeight(const sead::SafeString& name) const;
|
||||||
|
|
Loading…
Reference in New Issue