mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
108 lines
3.8 KiB
C++
108 lines
3.8 KiB
C++
#pragma once
|
|
|
|
#include <container/seadPtrArray.h>
|
|
#include <math/seadMatrix.h>
|
|
#include <prim/seadBitFlag.h>
|
|
|
|
#include "Library/Collision/IUseCollision.h"
|
|
#include "Library/HostIO/HioNode.h"
|
|
|
|
namespace al {
|
|
class CollisionPartsFilterBase;
|
|
struct HitInfo;
|
|
class SpherePoseInterpolator;
|
|
} // namespace al
|
|
class CollidedShapeResult;
|
|
class CollisionShapeKeeper;
|
|
class CollisionMultiShape;
|
|
|
|
class PlayerCollider : public al::HioNode, public al::IUseCollision {
|
|
public:
|
|
PlayerCollider(al::CollisionDirector*, const sead::Matrix34f*, const sead::Vector3f*,
|
|
const sead::Vector3f*, bool);
|
|
void onInvalidate();
|
|
void setCollisionShapeKeeper(CollisionShapeKeeper*);
|
|
void calcBoundingRadius(f32*) const;
|
|
void setCollisionShapeScale(f32);
|
|
void onCutCollideAffectDir(const sead::Vector3f&);
|
|
void offCutCollideAffectDir();
|
|
void clear();
|
|
void calcCheckPos(sead::Vector3f*) const;
|
|
void resetPose(const sead::Quatf&);
|
|
sead::Vector3f collide(const sead::Vector3f&);
|
|
bool calcMovePowerByContact(sead::Vector3f*, const sead::Vector3f&);
|
|
void moveCollide(sead::Vector3f*, f32*, sead::Quatf*, const sead::Vector3f&, f32,
|
|
const sead::Quatf&, const sead::Vector3f&, f32, bool);
|
|
bool findCollidePos(al::SpherePoseInterpolator*);
|
|
void calcResultVec(sead::Vector3f*, sead::Vector3f*, const sead::Vector3f&);
|
|
void calcGroundArrowAverage(bool*, sead::Vector3f*, bool*, sead::Vector3f*,
|
|
const CollisionShapeKeeper*);
|
|
void calcResultVecArrow(sead::BitFlag32*, sead::Vector3f*, sead::Vector3f*, sead::Vector3f*,
|
|
sead::Vector3f*, const CollidedShapeResult*);
|
|
void calcResultVecSphere(sead::BitFlag32*, sead::Vector3f*, sead::Vector3f*, sead::Vector3f*,
|
|
sead::Vector3f*, const CollidedShapeResult*);
|
|
void calcResultVecDisk(sead::BitFlag32*, sead::Vector3f*, sead::Vector3f*, sead::Vector3f*,
|
|
sead::Vector3f*, const CollidedShapeResult*);
|
|
void collectHitInfoArray(const al::HitInfo&, s32);
|
|
bool isNeedWallBorderCheck(const al::HitInfo&) const;
|
|
void setWallBorderCheckTypeNone();
|
|
void setWallBorderCheckTypeNoFace();
|
|
void setWallBorderCheckTypeAll();
|
|
void setCollisionPartsFilter(const al::CollisionPartsFilterBase*);
|
|
void calcBoundingCenter(sead::Vector3f*) const;
|
|
void validateCorrectMovePartsCheck();
|
|
al::CollisionDirector* getCollisionDirector() const override;
|
|
|
|
f32 get_70() const { return _70; }
|
|
|
|
const sead::Vector3f& getCollidedGroundNormal() const { return mCollidedGroundNormal; }
|
|
|
|
void set1b0(f32 value) { _1b0 = value; }
|
|
|
|
private:
|
|
al::CollisionDirector* mCollisionDirector;
|
|
const sead::Matrix34f* mMtxPtr;
|
|
const sead::Vector3f* mTransPtr;
|
|
const sead::Vector3f* mGravityPtr;
|
|
sead::Vector3f mTrans;
|
|
f32 mSize;
|
|
sead::Matrix34f mMtx;
|
|
al::HitInfo* _68;
|
|
f32 _70;
|
|
al::HitInfo* _78;
|
|
f32 _7c;
|
|
al::HitInfo* _88;
|
|
f32 _8c;
|
|
sead::Vector3f mCollidedFixReaction;
|
|
bool _a0;
|
|
bool _a1;
|
|
sead::Vector3f mCollisionHitNormal;
|
|
sead::Vector3f mCollisionHitPos;
|
|
s32 mTimeInAir;
|
|
sead::Matrix34f mCollidePosMtx;
|
|
CollisionShapeKeeper* mCollisionShapeKeeper;
|
|
f32 mCollisionShapeScale;
|
|
CollisionMultiShape* mCollisionMultiShape;
|
|
s32 _108;
|
|
bool mIsInFastMoveCollisionArea;
|
|
bool mIsValidGroundSupport;
|
|
bool mIsDuringRecovery;
|
|
sead::Vector3f mCutCollideAffectDir;
|
|
s32 mWallBorderCheckType;
|
|
const al::CollisionPartsFilterBase* mCollisionPartsFilter;
|
|
sead::PtrArray<al::HitInfo> _128[3];
|
|
al::HitInfo* _158;
|
|
u32 _160;
|
|
s32 _164;
|
|
sead::PtrArray<al::HitInfo> _168;
|
|
s32 _178;
|
|
f32* _180;
|
|
s32 _188;
|
|
f32* _190;
|
|
sead::Vector3f _198;
|
|
sead::Vector3f mCollidedGroundNormal;
|
|
f32 _1b0;
|
|
};
|
|
|
|
static_assert(sizeof(PlayerCollider) == 0x1b8);
|