| 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 | |
| 9 | namespace al { |
| 10 | class SphereInterpolator; |
| 11 | struct SphereHitInfo; |
| 12 | class CollisionPartsFilterBase; |
| 13 | class TriangleFilterBase; |
| 14 | class CollisionDirector; |
| 15 | class Triangle; |
| 16 | |
| 17 | bool isWallPolygon(const sead::Vector3f&, const sead::Vector3f&); |
| 18 | bool isFloorPolygon(const sead::Vector3f&, const sead::Vector3f&); |
| 19 | bool isCeilingPolygon(const sead::Vector3f&, const sead::Vector3f&); |
| 20 | |
| 21 | class Collider : public HioNode, public IUseCollision { |
| 22 | public: |
| 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 | |
| 52 | private: |
| 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 | |
| 62 | static_assert(sizeof(Collider) == 0x288); |
| 63 | } // namespace al |
| 64 | |