1#pragma once
2
3#include <container/seadTList.h>
4#include <math/seadMatrix.h>
5#include <math/seadVector.h>
6
7namespace al {
8class KCollisionServer;
9class LiveActor;
10class HitSensor;
11
12class CollisionParts {
13public:
14 const LiveActor* getConnectedHost() const;
15 void calcForceMovePower(sead::Vector3f*, const sead::Vector3f&) const;
16 void calcForceRotatePower(sead::Quatf*) const;
17
18 const sead::Matrix34f& getBaseMtx() const { return mBaseMtx; }
19
20 const sead::Matrix34f& getBaseInvMtx() const { return mBaseInvMtx; }
21
22 const sead::Matrix34f& getPrevBaseMtx() const { return mPrevBaseMtx; }
23
24 KCollisionServer* getKCollisionServer() const { return mKCollisionServer; }
25
26 s32 get_15c() const { return _15c; }
27
28 bool isMoving() const { return mIsMoving; }
29
30 const HitSensor* getConnectedSensor() const { return mConnectedSensor; }
31
32private:
33 void* unk[2];
34 CollisionParts* _10; // self-reference
35 sead::TList<CollisionParts*>* mPartsList;
36 sead::Matrix34f* mJointMtx;
37 sead::Matrix34f mSyncMtx;
38 sead::Matrix34f mBaseMtx;
39 sead::Matrix34f mBaseInvMtx;
40 sead::Matrix34f mPrevBaseMtx;
41 sead::Matrix34f mPrevBaseInvMtx;
42 sead::Vector3f mMtxScaleVec;
43 f32 mMtxScale;
44 f32 mInvMtxScale;
45 s32 mPriority;
46 KCollisionServer* mKCollisionServer;
47 HitSensor* mConnectedSensor;
48 const char* mSpecialPurpose;
49 const char* mOptionalPurpose;
50 sead::Vector3f _150; // same as mMtxScaleVec?
51 s32 _15c;
52 f32 mBoundingSphereRange;
53 f32 mBaseMtxScale;
54 bool mIsValidatedByUser;
55 bool mIsValidatedBySystem;
56 bool _16a;
57 bool _16b;
58 bool _16c;
59 bool mIsMoving;
60 bool _16e;
61};
62
63} // namespace al
64