1#pragma once
2
3#include <math/seadMatrix.h>
4#include <prim/seadBitFlag.h>
5
6#include "Library/Collision/IUseCollision.h"
7#include "Library/HostIO/HioNode.h"
8
9namespace al {
10class CollisionPartsFilterBase;
11struct HitInfo;
12class SpherePoseInterpolator;
13} // namespace al
14class CollidedShapeResult;
15class CollisionShapeKeeper;
16
17class PlayerCollider : public al::HioNode, public al::IUseCollision {
18public:
19 PlayerCollider(al::CollisionDirector*, const sead::Matrix34f*, const sead::Vector3f*,
20 const sead::Vector3f*, bool);
21 void onInvalidate();
22 void setCollisionShapeKeeper(CollisionShapeKeeper*);
23 void calcBoundingRadius(f32*) const;
24 void setCollisionShapeScale(f32);
25 void onCutCollideAffectDir(const sead::Vector3f&);
26 void offCutCollideAffectDir();
27 void clear();
28 void calcCheckPos(sead::Vector3f*) const;
29 void resetPose(const sead::Quatf&);
30 sead::Vector3f collide(const sead::Vector3f&);
31 bool calcMovePowerByContact(sead::Vector3f*, const sead::Vector3f&);
32 void moveCollide(sead::Vector3f*, f32*, sead::Quatf*, const sead::Vector3f&, f32,
33 const sead::Quatf&, const sead::Vector3f&, f32, bool);
34 bool findCollidePos(al::SpherePoseInterpolator*);
35 void calcResultVec(sead::Vector3f*, sead::Vector3f*, const sead::Vector3f&);
36 void calcGroundArrowAverage(bool*, sead::Vector3f*, bool*, sead::Vector3f*,
37 const CollisionShapeKeeper*);
38 void calcResultVecArrow(sead::BitFlag32*, sead::Vector3f*, sead::Vector3f*, sead::Vector3f*,
39 sead::Vector3f*, const CollidedShapeResult*);
40 void calcResultVecSphere(sead::BitFlag32*, sead::Vector3f*, sead::Vector3f*, sead::Vector3f*,
41 sead::Vector3f*, const CollidedShapeResult*);
42 void calcResultVecDisk(sead::BitFlag32*, sead::Vector3f*, sead::Vector3f*, sead::Vector3f*,
43 sead::Vector3f*, const CollidedShapeResult*);
44 void collectHitInfoArray(const al::HitInfo&, s32);
45 bool isNeedWallBorderCheck(const al::HitInfo&) const;
46 void setWallBorderCheckTypeNone();
47 void setWallBorderCheckTypeNoFace();
48 void setWallBorderCheckTypeAll();
49 void setCollisionPartsFilter(const al::CollisionPartsFilterBase*);
50 void calcBoundingCenter(sead::Vector3f*) const;
51 void validateCorrectMovePartsCheck();
52 al::CollisionDirector* getCollisionDirector() const override;
53
54 f32 get_70() const { return _70; }
55
56 const sead::Vector3f& getCollidedGroundNormal() const { return mCollidedGroundNormal; }
57
58private:
59 void* filler[13];
60 f32 _70;
61 void* filler2[37];
62 s32 _1a0;
63 sead::Vector3f mCollidedGroundNormal;
64 void* filler3;
65};
66
67static_assert(sizeof(PlayerCollider) == 0x1B8);
68