ksys/res: Start adding AttCheck

Most of the check() functions are unimplemented because they require
doing more physics/collision stuff.
This commit is contained in:
Léo Lam 2021-04-23 14:51:42 +02:00
parent 6518fe5c73
commit f98b6b0dba
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
9 changed files with 668 additions and 133 deletions

View File

@ -87690,45 +87690,45 @@
0x000000710108a4d0,sub_710108A4D0,240,_ZNK4ksys3act13ActorTemplate17getAttDefPriorityEPPKcS3_
0x000000710108a5c0,ActorTemplate::getNumEntries,8,_ZNK4ksys3act13ActorTemplate14getNumProfilesEv
0x000000710108a5c8,ActorTemplate::getKeyNameByIdx,76,_ZNK4ksys3act13ActorTemplate14getProfileNameEi
0x000000710108a614,nullsub_4457,4,
0x000000710108a618,sub_710108A618,8,
0x000000710108a620,sub_710108A620,8,
0x000000710108a614,nullsub_4457,4,_ZN4ksys3res8AttCheck2m4Ev
0x000000710108a618,sub_710108A618,8,_ZN4ksys3res8AttCheck5checkEv
0x000000710108a620,sub_710108A620,8,_ZN4ksys3res8AttCheck2m6Ev
0x000000710108a628,sub_710108A628,132,
0x000000710108a6ac,sub_710108A6AC,192,
0x000000710108a6ac,sub_710108A6AC,192,_ZN4ksys3res12AttCheckLine5parseERKNS0_8AttCheck9CreateArgE
0x000000710108a76c,sub_710108A76C,48,
0x000000710108a79c,sub_710108A79C,32,
0x000000710108a7bc,sub_710108A7BC,468,
0x000000710108a990,sub_710108A990,128,
0x000000710108aa10,sub_710108AA10,148,
0x000000710108aaa4,sub_710108AAA4,164,
0x000000710108ab48,sub_710108AB48,484,
0x000000710108aaa4,sub_710108AAA4,164,_ZN4ksys3res12AttCheckArea5parseERKNS0_8AttCheck9CreateArgE
0x000000710108ab48,sub_710108AB48,484,_ZN4ksys3res18AttCheckAreaSphere5parseERKNS0_8AttCheck9CreateArgE
0x000000710108ad2c,sub_710108AD2C,732,
0x000000710108b008,sub_710108B008,504,
0x000000710108b200,sub_710108B200,176,
0x000000710108b2b0,sub_710108B2B0,92,
0x000000710108b30c,sub_710108B30C,956,
0x000000710108b30c,sub_710108B30C,956,_ZN4ksys3res15AttCheckAreaFan5parseERKNS0_8AttCheck9CreateArgE
0x000000710108b6c8,sub_710108B6C8,1192,
0x000000710108bb70,sub_710108BB70,908,
0x000000710108befc,sub_710108BEFC,1200,
0x000000710108c3ac,sub_710108C3AC,144,
0x000000710108c43c,sub_710108C43C,1068,
0x000000710108c43c,sub_710108C43C,1068,_ZN4ksys3res23AttCheckAreaCylinderFan5parseERKNS0_8AttCheck9CreateArgE
0x000000710108c868,sub_710108C868,1384,
0x000000710108cdd0,sub_710108CDD0,1060,
0x000000710108d1f4,sub_710108D1F4,820,
0x000000710108d1f4,sub_710108D1F4,820,_ZN4ksys3res15AttCheckAreaBox5parseERKNS0_8AttCheck9CreateArgE
0x000000710108d528,sub_710108D528,1056,
0x000000710108d948,sub_710108D948,1020,
0x000000710108dd44,sub_710108DD44,616,
0x000000710108dfac,sub_710108DFAC,84,
0x000000710108e000,sub_710108E000,304,
0x000000710108e130,sub_710108E130,856,
0x000000710108e488,sub_710108E488,8,
0x000000710108e000,sub_710108E000,304,_ZN4ksys3res21AttCheckEachOtherAreaC1ENS0_12AttCheckTypeE
0x000000710108e130,sub_710108E130,856,_ZN4ksys3res21AttCheckEachOtherArea5parseERKNS0_8AttCheck9CreateArgE
0x000000710108e488,sub_710108E488,8,_ZN4ksys3res8AttCheck5parseERKNS1_9CreateArgE
0x000000710108e490,sub_710108E490,40,
0x000000710108e4b8,sub_710108E4B8,1264,
0x000000710108e9a8,sub_710108E9A8,784,
0x000000710108ecb8,sub_710108ECB8,1500,
0x000000710108f294,_ZN2nn3nex23AccountManagementClient18UpdateAccountEmailEPNS0_19ProtocolCallContextERKNS0_6StringE,20,
0x000000710108f2a8,sub_710108F2A8,512,
0x000000710108f4a8,sub_710108F4A8,164,
0x000000710108f4a8,sub_710108F4A8,164,_ZN4ksys3res13AttCheckAngle5parseERKNS0_8AttCheck9CreateArgE
0x000000710108f54c,sub_710108F54C,28,
0x000000710108f568,sub_710108F568,56,
0x000000710108f5a0,sub_710108F5A0,344,
@ -87740,11 +87740,11 @@
0x000000710108f860,sub_710108F860,56,
0x000000710108f898,sub_710108F898,56,
0x000000710108f8d0,sub_710108F8D0,36,
0x000000710108f8f4,sub_710108F8F4,588,
0x000000710108fb40,sub_710108FB40,112,
0x000000710108fbb0,sub_710108FBB0,92,
0x000000710108fc0c,j__ZdlPv_1144,4,
0x000000710108fc10,nullsub_4458,4,
0x000000710108f8f4,sub_710108F8F4,588,_ZN4ksys3res8AttCheck4makeERKNS1_9CreateArgE
0x000000710108fb40,sub_710108FB40,112,_ZNK4ksys3res8AttCheck27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
0x000000710108fbb0,sub_710108FBB0,92,_ZNK4ksys3res8AttCheck18getRuntimeTypeInfoEv
0x000000710108fc0c,j__ZdlPv_1144,4,_ZN4ksys3res8AttCheckD0Ev
0x000000710108fc10,nullsub_4458,4,_ZN4ksys3res8AttCheck2m7Ev
0x000000710108fc14,sub_710108FC14,204,
0x000000710108fce0,sub_710108FCE0,92,
0x000000710108fd3c,sub_710108FD3C,72,
@ -87758,23 +87758,23 @@
0x0000007101090030,j__ZdlPv_1147,4,
0x0000007101090034,sub_7101090034,8,
0x000000710109003c,sub_710109003C,8,
0x0000007101090044,nullsub_4459,4,
0x0000007101090048,sub_7101090048,288,
0x0000007101090168,sub_7101090168,92,
0x00000071010901c4,sub_71010901C4,104,
0x000000710109022c,j__ZdlPv_1148,4,
0x0000007101090230,sub_7101090230,288,
0x0000007101090350,sub_7101090350,92,
0x00000071010903ac,sub_71010903AC,136,
0x0000007101090434,j__ZdlPv_1149,4,
0x0000007101090438,sub_7101090438,288,
0x0000007101090558,sub_7101090558,92,
0x00000071010905b4,sub_71010905B4,144,
0x0000007101090644,j__ZdlPv_1150,4,
0x0000007101090648,sub_7101090648,288,
0x0000007101090768,sub_7101090768,92,
0x00000071010907c4,sub_71010907C4,116,
0x0000007101090838,j__ZdlPv_1151,4,
0x0000007101090044,nullsub_4459,4,_ZN4ksys3res12AttCheckArea3m11Ev
0x0000007101090048,sub_7101090048,288,_ZNK4ksys3res18AttCheckAreaSphere27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
0x0000007101090168,sub_7101090168,92,_ZNK4ksys3res18AttCheckAreaSphere18getRuntimeTypeInfoEv
0x00000071010901c4,sub_71010901C4,104,_ZN4ksys3res18AttCheckAreaSphereD2Ev
0x000000710109022c,j__ZdlPv_1148,4,_ZN4ksys3res18AttCheckAreaSphereD0Ev
0x0000007101090230,sub_7101090230,288,_ZNK4ksys3res15AttCheckAreaFan27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
0x0000007101090350,sub_7101090350,92,_ZNK4ksys3res15AttCheckAreaFan18getRuntimeTypeInfoEv
0x00000071010903ac,sub_71010903AC,136,_ZN4ksys3res15AttCheckAreaFanD2Ev
0x0000007101090434,j__ZdlPv_1149,4,_ZN4ksys3res15AttCheckAreaFanD0Ev
0x0000007101090438,sub_7101090438,288,_ZNK4ksys3res23AttCheckAreaCylinderFan27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
0x0000007101090558,sub_7101090558,92,_ZNK4ksys3res23AttCheckAreaCylinderFan18getRuntimeTypeInfoEv
0x00000071010905b4,sub_71010905B4,144,_ZN4ksys3res23AttCheckAreaCylinderFanD2Ev
0x0000007101090644,j__ZdlPv_1150,4,_ZN4ksys3res23AttCheckAreaCylinderFanD0Ev
0x0000007101090648,sub_7101090648,288,_ZNK4ksys3res15AttCheckAreaBox27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
0x0000007101090768,sub_7101090768,92,_ZNK4ksys3res15AttCheckAreaBox18getRuntimeTypeInfoEv
0x00000071010907c4,sub_71010907C4,116,_ZN4ksys3res15AttCheckAreaBoxD2Ev
0x0000007101090838,j__ZdlPv_1151,4,_ZN4ksys3res15AttCheckAreaBoxD0Ev
0x000000710109083c,sub_710109083C,204,
0x0000007101090908,sub_7101090908,92,
0x0000007101090964,sub_7101090964,116,
@ -87800,7 +87800,7 @@
0x0000007101091134,j__ZdlPv_1158,4,
0x0000007101091138,sub_7101091138,204,
0x0000007101091204,sub_7101091204,92,
0x0000007101091260,sub_7101091260,52,
0x0000007101091260,sub_7101091260,52,_ZN4ksys3res8AttCheckD2Ev
0x0000007101091294,j__ZdlPv_1159,4,
0x0000007101091298,sub_7101091298,204,
0x0000007101091364,sub_7101091364,92,
@ -87826,30 +87826,30 @@
0x000000710109188c,j__ZdlPv_1169,4,
0x0000007101091890,nullsub_4462,4,
0x0000007101091894,j__ZdlPv_1170,4,
0x0000007101091898,sub_7101091898,180,
0x000000710109194c,sub_710109194C,132,
0x00000071010919d0,sub_71010919D0,260,
0x0000007101091ad4,sub_7101091AD4,56,
0x0000007101091b0c,sub_7101091B0C,56,
0x0000007101091b44,sub_7101091B44,56,
0x0000007101091b7c,sub_7101091B7C,56,
0x0000007101091bb4,sub_7101091BB4,164,
0x0000007101091c58,sub_7101091C58,132,
0x0000007101091cdc,sub_7101091CDC,132,
0x0000007101091d60,sub_7101091D60,132,
0x0000007101091de4,sub_7101091DE4,132,
0x0000007101091e68,sub_7101091E68,132,
0x0000007101091eec,sub_7101091EEC,132,
0x0000007101091f70,sub_7101091F70,132,
0x0000007101091ff4,sub_7101091FF4,132,
0x0000007101092078,sub_7101092078,132,
0x00000071010920fc,sub_71010920FC,132,
0x0000007101092180,sub_7101092180,132,
0x0000007101092204,sub_7101092204,340,
0x0000007101092358,sub_7101092358,364,
0x00000071010924c4,sub_71010924C4,280,
0x00000071010925dc,sub_71010925DC,140,
0x0000007101092668,sub_7101092668,140,
0x0000007101091898,sub_7101091898,180,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_12AttCheckLineEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x000000710109194c,sub_710109194C,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_14AttCheckScreenEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x00000071010919d0,sub_71010919D0,260,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_18AttCheckAreaSphereEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091ad4,sub_7101091AD4,56,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_15AttCheckAreaFanEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091b0c,sub_7101091B0C,56,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_23AttCheckAreaCylinderFanEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091b44,sub_7101091B44,56,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_15AttCheckAreaBoxEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091b7c,sub_7101091B7C,56,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_21AttCheckEachOtherAreaEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091bb4,sub_7101091BB4,164,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_13AttCheckAngleEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091c58,sub_7101091C58,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_14AttCheckWeightEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091cdc,sub_7101091CDC,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_17AttCheckRideHorseEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091d60,sub_7101091D60,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_17AttCheckRideSpaceEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091de4,sub_7101091DE4,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_12AttCheckSwimEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091e68,sub_7101091E68,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_13AttCheckCarryEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091eec,sub_7101091EEC,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_15AttCheckNoCarryEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091f70,sub_7101091F70,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_12AttCheckGrabEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101091ff4,sub_7101091FF4,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_22AttCheckBootFirstTowerEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101092078,sub_7101092078,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_19AttCheckFireContactEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x00000071010920fc,sub_71010920FC,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_19AttCheckCharacterOnEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101092180,sub_7101092180,132,_ZZN4ksys3res12_GLOBAL__N_1L11makeFactoryINS0_18AttCheckUnderWaterEEENS1_15AttCheckFactoryEPKcENUlNS0_12AttCheckTypeEPN4sead4HeapEE_8__invokeES7_SA_
0x0000007101092204,sub_7101092204,340,_ZN4ksys3res15AttCheckAreaFanCI2NS0_8AttCheckEENS0_12AttCheckTypeE
0x0000007101092358,sub_7101092358,364,_ZN4ksys3res23AttCheckAreaCylinderFanCI2NS0_8AttCheckEENS0_12AttCheckTypeE
0x00000071010924c4,sub_71010924C4,280,_ZN4ksys3res15AttCheckAreaBoxC2ENS0_12AttCheckTypeE
0x00000071010925dc,sub_71010925DC,140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys3res8AttCheckEE9isDerivedEPKNS0_9InterfaceE
0x0000007101092668,sub_7101092668,140,_ZNK4sead15RuntimeTypeInfo6DeriveIN4ksys3res12AttCheckAreaEE9isDerivedEPKNS0_9InterfaceE
0x00000071010926f4,sub_71010926F4,248,
0x00000071010927ec,ResourceBatcllist::m2,248,
0x00000071010928e4,sub_71010928E4,252,
@ -87901,8 +87901,8 @@
0x0000007101094cc0,j__ZdlPv_1172,4,
0x0000007101094cc4,_ZN4sead19FixedSafeStringBaseIcLi147EEaSERKNS_14SafeStringBaseIcEE,240,
0x0000007101094db4,sub_7101094DB4,372,
0x0000007101094f28,sub_7101094F28,132,
0x0000007101094fac,sub_7101094FAC,360,
0x0000007101094f28,sub_7101094F28,132,_ZN4ksys3res6AttPosC1Ev
0x0000007101094fac,sub_7101094FAC,360,_ZN4ksys3res6AttPos4initEPN3agl3utl13IParameterObjEPKcS7_S7_S7_
0x0000007101095114,sub_7101095114,396,
0x00000071010952a0,sub_71010952A0,536,
0x00000071010954b8,sub_71010954B8,624,

