diff options
| author | Léo Lam <leo@leolam.fr> | 2021-04-22 18:37:38 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2021-04-22 18:39:28 +0200 |
| commit | f6e4643808bdec31d2e2bf1b3d3a0ce0b456e348 (patch) | |
| tree | 2482f9e995675c9ca9217085b22cbad0d8aaf08b /src | |
| parent | cbe711e595128b2f571ce8315b409875344042cf (diff) | |
ksys/phys: Add RigidBodySetParam
Diffstat (limited to 'src')
| -rw-r--r-- | src/KingSystem/Physics/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/KingSystem/Physics/RigidBody/physRigidBodySetParam.cpp | 42 | ||||
| -rw-r--r-- | src/KingSystem/Physics/RigidBody/physRigidBodySetParam.h | 36 |
3 files changed, 80 insertions, 0 deletions
diff --git a/src/KingSystem/Physics/CMakeLists.txt b/src/KingSystem/Physics/CMakeLists.txt index 9ee3d5d6..7504bda4 100644 --- a/src/KingSystem/Physics/CMakeLists.txt +++ b/src/KingSystem/Physics/CMakeLists.txt @@ -9,6 +9,8 @@ target_sources(uking PRIVATE RigidBody/physEdgeRigidBodyParam.h RigidBody/physRigidBodyParam.cpp RigidBody/physRigidBodyParam.h + RigidBody/physRigidBodySetParam.cpp + RigidBody/physRigidBodySetParam.h SupportBone/physSupportBoneParam.cpp SupportBone/physSupportBoneParam.h System/physCharacterControllerParam.cpp diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodySetParam.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodySetParam.cpp new file mode 100644 index 00000000..7d35ee00 --- /dev/null +++ b/src/KingSystem/Physics/RigidBody/physRigidBodySetParam.cpp @@ -0,0 +1,42 @@ +#include "KingSystem/Physics/RigidBody/physRigidBodySetParam.h" +#include "KingSystem/Physics/RigidBody/physRigidBodyParam.h" + +namespace ksys::phys { + +RigidBodySetParam::RigidBodySetParam() + : set_name(sead::SafeString::cEmptyString, "set_name", &obj), + type(sead::SafeString::cEmptyString, "type", &obj), num(1, "num", &obj), + setup_file_path(sead::SafeString::cEmptyString, "setup_file_path", &obj) {} + +RigidBodySetParam::~RigidBodySetParam() { + rigid_bodies.freeBuffer(); +} + +bool RigidBodySetParam::parse(agl::utl::ResParameterList res_list, sead::Heap* heap) { + if (!res_list) + return false; + + obj.applyResParameterObj(res_list.getResParameterObj(0), nullptr); + + if (*type == "from_shape_type") + type_val = Type::FromShapeType; + else + type_val = Type::Other; + + const int num_bodies = *num; + if (num_bodies == 0 || res_list.getResParameterListNum() != num_bodies) + return false; + + rigid_bodies.allocBufferAssert(num_bodies, heap); + for (int i = 0; i < num_bodies; ++i) { + rigid_bodies[i].parse(res_list.getResParameterList(i), heap); + } + + return true; +} + +int RigidBodySetParam::getNumRigidBodies() const { + return *num; +} + +} // namespace ksys::phys diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodySetParam.h b/src/KingSystem/Physics/RigidBody/physRigidBodySetParam.h new file mode 100644 index 00000000..536f3c4c --- /dev/null +++ b/src/KingSystem/Physics/RigidBody/physRigidBodySetParam.h @@ -0,0 +1,36 @@ +#pragma once + +#include <agl/Utils/aglParameter.h> +#include <agl/Utils/aglParameterList.h> +#include <agl/Utils/aglParameterObj.h> +#include <container/seadBuffer.h> + +namespace ksys::phys { + +struct RigidBodyParam; + +struct RigidBodySetParam : agl::utl::ParameterList { + enum class Type { + Invalid = 0, + FromShapeType = 1, + Other = 2, + }; + + RigidBodySetParam(); + ~RigidBodySetParam() override; + RigidBodySetParam(const RigidBodySetParam&) = delete; + auto operator=(const RigidBodySetParam&) = delete; + + bool parse(agl::utl::ResParameterList res_list, sead::Heap* heap); + int getNumRigidBodies() const; + + Type type_val = Type::Invalid; + agl::utl::ParameterObj obj; + agl::utl::Parameter<sead::SafeString> set_name; + agl::utl::Parameter<sead::SafeString> type; + agl::utl::Parameter<int> num; + agl::utl::Parameter<sead::SafeString> setup_file_path; + sead::Buffer<RigidBodyParam> rigid_bodies; +}; + +} // namespace ksys::phys |
