blob: d0af662a03a65443488a5da795d361fb3f182b75 (
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
119
120
|
#pragma once
#include <container/seadBuffer.h>
#include <resource/seadResource.h>
#include <utility/aglParameter.h>
#include <utility/aglParameterIO.h>
#include <utility/aglParameterList.h>
#include <utility/aglParameterObj.h>
#include "KingSystem/Utils/Types.h"
namespace ksys::phys {
class SupportBoneResource : public sead::DirectResource, agl::utl::IParameterIO {
public:
struct Bone : public agl::utl::ParameterObj {
~Bone();
agl::utl::Parameter<sead::FixedSafeString<64>> name;
};
struct ConnectionLinear : public agl::utl::ParameterObj {
agl::utl::Parameter<int> bone_attribute; // TODO enum?
agl::utl::Parameter<sead::Vector2f> slope_intercept;
};
struct ConnectionCurve : public agl::utl::ParameterObj {
~ConnectionCurve() = default;
agl::utl::Parameter<int> bone_attribute; // TODO enum?
agl::utl::Parameter<bool> constant_in;
agl::utl::Parameter<bool> constant_out;
agl::utl::Parameter<sead::Vector4f> key0;
agl::utl::Parameter<sead::Vector4f> key1;
agl::utl::Parameter<sead::Vector4f> key2;
};
struct OutputSingle : public agl::utl::ParameterObj {
agl::utl::Parameter<int> connection;
agl::utl::Parameter<float> weight;
};
struct OutputDouble : public agl::utl::ParameterObj {
~OutputDouble() = default;
agl::utl::Parameter<int> connection_0;
agl::utl::Parameter<float> weight_0;
agl::utl::Parameter<int> connection_1;
agl::utl::Parameter<float> weight_1;
};
struct BaseBone : public agl::utl::ParameterObj {
BaseBone();
~BaseBone();
void postRead_() override;
agl::utl::Parameter<int> bone;
agl::utl::Parameter<sead::Vector3f> aim;
agl::utl::Parameter<sead::Vector3f> up;
agl::utl::Parameter<int> space;
agl::utl::Parameter<sead::Quatf> base_rotate;
agl::utl::Parameter<sead::Vector3f> base_translate;
sead::Quatf reverse_rotate;
sead::Vector3<float> side;
};
struct MainBone : public BaseBone {
MainBone();
};
struct SupportBone : public BaseBone {
SupportBone();
~SupportBone() = default;
agl::utl::Parameter<int> bendH;
agl::utl::Parameter<int> bendV;
agl::utl::Parameter<int> roll;
agl::utl::Parameter<int> translateX;
agl::utl::Parameter<int> translateY;
agl::utl::Parameter<int> translateZ;
};
SupportBoneResource();
~SupportBoneResource();
void freeBuffers();
int getSupportBoneIndexByName(const sead::SafeString& name);
virtual void doCreate_(u8* data, u32 actualFileSize, sead::Heap* heap);
bool init(agl::utl::ResParameterArchive archive, sead::Heap* heap);
float getInterpolatedConnectionCurve(u32 index, float lookup);
float somethingGetLinearConnection(u32 a2, float a3);
private:
agl::utl::ParameterObj mSupportBoneHeader;
agl::utl::ParameterList mSupportBoneData;
agl::utl::Parameter<int> mBoneNum;
agl::utl::ParameterList mBoneList;
sead::Buffer<SupportBoneResource::Bone> boneBuffer;
agl::utl::Parameter<int> mConnectionLinearNum;
agl::utl::ParameterList mConnectionLinearList;
sead::Buffer<SupportBoneResource::ConnectionLinear> mConnectionLinearBuffer;
agl::utl::Parameter<int> mConnectionCurveNum;
agl::utl::ParameterList mConnectionCurveList;
sead::Buffer<SupportBoneResource::ConnectionCurve> mConnectionCurveBuffer;
agl::utl::Parameter<int> mOutputSingleNum;
agl::utl::ParameterList mOutputSingleList;
sead::Buffer<SupportBoneResource::OutputSingle> mOutputSingleBuffer;
agl::utl::Parameter<int> mOutputDoubleNum;
agl::utl::ParameterList mOutputDoubleList;
sead::Buffer<SupportBoneResource::OutputDouble> mOutputDoubleBuffer;
agl::utl::Parameter<int> mMainBoneNum;
agl::utl::ParameterList mMainBoneList;
sead::Buffer<SupportBoneResource::MainBone> mMainBoneBuffer;
agl::utl::Parameter<int> mSupportBoneNum;
agl::utl::ParameterList mSupportBoneList;
sead::Buffer<SupportBoneResource::SupportBone> mSupportBoneBuffer;
};
KSYS_CHECK_SIZE_NX150(SupportBoneResource, 0x5B0);
} // namespace ksys::phys
|