Can't render this file because it is too large.

View File

@ -12,7 +12,6 @@
#include "KingSystem/Resource/resResourceAnimInfo.h"
#include "KingSystem/Resource/resResourceArchive.h"
#include "KingSystem/Resource/resResourceAttClient.h"
#include "KingSystem/Resource/resResourceAttClientList.h"
#include "KingSystem/Resource/resResourceAwareness.h"
#include "KingSystem/Resource/resResourceBoneControl.h"
#include "KingSystem/Resource/resResourceChemical.h"

View File

@ -148,10 +148,10 @@ target_sources(uking PRIVATE
resResourceASResourceExtension.h
resResourceASSetting.cpp
resResourceASSetting.h
resResourceAttCheck.cpp
resResourceAttCheck.h
resResourceAttClient.cpp
resResourceAttClient.h
resResourceAttClientList.cpp
resResourceAttClientList.h
resResourceArchive.cpp
resResourceArchive.h
resResourceAwareness.cpp

View File

@ -0,0 +1,200 @@
#include "KingSystem/Resource/resResourceAttCheck.h"
namespace ksys::res {
void AttCheck::m4() {}
bool AttCheck::check() {
return true;
}
float AttCheck::m6() {
return -1.0;
}
bool AttCheckLine::parse(const CreateArg& arg) {
mRadius.init(0.0, "Radius", "半径", "Min=0,Max=10", &mObj);
mAsLineOfSight.init(false, "AsLineOfSight", "視線を透かすコリジョンを無視する", "", &mObj);
return true;
}
bool AttCheckArea::parse(const CreateArg& arg) {
mAttPos.init(&mObj);
mFromPlayer.init(false, "FromPlayer", "目標側基準", "", &mObj);
return true;
}
bool AttCheckAreaSphere::parse(const CreateArg& arg) {
mForceEditModelArea.init(false, "ForceEditModelArea", "(モデル範囲)強制編集", "", &mObj);
mRadius.init(0.0, "Radius", "(モデル範囲)半径", "Min=0.f,Max=100.f", &mObj);
mFixedRadius.init(-1.0, "FixedRadius", "(アテンション範囲)半径", "Min=-1.f,Max=100.f", &mObj);
mForceEditMargin.init(false, "ForceEditMargin", "(あそびの範囲)強制編集", "", &mObj);
mMarginRadius.init(1.0, "MarginRadius", "(あそびの範囲)半径", "Min=0.f,Max=100.f", &mObj);
return AttCheckArea::parse(arg);
}
bool AttCheckAreaFan::parse(const CreateArg& arg) {
mAngleCheckIgnoreLockOn.init(false, "AngleCheckIgnoreLockOn", "ロックオン時も角度チェック有効",
"", &mObj);
mForceEditModelArea.init(false, "ForceEditModelArea", "(モデル範囲)強制編集", "", &mObj);
mRadius.init(0.0, "Radius", "(モデル範囲)半径", "Min=0.f,Max=100.f", &mObj);
mTop.init(0.0, "Top", "(モデル範囲)上辺", "Min=-100.f,Max=100.f", &mObj);
mBottom.init(0.0, "Bottom", "(モデル範囲)下辺", "Min=-100.f,Max=100.f", &mObj);
mAngle.init(0.0, "Angle", "(アテンション範囲)角度", "Min=0.f,Max=3.1415f", &mObj);
mFixedRadius.init(-1.0, "FixedRadius", "(アテンション範囲)半径", "Min=-1.f,Max=100.f", &mObj);
mFixedTop.init(-1.0, "FixedTop", "(アテンション範囲)上辺", "Min=-1.f,Max=100.f", &mObj);
mFixedBottom.init(-1.0, "FixedBottom", "(アテンション範囲)下辺", "Min=-1.f,Max=100.f", &mObj);
mForceEditMargin.init(false, "ForceEditMargin", "(あそびの範囲)強制編集", "", &mObj);
mMarginRadius.init(1.0, "MarginRadius", "(あそびの範囲)半径", "Min=0.f,Max=100.f", &mObj);
mMarginTop.init(1.0, "MarginTop", "(あそびの範囲)上辺", "Min=0.f,Max=100.f", &mObj);
mMarginBottom.init(1.0, "MarginBottom", "(あそびの範囲)下辺", "Min=0.f,Max=100.f", &mObj);
return AttCheckArea::parse(arg);
}
bool AttCheckAreaCylinderFan::parse(const CreateArg& arg) {
mAngleCheckIgnoreLockOn.init(false, "AngleCheckIgnoreLockOn", "ロックオン時も角度チェック有効",
"", &mObj);
mForceEditModelArea.init(false, "ForceEditModelArea", "(モデル範囲)強制編集", "", &mObj);
mRadius.init(0.0, "Radius", "(モデル範囲)半径", "Min=0.f,Max=100.f", &mObj);
mTop.init(0.0, "Top", "(モデル範囲)上辺", "Min=-100.f,Max=100.f", &mObj);
mBottom.init(0.0, "Bottom", "(モデル範囲)下辺", "Min=-100.f,Max=100.f", &mObj);
mAngle.init(0.0, "Angle", "(アテンション範囲)角度", "Min=0.f,Max=3.1415f", &mObj);
mFixedRadiusCylinder.init(-1.0, "FixedRadiusCylinder", "(アテンション範囲)円柱の半径",
"Min=-1.f,Max=100.f", &mObj);
mFixedRadiusFan.init(-1.0, "FixedRadiusFan", "(アテンション範囲)扇形の半径",
"Min=-1.f,Max=100.f", &mObj);
mFixedTop.init(-1.0, "FixedTop", "(アテンション範囲)上辺", "Min=-1.f,Max=100.f", &mObj);
mFixedBottom.init(-1.0, "FixedBottom", "(アテンション範囲)下辺", "Min=-1.f,Max=100.f", &mObj);
mForceEditMargin.init(false, "ForceEditMargin", "(あそびの範囲)強制編集", "", &mObj);
mMarginRadiusCylinder.init(1.0, "MarginRadiusCylinder", "(あそびの範囲)円柱の半径",
"Min=0.f,Max=100.f", &mObj);
mMarginRadiusFan.init(1.0, "MarginRadiusFan", "(あそびの範囲)扇形の半径", "Min=0.f,Max=100.f",
&mObj);
mMarginTop.init(1.0, "MarginTop", "(あそびの範囲)上辺", "Min=0.f,Max=100.f", &mObj);
mMarginBottom.init(1.0, "MarginBottom", "(あそびの範囲)下辺", "Min=0.f,Max=100.f", &mObj);
return AttCheckArea::parse(arg);
}
bool AttCheckAreaBox::parse(const CreateArg& arg) {
mForceEditModelArea.init(false, "ForceEditModelArea", "(モデル範囲)強制編集", "", &mObj);
mMin.init(sead::Vector3f::zero, "Min", "(モデル範囲)最小", "Min=-100.f,Max=100.f", &mObj);
mMax.init(sead::Vector3f::zero, "Max", "(モデル範囲)最大", "Min=-100.f,Max=100.f", &mObj);
mFixedMin.init(-1 * sead::Vector3f::ones, "FixedMin", "(アテンション範囲)最小",
"Min=-1.f,Max=100.f", &mObj);
mFixedMax.init(-1 * sead::Vector3f::ones, "FixedMax", "(アテンション範囲)最大",
"Min=-1.f,Max=100.f", &mObj);
mForceEditMargin.init(false, "ForceEditMargin", "(あそびの範囲)強制編集", "", &mObj);
mMarginMin.init(sead::Vector3f::ones, "MarginMin", "(あそびの範囲)最小", "Min=-100.f,Max=100.f",
&mObj);
mMarginMax.init(sead::Vector3f::ones, "MarginMax", "(あそびの範囲)最大", "Min=-100.f,Max=100.f",
&mObj);
return AttCheckArea::parse(arg);
}
AttCheckEachOtherArea::AttCheckEachOtherArea(AttCheckType type) : AttCheck(type) {}
bool AttCheckEachOtherArea::parse(const CreateArg& arg) {
mForceEditModelArea.init(false, "ForceEditModelArea", "(モデル範囲)強制編集", "", &mObj);
mRadius.init(0.0, "Radius", "(モデル範囲)半径", "Min=0.f,Max=100.f", &mObj);
mTop.init(0.0, "Top", "(モデル範囲)上辺", "Min=-100.f,Max=100.f", &mObj);
mBottom.init(0.0, "Bottom", "(モデル範囲)下辺", "Min=-100.f,Max=100.f", &mObj);
mFixedRadius.init(-1.0, "FixedRadius", "(アテンション範囲)半径", "Min=-1.f,Max=100.f", &mObj);
mFixedTop.init(-1.0, "FixedTop", "(アテンション範囲)上辺", "Min=-1.f,Max=100.f", &mObj);
mFixedBottom.init(-1.0, "FixedBottom", "(アテンション範囲)下辺", "Min=-1.f,Max=100.f", &mObj);
mForceEditMargin.init(false, "ForceEditMargin", "(あそびの範囲)強制編集", "", &mObj);
mMarginRadius.init(1.0, "MarginRadius", "(あそびの範囲)半径", "Min=0.f,Max=100.f", &mObj);
mMarginTop.init(1.0, "MarginTop", "(あそびの範囲)上辺", "Min=0.f,Max=100.f", &mObj);
mMarginBottom.init(1.0, "MarginBottom", "(あそびの範囲)下辺", "Min=0.f,Max=100.f", &mObj);
mOffsetTop.init(0.0, "OffsetTop", "(アテンションを出される側の範囲オフセット)上辺",
"Min=-100,Max=100", &mObj);
mOffsetBottom.init(0.0, "OffsetBottom", "(アテンションを出される側の範囲オフセット)下辺",
"Min=-100,Max=100", &mObj);
return AttCheck::parse(arg);
}
bool AttCheckAngle::parse(const CreateArg& arg) {
mAttPos.init(&mObj);
mAngle.init(0.0, "Angle", "角度", "Min=0.f,Max=3.1415f", &mObj);
return AttCheck::parse(arg);
}
bool AttCheck::parse(const CreateArg& arg) {
return true;
}
namespace {
struct AttCheckFactory {
const char* name;
AttCheck* (*make)(AttCheckType type, sead::Heap* heap);
};
template <typename T>
static constexpr AttCheckFactory makeFactory(const char* name) {
AttCheckFactory factory{};
factory.name = name;
factory.make = [](AttCheckType type, sead::Heap* heap) -> AttCheck* {
return new (heap) T(type);
};
return factory;
}
sead::SafeArray<AttCheckFactory, 19> sFactories{{
makeFactory<AttCheckLine>("Line"),
makeFactory<AttCheckScreen>("Screen"),
makeFactory<AttCheckAreaSphere>("AreaSphere"),
makeFactory<AttCheckAreaFan>("AreaFan"),
makeFactory<AttCheckAreaCylinderFan>("AreaCylinderFan"),
makeFactory<AttCheckAreaBox>("AreaBox"),
makeFactory<AttCheckEachOtherArea>("EachOtherArea"),
makeFactory<AttCheckAngle>("Angle"),
makeFactory<AttCheckWeight>("Weight"),
makeFactory<AttCheckRideHorse>("RideHorse"),
makeFactory<AttCheckRideSpace>("RideSpace"),
makeFactory<AttCheckSwim>("Swim"),
makeFactory<AttCheckCarry>("Carry"),
makeFactory<AttCheckNoCarry>("NoCarry"),
makeFactory<AttCheckGrab>("Grab"),
makeFactory<AttCheckBootFirstTower>("BootFirstTower"),
makeFactory<AttCheckFireContact>("FireContact"),
makeFactory<AttCheckCharacterOn>("CharacterOn"),
makeFactory<AttCheckUnderWater>("UnderWater"),
}};
} // namespace
AttCheck* AttCheck::make(const CreateArg& arg) {
const auto Parameters = agl::utl::getResParameterObj(arg.res_list, "Parameters");
if (!Parameters)
return nullptr;
int type = sFactories.size();
const auto CheckType = agl::utl::getResParameter(Parameters, "CheckType");
const sead::SafeString check_type_str = CheckType.getData<char>();
for (int i = 0; i < sFactories.size(); ++i) {
if (check_type_str == sFactories[i].name) {
type = i;
break;
}
}
if (type == sFactories.size())
return nullptr;
auto* check = sFactories[type].make(AttCheckType(type), arg.heap);
if (!check)
return nullptr;
if (!check->init(arg)) {
delete check;
return nullptr;
}
return check;
}
bool AttCheck::init(const AttCheck::CreateArg& arg) {
mList.addObj(&mObj, "Parameters");
mUserData = arg.user_data;
return parse(arg);
}
} // namespace ksys::res

View File

@ -0,0 +1,326 @@
#pragma once
#include <agl/Utils/aglParameter.h>
#include <agl/Utils/aglParameterList.h>
#include <agl/Utils/aglParameterObj.h>
#include <prim/seadRuntimeTypeInfo.h>
#include "KingSystem/Resource/resResourceAttClient.h"
namespace ksys::res {
enum class AttCheckType {
Line,
Screen,
AreaSphere,
AreaFan,
AreaCylinderFan,
AreaBox,
EachOtherArea,
Angle,
Weight,
RideHorse,
RideSpace,
Swim,
Carry,
NoCarry,
Grab,
BootFirstTower,
FireContact,
CharacterOn,
UnderWater,
};
class AttCheck {
SEAD_RTTI_BASE(AttCheck)
public:
struct CreateArg {
agl::utl::ResParameterList res_list;
sead::Heap* heap;
void* user_data;
};
static AttCheck* make(const CreateArg& arg);
explicit AttCheck(AttCheckType type) : mType{type} {}
virtual ~AttCheck() = default;
// FIXME: signatures and names
virtual void m4();
virtual bool check();
virtual float m6();
virtual void m7() {}
virtual bool parse(const CreateArg& arg);
protected:
bool init(const CreateArg& arg);
void* mUserData = nullptr;
AttCheckType mType{};
agl::utl::ParameterObj mObj;
agl::utl::ParameterList mList;
};
class AttCheckLine : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckLine, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
bool parse(const CreateArg& arg) override;
private:
agl::utl::Parameter<float> mRadius;
agl::utl::Parameter<bool> mAsLineOfSight;
};
class AttCheckScreen : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckScreen, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
class AttCheckArea : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckArea, AttCheck)
public:
using AttCheck::AttCheck;
void m4() override;
bool check() override;
float m6() override;
void m7() override;
bool parse(const CreateArg& arg) override;
virtual bool m9() { return true; }
virtual float m10() { return 0; }
virtual void m11() {}
protected:
AttPos mAttPos;
agl::utl::Parameter<bool> mFromPlayer;
};
class AttCheckAreaSphere : public AttCheckArea {
SEAD_RTTI_OVERRIDE(AttCheckAreaSphere, AttCheckArea)
public:
using AttCheckArea::AttCheckArea;
bool parse(const CreateArg& arg) override;
bool m9() override;
float m10() override;
void m11() override;
private:
agl::utl::Parameter<bool> mForceEditModelArea;
agl::utl::Parameter<float> mRadius;
agl::utl::Parameter<float> mFixedRadius;
agl::utl::Parameter<bool> mForceEditMargin;
agl::utl::Parameter<float> mMarginRadius;
};
class AttCheckAreaFan : public AttCheckArea {
SEAD_RTTI_OVERRIDE(AttCheckAreaFan, AttCheckArea)
public:
using AttCheckArea::AttCheckArea;
bool parse(const CreateArg& arg) override;
bool m9() override;
float m10() override;
void m11() override;
private:
agl::utl::Parameter<bool> mAngleCheckIgnoreLockOn;
agl::utl::Parameter<bool> mForceEditModelArea;
agl::utl::Parameter<float> mRadius;
agl::utl::Parameter<float> mAngle;
agl::utl::Parameter<float> mTop;
agl::utl::Parameter<float> mBottom;
agl::utl::Parameter<float> mMarginRadius;
agl::utl::Parameter<float> mMarginTop;
agl::utl::Parameter<float> mMarginBottom;
agl::utl::Parameter<bool> mForceEditMargin;
agl::utl::Parameter<float> mFixedRadius;
agl::utl::Parameter<float> mFixedTop;
agl::utl::Parameter<float> mFixedBottom;
};
class AttCheckAreaCylinderFan : public AttCheckArea {
SEAD_RTTI_OVERRIDE(AttCheckAreaCylinderFan, AttCheckArea)
public:
using AttCheckArea::AttCheckArea;
bool parse(const CreateArg& arg) override;
bool m9() override;
float m10() override;
private:
agl::utl::Parameter<bool> mAngleCheckIgnoreLockOn;
agl::utl::Parameter<bool> mForceEditModelArea;
agl::utl::Parameter<float> mRadius;
agl::utl::Parameter<float> mTop;
agl::utl::Parameter<float> mBottom;
agl::utl::Parameter<float> mAngle;
agl::utl::Parameter<float> mFixedRadiusCylinder;
agl::utl::Parameter<float> mFixedRadiusFan;
agl::utl::Parameter<float> mFixedTop;
agl::utl::Parameter<float> mFixedBottom;
agl::utl::Parameter<bool> mForceEditMargin;
agl::utl::Parameter<float> mMarginRadiusCylinder;
agl::utl::Parameter<float> mMarginRadiusFan;
agl::utl::Parameter<float> mMarginTop;
agl::utl::Parameter<float> mMarginBottom;
};
class AttCheckAreaBox : public AttCheckArea {
SEAD_RTTI_OVERRIDE(AttCheckAreaBox, AttCheckArea)
public:
explicit AttCheckAreaBox(AttCheckType type) : AttCheckArea(type) {}
bool parse(const CreateArg& arg) override;
bool m9() override;
float m10() override;
void m11() override;
private:
agl::utl::Parameter<bool> mForceEditModelArea;
agl::utl::Parameter<sead::Vector3f> mMin;
agl::utl::Parameter<sead::Vector3f> mMax;
agl::utl::Parameter<sead::Vector3f> mFixedMin;
agl::utl::Parameter<sead::Vector3f> mFixedMax;
agl::utl::Parameter<bool> mForceEditMargin;
agl::utl::Parameter<sead::Vector3f> mMarginMin;
agl::utl::Parameter<sead::Vector3f> mMarginMax;
};
class AttCheckEachOtherArea : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckEachOtherArea, AttCheck)
public:
explicit AttCheckEachOtherArea(AttCheckType type);
void m4() override;
bool check() override;
float m6() override;
void m7() override;
bool parse(const CreateArg& arg) override;
private:
agl::utl::Parameter<bool> mForceEditModelArea;
agl::utl::Parameter<float> mRadius;
agl::utl::Parameter<float> mTop;
agl::utl::Parameter<float> mBottom;
agl::utl::Parameter<bool> mForceEditMargin;
agl::utl::Parameter<float> mMarginRadius;
agl::utl::Parameter<float> mMarginTop;
agl::utl::Parameter<float> mMarginBottom;
agl::utl::Parameter<float> mFixedRadius;
agl::utl::Parameter<float> mFixedTop;
agl::utl::Parameter<float> mFixedBottom;
agl::utl::Parameter<float> mOffsetTop;
agl::utl::Parameter<float> mOffsetBottom;
};
class AttCheckAngle : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckAngle, AttCheck)
public:
using AttCheck::AttCheck;
void m4() override;
bool check() override;
bool parse(const CreateArg& arg) override;
private:
AttPos mAttPos;
agl::utl::Parameter<float> mAngle;
};
class AttCheckWeight : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckWeight, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
class AttCheckRideHorse : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckRideHorse, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
class AttCheckRideSpace : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckRideSpace, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
class AttCheckSwim : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckSwim, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
class AttCheckCarry : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckCarry, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
class AttCheckNoCarry : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckNoCarry, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
class AttCheckGrab : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckGrab, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
class AttCheckBootFirstTower : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckBootFirstTower, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
class AttCheckFireContact : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckFireContact, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
class AttCheckCharacterOn : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckCharacterOn, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
class AttCheckUnderWater : public AttCheck {
SEAD_RTTI_OVERRIDE(AttCheckUnderWater, AttCheck)
public:
using AttCheck::AttCheck;
bool check() override;
};
} // namespace ksys::res

