diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 55573207..8c316ff6 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -94676,57 +94676,57 @@ 0x000000710127e42c,Element::rtti2,92, 0x000000710127e488,sub_710127E488,288, 0x000000710127e5a8,sub_710127E5A8,92, -0x000000710127e604,sub_710127E604,308, -0x000000710127e738,sub_710127E738,296, -0x000000710127e860,sub_710127E860,36, -0x000000710127e884,sub_710127E884,680, +0x000000710127e604,sub_710127E604,308,_ZN4ksys3chm4RootC1Ev +0x000000710127e738,sub_710127E738,296,_ZN4ksys3chm4RootD1Ev +0x000000710127e860,sub_710127E860,36,_ZN4ksys3chm4RootD0Ev +0x000000710127e884,sub_710127E884,680,_ZN4ksys3chm4Root5parseERKN3agl3utl16ResParameterListEPN4sead4HeapE 0x000000710127eb2c,sub_710127EB2C,784,_ZN4ksys3chm5RigidC1Ev -0x000000710127ee3c,sub_710127EE3C,8, -0x000000710127ee44,sub_710127EE44,32, -0x000000710127ee64,sub_710127EE64,36, -0x000000710127ee88,sub_710127EE88,36, -0x000000710127eeac,sub_710127EEAC,32, -0x000000710127eecc,sub_710127EECC,36, -0x000000710127eef0,sub_710127EEF0,32, -0x000000710127ef10,sub_710127EF10,40, -0x000000710127ef38,sub_710127EF38,32, -0x000000710127ef58,sub_710127EF58,36, -0x000000710127ef7c,sub_710127EF7C,36, -0x000000710127efa0,sub_710127EFA0,32, -0x000000710127efc0,sub_710127EFC0,36, -0x000000710127efe4,sub_710127EFE4,36, -0x000000710127f008,sub_710127F008,32, -0x000000710127f028,sub_710127F028,52, -0x000000710127f05c,sub_710127F05C,36, -0x000000710127f080,sub_710127F080,36, -0x000000710127f0a4,sub_710127F0A4,36, -0x000000710127f0c8,sub_710127F0C8,36, -0x000000710127f0ec,sub_710127F0EC,36, -0x000000710127f110,sub_710127F110,36, -0x000000710127f134,sub_710127F134,36, -0x000000710127f158,sub_710127F158,8, -0x000000710127f160,sub_710127F160,32, -0x000000710127f180,sub_710127F180,36, -0x000000710127f1a4,sub_710127F1A4,36, -0x000000710127f1c8,sub_710127F1C8,32, -0x000000710127f1e8,sub_710127F1E8,36, -0x000000710127f20c,sub_710127F20C,32, -0x000000710127f22c,sub_710127F22C,40, -0x000000710127f254,sub_710127F254,32, -0x000000710127f274,sub_710127F274,36, -0x000000710127f298,sub_710127F298,36, -0x000000710127f2bc,sub_710127F2BC,32, -0x000000710127f2dc,sub_710127F2DC,36, -0x000000710127f300,sub_710127F300,36, -0x000000710127f324,sub_710127F324,32, -0x000000710127f344,sub_710127F344,56, -0x000000710127f37c,sub_710127F37C,36, -0x000000710127f3a0,sub_710127F3A0,36, -0x000000710127f3c4,sub_710127F3C4,36, -0x000000710127f3e8,sub_710127F3E8,36, -0x000000710127f40c,sub_710127F40C,36, -0x000000710127f430,sub_710127F430,36, -0x000000710127f454,sub_710127F454,36, +0x000000710127ee3c,sub_710127EE3C,8,_ZNK4ksys3chm4Root12getNumShapesEv +0x000000710127ee44,sub_710127EE44,32,_ZNK4ksys3chm4Root8getShapeEi +0x000000710127ee64,sub_710127EE64,36,_ZNK4ksys3chm4Root20isRigidAttribute0SetEi +0x000000710127ee88,sub_710127EE88,36,_ZNK4ksys3chm4Root20isRigidAttribute1SetEi +0x000000710127eeac,sub_710127EEAC,32,_ZNK4ksys3chm4Root15getRigidSetNameEi +0x000000710127eecc,sub_710127EECC,36,_ZNK4ksys3chm4Root20isRigidAttribute2SetEi +0x000000710127eef0,sub_710127EEF0,32,_ZNK4ksys3chm4Root12getRigidNameEi +0x000000710127ef10,sub_710127EF10,40,_ZNK4ksys3chm4Root19rigidHasBurnOutTimeEi +0x000000710127ef38,sub_710127EF38,32,_ZNK4ksys3chm4Root19getRigidBurnOutTimeEi +0x000000710127ef58,sub_710127EF58,36,_ZNK4ksys3chm4Root20isRigidAttribute3SetEi +0x000000710127ef7c,sub_710127EF7C,36,_ZNK4ksys3chm4Root21isRigidAttribute15SetEi +0x000000710127efa0,sub_710127EFA0,32,_ZNK4ksys3chm4Root14getRigidVolumeEi +0x000000710127efc0,sub_710127EFC0,36,_ZNK4ksys3chm4Root20isRigidAttribute9SetEi +0x000000710127efe4,sub_710127EFE4,36,_ZNK4ksys3chm4Root21isRigidAttribute10SetEi +0x000000710127f008,sub_710127F008,32,_ZNK4ksys3chm4Root12getRigidMassEi +0x000000710127f028,sub_710127F028,52,_ZNK4ksys3chm4Root24isRigidAttribute6Or14SetEi +0x000000710127f05c,sub_710127F05C,36,_ZNK4ksys3chm4Root20isRigidAttribute5SetEi +0x000000710127f080,sub_710127F080,36,_ZNK4ksys3chm4Root20isRigidAttribute4SetEi +0x000000710127f0a4,sub_710127F0A4,36,_ZNK4ksys3chm4Root21isRigidAttribute11SetEi +0x000000710127f0c8,sub_710127F0C8,36,_ZNK4ksys3chm4Root21isRigidAttribute12SetEi +0x000000710127f0ec,sub_710127F0EC,36,_ZNK4ksys3chm4Root21isRigidAttribute13SetEi +0x000000710127f110,sub_710127F110,36,_ZNK4ksys3chm4Root21isRigidAttribute14SetEi +0x000000710127f134,sub_710127F134,36,_ZNK4ksys3chm4Root21isRigidAttribute16SetEi +0x000000710127f158,sub_710127F158,8,_ZThn80_NK4ksys3chm4Root12getNumShapesEv +0x000000710127f160,sub_710127F160,32,_ZThn80_NK4ksys3chm4Root8getShapeEi +0x000000710127f180,sub_710127F180,36,_ZThn80_NK4ksys3chm4Root20isRigidAttribute0SetEi +0x000000710127f1a4,sub_710127F1A4,36,_ZThn80_NK4ksys3chm4Root20isRigidAttribute1SetEi +0x000000710127f1c8,sub_710127F1C8,32,_ZThn80_NK4ksys3chm4Root15getRigidSetNameEi +0x000000710127f1e8,sub_710127F1E8,36,_ZThn80_NK4ksys3chm4Root20isRigidAttribute2SetEi +0x000000710127f20c,sub_710127F20C,32,_ZThn80_NK4ksys3chm4Root12getRigidNameEi +0x000000710127f22c,sub_710127F22C,40,_ZThn80_NK4ksys3chm4Root19rigidHasBurnOutTimeEi +0x000000710127f254,sub_710127F254,32,_ZThn80_NK4ksys3chm4Root19getRigidBurnOutTimeEi +0x000000710127f274,sub_710127F274,36,_ZThn80_NK4ksys3chm4Root20isRigidAttribute3SetEi +0x000000710127f298,sub_710127F298,36,_ZThn80_NK4ksys3chm4Root21isRigidAttribute15SetEi +0x000000710127f2bc,sub_710127F2BC,32,_ZThn80_NK4ksys3chm4Root14getRigidVolumeEi +0x000000710127f2dc,sub_710127F2DC,36,_ZThn80_NK4ksys3chm4Root20isRigidAttribute9SetEi +0x000000710127f300,sub_710127F300,36,_ZThn80_NK4ksys3chm4Root21isRigidAttribute10SetEi +0x000000710127f324,sub_710127F324,32,_ZThn80_NK4ksys3chm4Root12getRigidMassEi +0x000000710127f344,sub_710127F344,56,_ZThn80_NK4ksys3chm4Root24isRigidAttribute6Or14SetEi +0x000000710127f37c,sub_710127F37C,36,_ZThn80_NK4ksys3chm4Root20isRigidAttribute5SetEi +0x000000710127f3a0,sub_710127F3A0,36,_ZThn80_NK4ksys3chm4Root20isRigidAttribute4SetEi +0x000000710127f3c4,sub_710127F3C4,36,_ZThn80_NK4ksys3chm4Root21isRigidAttribute11SetEi +0x000000710127f3e8,sub_710127F3E8,36,_ZThn80_NK4ksys3chm4Root21isRigidAttribute12SetEi +0x000000710127f40c,sub_710127F40C,36,_ZThn80_NK4ksys3chm4Root21isRigidAttribute13SetEi +0x000000710127f430,sub_710127F430,36,_ZThn80_NK4ksys3chm4Root21isRigidAttribute14SetEi +0x000000710127f454,sub_710127F454,36,_ZThn80_NK4ksys3chm4Root21isRigidAttribute16SetEi 0x000000710127f478,sub_710127F478,56,_ZN4ksys3chm5RigidD2Ev 0x000000710127f4b0,j__ZdlPv_1277,4,_ZN4ksys3chm5RigidD0Ev 0x000000710127f4b4,EventMgr1Struct1::ctor,200, diff --git a/src/KingSystem/Chemical/CMakeLists.txt b/src/KingSystem/Chemical/CMakeLists.txt index 2a1e3268..69886275 100644 --- a/src/KingSystem/Chemical/CMakeLists.txt +++ b/src/KingSystem/Chemical/CMakeLists.txt @@ -1,6 +1,8 @@ target_sources(uking PRIVATE - chmShape.cpp - chmShape.h chmRigid.cpp chmRigid.h + chmRoot.cpp + chmRoot.h + chmShape.cpp + chmShape.h ) diff --git a/src/KingSystem/Chemical/chmRoot.cpp b/src/KingSystem/Chemical/chmRoot.cpp new file mode 100644 index 00000000..f0ccc1d8 --- /dev/null +++ b/src/KingSystem/Chemical/chmRoot.cpp @@ -0,0 +1,34 @@ +#include "KingSystem/Chemical/chmRoot.h" + +namespace ksys::chm { + +Root::Root() : res_shape_num(0, "res_shape_num", "シェイプ", "Min=0 ,Max=10", &chemical_header) { + addObj(&chemical_header, "chemical_header"); + addList(&chemical_body, "chemical_body"); +} + +Root::~Root() { + shapes.freeBuffer(); + rigids.freeBuffer(); +} + +void Root::parse(const agl::utl::ResParameterList& res_list, sead::Heap* heap) { + const auto header_obj = agl::utl::getResParameterObj(res_list, "chemical_header"); + chemical_header.applyResParameterObj(header_obj, nullptr); + + if (res_shape_num.ref() != 0) { + shapes.allocBufferAssert(res_shape_num.ref(), heap); + rigids.allocBufferAssert(res_shape_num.ref(), heap); + } + + const auto body_list = agl::utl::getResParameterList(res_list, "chemical_body"); + for (auto it = shapes.begin(), end = shapes.end(); it != end; ++it) { + chemical_body.addObj(std::addressof(*it), + sead::FormatFixedSafeString<16>("shape_%02d", it.getIndex())); + chemical_body.addObj(&rigids[it.getIndex()], + sead::FormatFixedSafeString<16>("rigid_c_%02d", it.getIndex())); + } + chemical_body.applyResParameterList(body_list); +} + +} // namespace ksys::chm diff --git a/src/KingSystem/Chemical/chmRoot.h b/src/KingSystem/Chemical/chmRoot.h new file mode 100644 index 00000000..09c0c1f9 --- /dev/null +++ b/src/KingSystem/Chemical/chmRoot.h @@ -0,0 +1,116 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include "KingSystem/Chemical/chmRigid.h" +#include "KingSystem/Chemical/chmShape.h" +#include "KingSystem/Utils/Types.h" + +namespace ksys::chm { + +class IRoot { +public: + virtual int getNumShapes() const = 0; + virtual const IShape& getShape(int idx) const = 0; + + virtual bool isRigidAttribute0Set(int idx) const = 0; + virtual bool isRigidAttribute1Set(int idx) const = 0; + virtual const sead::SafeString& getRigidSetName(int idx) const = 0; + virtual bool isRigidAttribute2Set(int idx) const = 0; + virtual const sead::SafeString& getRigidName(int idx) const = 0; + virtual bool rigidHasBurnOutTime(int idx) const = 0; + virtual float getRigidBurnOutTime(int idx) const = 0; + virtual bool isRigidAttribute3Set(int idx) const = 0; + virtual bool isRigidAttribute15Set(int idx) const = 0; + virtual float getRigidVolume(int idx) const = 0; + virtual bool isRigidAttribute9Set(int idx) const = 0; + virtual bool isRigidAttribute10Set(int idx) const = 0; + virtual float getRigidMass(int idx) const = 0; + virtual bool isRigidAttribute6Or14Set(int idx) const = 0; + virtual bool isRigidAttribute5Set(int idx) const = 0; + virtual bool isRigidAttribute4Set(int idx) const = 0; + virtual bool isRigidAttribute11Set(int idx) const = 0; + virtual bool isRigidAttribute12Set(int idx) const = 0; + virtual bool isRigidAttribute13Set(int idx) const = 0; + virtual bool isRigidAttribute14Set(int idx) const = 0; + virtual bool isRigidAttribute16Set(int idx) const = 0; +}; + +class Root : public agl::utl::ParameterList, public sead::hostio::Node, public IRoot { +public: + Root(); + ~Root() override; + + void parse(const agl::utl::ResParameterList& res_list, sead::Heap* heap); + + int getNumShapes() const override { return shapes.size(); } + const IShape& getShape(int idx) const override { return shapes[idx]; } + bool isRigidAttribute0Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 0); + } + bool isRigidAttribute1Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 1); + } + const sead::SafeString& getRigidSetName(int idx) const override { + return rigids[idx].getRigidSetName(); + } + bool isRigidAttribute2Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 2); + } + const sead::SafeString& getRigidName(int idx) const override { + return rigids[idx].getRigidName(); + } + bool rigidHasBurnOutTime(int idx) const override { return rigids[idx].getBurnOutTime() > 0.0; } + float getRigidBurnOutTime(int idx) const override { return rigids[idx].getBurnOutTime(); } + bool isRigidAttribute3Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 3); + } + bool isRigidAttribute15Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 15); + } + float getRigidVolume(int idx) const override { return rigids[idx].getVolume(); } + bool isRigidAttribute9Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 9); + } + bool isRigidAttribute10Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 10); + } + float getRigidMass(int idx) const override { return rigids[idx].getMass(); } + bool isRigidAttribute6Or14Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 6) || isRigidAttribute14Set(idx); + } + bool isRigidAttribute5Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 5); + } + bool isRigidAttribute4Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 4); + } + bool isRigidAttribute11Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 11); + } + bool isRigidAttribute12Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 12); + } + bool isRigidAttribute13Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 13); + } + bool isRigidAttribute14Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 14); + } + bool isRigidAttribute16Set(int idx) const override { + return rigids[idx].getAttribute() & (1 << 16); + } + +private: + agl::utl::ParameterObj chemical_header; + agl::utl::Parameter res_shape_num; + agl::utl::ParameterList chemical_body; + sead::Buffer shapes; + sead::Buffer rigids; +}; + +} // namespace ksys::chm