diff options
| author | Léo Lam <leo@leolam.fr> | 2021-04-21 18:37:20 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2021-04-21 18:49:25 +0200 |
| commit | 1631e2aae326499a1eba3ca88b54241db13efa97 (patch) | |
| tree | a86060af04f64fc4d9847f3a2f6a03c6d1e3235c /src | |
| parent | f59bc21b3a9a30665eae6964327838106bf7119d (diff) | |
ksys/phys: Add ContactInfoParam
Diffstat (limited to 'src')
| -rw-r--r-- | src/KingSystem/Physics/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/KingSystem/Physics/System/physContactInfoParam.cpp | 50 | ||||
| -rw-r--r-- | src/KingSystem/Physics/System/physContactInfoParam.h | 40 |
3 files changed, 92 insertions, 0 deletions
diff --git a/src/KingSystem/Physics/CMakeLists.txt b/src/KingSystem/Physics/CMakeLists.txt index 3f551742..e6f1c01b 100644 --- a/src/KingSystem/Physics/CMakeLists.txt +++ b/src/KingSystem/Physics/CMakeLists.txt @@ -9,6 +9,8 @@ target_sources(uking PRIVATE RigidBody/physEdgeRigidBodyParam.h SupportBone/physSupportBoneParam.cpp SupportBone/physSupportBoneParam.h + System/physContactInfoParam.cpp + System/physContactInfoParam.h System/physDefines.cpp System/physDefines.h System/physParamSet.cpp diff --git a/src/KingSystem/Physics/System/physContactInfoParam.cpp b/src/KingSystem/Physics/System/physContactInfoParam.cpp new file mode 100644 index 00000000..e7f13709 --- /dev/null +++ b/src/KingSystem/Physics/System/physContactInfoParam.cpp @@ -0,0 +1,50 @@ +#include "KingSystem/Physics/System/physContactInfoParam.h" + +namespace ksys::phys { + +ContactInfoParam::ContactInfoParam() + : contact_point_info_num(0, "contact_point_info_num", &obj), + collision_info_num(0, "collision_info_num", &obj) {} + +ContactInfoParam::~ContactInfoParam() { + contact_point_info.freeBuffer(); + collision_info.freeBuffer(); +} + +bool ContactInfoParam::parse(const agl::utl::ResParameterList& res_list, sead::Heap* heap) { + if (!res_list || res_list.getResParameterObjNum() < 1) + return false; + + obj.applyResParameterObj(res_list.getResParameterObj(0), nullptr); + + const int num_contact_point_info = *contact_point_info_num; + const int num_collision_info = *collision_info_num; + + if (num_contact_point_info > 0) { + contact_point_info.allocBufferAssert(num_contact_point_info, heap); + for (int i = 0; i < num_contact_point_info; ++i) { + addObj(&contact_point_info[i], + sead::FormatFixedSafeString<32>("ContactPointInfo_%d", i)); + } + } + + if (num_collision_info > 0) { + collision_info.allocBufferAssert(num_collision_info, heap); + for (int i = 0; i < num_collision_info; ++i) { + addObj(&collision_info[i], sead::FormatFixedSafeString<32>("CollisionInfo_%d", i)); + } + } + + applyResParameterList(res_list); + return true; +} + +ContactPointInfoParam::ContactPointInfoParam() + : name(sead::SafeString::cEmptyString, "name", this), + type(sead::SafeString::cEmptyString, "type", this), num(0x80, "num", this) {} + +CollisionInfoParam::CollisionInfoParam() + : name(sead::SafeString::cEmptyString, "name", this), + type(sead::SafeString::cEmptyString, "type", this) {} + +} // namespace ksys::phys diff --git a/src/KingSystem/Physics/System/physContactInfoParam.h b/src/KingSystem/Physics/System/physContactInfoParam.h new file mode 100644 index 00000000..b6c60095 --- /dev/null +++ b/src/KingSystem/Physics/System/physContactInfoParam.h @@ -0,0 +1,40 @@ +#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 ContactPointInfoParam : agl::utl::ParameterObj { + ContactPointInfoParam(); + + agl::utl::Parameter<sead::FixedSafeString<32>> name; + agl::utl::Parameter<sead::FixedSafeString<32>> type; + agl::utl::Parameter<int> num; +}; + +struct CollisionInfoParam : agl::utl::ParameterObj { + CollisionInfoParam(); + + agl::utl::Parameter<sead::FixedSafeString<32>> name; + agl::utl::Parameter<sead::FixedSafeString<32>> type; +}; + +struct ContactInfoParam : agl::utl::ParameterList { + ContactInfoParam(); + ~ContactInfoParam() override; + ContactInfoParam(const ContactInfoParam&) = delete; + auto operator=(const ContactInfoParam&) = delete; + + bool parse(const agl::utl::ResParameterList& res_list, sead::Heap* heap); + + sead::Buffer<ContactPointInfoParam> contact_point_info; + sead::Buffer<CollisionInfoParam> collision_info; + agl::utl::ParameterObj obj; + agl::utl::Parameter<int> contact_point_info_num; + agl::utl::Parameter<int> collision_info_num; +}; + +} // namespace ksys::phys |