View File

@ -1,3 +1,22 @@
#include "KingSystem/Resource/resResourceAttClient.h"
namespace ksys::res {} // namespace ksys::res
namespace ksys::res {
AttClient::~AttClient() {
// TODO
mChecks.freeBuffer();
}
void AttClient::doCreate_(u8*, u32, sead::Heap*) {}
AttPos::AttPos() = default;
void AttPos::init(agl::utl::IParameterObj* obj, const char* node_key, const char* offset_key,
const char* rotate_key, const char* y_rot_only_key) {
node.init("", node_key, "ノード", "", obj);
offset.init(sead::Vector3f::zero, offset_key, "オフセット", "Min=-100.f,Max=100.f", obj);
rotate.init(sead::Vector3f::zero, rotate_key, "回転", "Min=-3.1415f,Max=3.1415f", obj);
y_rot_only.init(false, y_rot_only_key, "Y軸回転のみ有効", "", obj);
}
} // namespace ksys::res

View File

@ -1,6 +1,7 @@
#pragma once
#include <agl/Utils/aglParameter.h>
#include <agl/Utils/aglParameterList.h>
#include <agl/Utils/aglParameterObj.h>
#include <container/seadBuffer.h>
#include <prim/seadSafeString.h>
@ -11,6 +12,22 @@
namespace ksys::res {
struct AttPos {
AttPos();
void init(agl::utl::IParameterObj* obj, const char* node_key = "Node",
const char* offset_key = "Offset", const char* rotate_key = "Rotate",
const char* y_rot_only_key = "YRotOnly");
// TODO: more functions
agl::utl::Parameter<sead::SafeString> node;
agl::utl::Parameter<sead::Vector3f> offset;
agl::utl::Parameter<sead::Vector3f> rotate;
agl::utl::Parameter<bool> y_rot_only;
};
KSYS_CHECK_SIZE_NX150(AttPos, 0x98);
class AttClient : public ParamIO, public Resource {
SEAD_RTTI_OVERRIDE(AttClient, Resource)
public:
@ -25,7 +42,7 @@ public:
const sead::SafeString& getPriorityTypeStr() const { return mPriorityTypeStr; }
const sead::Buffer<Check*>& getChecks() const { return mChecks; }
void doCreate_(u8*, u32, sead::Heap*) override {}
void doCreate_(u8*, u32, sead::Heap*) override;
bool needsParse() const override { return true; }
bool parse_(u8* data, size_t size, sead::Heap* heap) override;
@ -42,4 +59,44 @@ private:
};
KSYS_CHECK_SIZE_NX150(AttClient, 0x428);
class AttClientList : public ParamIO, public Resource {
SEAD_RTTI_OVERRIDE(AttClientList, Resource)
public:
struct Client {
const char* getFileName() const { return file_name.ref().cstr(); }
agl::utl::Parameter<sead::SafeString> name;
agl::utl::Parameter<sead::SafeString> file_name;
agl::utl::Parameter<bool> is_valid;
agl::utl::ParameterObj obj;
AttClient* client;
};
KSYS_CHECK_SIZE_NX150(Client, 0xa8);
AttClientList() : ParamIO("atcllist", 0) {}
~AttClientList() override;
AttClientList(const AttClientList&) = delete;
auto operator=(const AttClientList&) = delete;
const AttPos& getAttPos() const { return mAttPos; }
bool isForceEdit() const { return mForceEdit.ref(); }
const sead::Buffer<Client>& getClients() const { return mClients; }
void addClient_(s32 index, AttClient* client) { mClients[index].client = client; }
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;
bool finishParsing_() override;
bool m7_() override;
private:
agl::utl::ParameterList mAttClientsList;
agl::utl::ParameterObj mAttPosObj;
AttPos mAttPos;
agl::utl::Parameter<bool> mForceEdit;
sead::Buffer<Client> mClients;
};
KSYS_CHECK_SIZE_NX150(AttClientList, 0x3f0);
} // namespace ksys::res

