1#pragma once
2
3#include <math/seadMatrix.h>
4#include <math/seadVector.h>
5
6#include "Library/Collision/IUseCollision.h"
7#include "Library/HostIO/HioNode.h"
8
9namespace al {
10class SphereInterpolator;
11struct SphereHitInfo;
12class CollisionPartsFilterBase;
13class TriangleFilterBase;
14class CollisionDirector;
15class Triangle;
16
17bool isWallPolygon(const sead::Vector3f&, const sead::Vector3f&);
18bool isFloorPolygon(const sead::Vector3f&, const sead::Vector3f&);
19bool isCeilingPolygon(const sead::Vector3f&, const sead::Vector3f&);
20
21class Collider : public HioNode, public IUseCollision {
22public:
23 Collider(CollisionDirector*, const sead::Matrix34f*, const sead::Vector3f*,
24 const sead::Vector3f*, f32, f32, u32);
25 void calcCheckPos(sead::Vector3f*);
26 void calcMovePowerByContact(sead::Vector3f*, const sead::Vector3f&);
27 void clear();
28 void clearContactPlane();
29 void clearStoredPlaneNum();
30 sead::Vector3f collide(const sead::Vector3f&);
31 void findCollidePos(s32*, SphereInterpolator*, SphereHitInfo*, u32);
32 Triangle* getPlane(s32);
33 void getRecentOnGroundNormal(u32);
34 void obtainMomentFixReaction(SphereHitInfo*, sead::Vector3f*, sead::Vector3f*, bool, u32);
35 void onInvalidate();
36 void preCollide(SphereInterpolator*, sead::Vector3f*, f32*, const sead::Vector3f&,
37 SphereHitInfo*, u32);
38 void setCollisionPartsFilter(const CollisionPartsFilterBase*);
39 void setTriangleFilter(const TriangleFilterBase*);
40 void storeContactPlane(SphereHitInfo*);
41 void storeCurrentHitInfo(SphereHitInfo*, u32);
42 void updateRecentOnGroundInfo();
43
44 CollisionDirector* getCollisionDirector() const override;
45
46 void setRadius(f32 radius) { mRadius = radius; };
47
48 s32 get_48() const { return _48; }
49
50 s32 get_4c() const { return _4c; }
51
52private:
53 void* unknown[0x6];
54 f32 mRadius;
55 f32 mOffsetY;
56 void* unknown2;
57 s32 _48;
58 s32 _4c;
59 void* unknown3[0x47];
60};
61
62static_assert(sizeof(Collider) == 0x288);
63} // namespace al
64