blob: 48dd7a4ba64703f6f6601f6f47658b0397c2ebac (
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#pragma once
#include <container/seadBuffer.h>
#include <hostio/seadHostIONode.h>
#include <utility/aglParameter.h>
#include <utility/aglParameterIO.h>
#include <utility/aglParameterList.h>
#include <utility/aglParameterObj.h>
#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;
Root(const Root&) = delete;
auto operator=(const Root&) = delete;
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<u32> res_shape_num;
agl::utl::ParameterList chemical_body;
sead::Buffer<Shape> shapes;
sead::Buffer<Rigid> rigids;
};
} // namespace ksys::chm
|