View File

@ -1 +0,0 @@
#include "KingSystem/Resource/resResourceAttClientList.h"

View File

@ -1,65 +0,0 @@
#pragma once
#include <agl/Utils/aglParameter.h>
#include <agl/Utils/aglParameterList.h>
#include <agl/Utils/aglParameterObj.h>
#include <container/seadBuffer.h>
#include "KingSystem/Resource/resResource.h"
#include "KingSystem/Utils/ParamIO.h"
#include "KingSystem/Utils/Types.h"
namespace ksys::res {
class AttClient;
class AttClientList : public ParamIO, public Resource {
SEAD_RTTI_OVERRIDE(AttClientList, Resource)
public:
struct AttPos {
AttPos();
agl::utl::Parameter<sead::SafeString> _0;
agl::utl::Parameter<sead::Vector3f> _28;
agl::utl::Parameter<sead::Vector3f> _50;
agl::utl::Parameter<bool> _78;
};
KSYS_CHECK_SIZE_NX150(AttPos, 0x98);
struct Client {
const char* getFileName() const { return file_name.ref().cstr(); }
agl::utl::Parameter<sead::SafeString> name;
agl::utl::Parameter<sead::SafeString> file_name;
agl::utl::Parameter<bool> is_valid;
agl::utl::ParameterObj obj;
AttClient* client;
};
KSYS_CHECK_SIZE_NX150(Client, 0xa8);
AttClientList() : ParamIO("atcllist", 0) {}
~AttClientList() override;
AttClientList(const AttClientList&) = delete;
auto operator=(const AttClientList&) = delete;
const AttPos& getAttPos() const { return mAttPos; }
bool isForceEdit() const { return mForceEdit.ref(); }
const sead::Buffer<Client>& getClients() const { return mClients; }
void addClient_(s32 index, AttClient* client) { mClients[index].client = client; }
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;
bool finishParsing_() override;
bool m7_() override;
private:
agl::utl::ParameterList mAttClientsList;
agl::utl::ParameterObj mAttPosObj;
AttPos mAttPos;
agl::utl::Parameter<bool> mForceEdit;
sead::Buffer<Client> mClients;
};
KSYS_CHECK_SIZE_NX150(AttClientList, 0x3f0);
} // namespace ksys::res