summaryrefslogtreecommitdiff
path: root/src/KingSystem/Physics/System/physContactInfoParam.cpp
blob: a7b3e69e060f51b87a694e1459d9a5d8445f9941 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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));

    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