OdysseyDecomp/lib/al/include/Library/Collision/CollisionDirector.h
MonsterDruide1 69d81ebd91
Custom format validation (Linting) (#17)
* Add script to verify formatting
* Add newline to end of files
* Add `#pragma once` to top of headers
* Add own header to includes at top of source files
* Remove useless namespace qualifiers
* Sort visibility modifiers correctly
* Format `#include`s in three blocks
* Remove `;` after namespaces
* Add for custom style checking to `lint`-GitHub-Action
* Format: No "// 0x" offset comments
* Remove macros from padding
2024-01-07 00:33:09 +01:00

64 lines
2.5 KiB
C++

#pragma once
#include <container/seadPtrArray.h>
#include <math/seadVector.h>
#include <prim/seadDelegate.h>
#include "Library/Execute/IUseExecutor.h"
namespace al {
class ICollisionPartsKeeper;
class CollisionPartsKeeperOctree;
class CollisionPartsKeeperPtrArray;
class CollisionPartsFilterBase;
class TriangleFilterBase;
class Strike;
struct HitInfo;
struct ArrowHitInfo;
struct DiskHitInfo;
struct SphereHitInfo;
class CollisionParts;
class ExecuteDirector;
class CollisionDirector : public IUseExecutor {
public:
CollisionDirector(ExecuteDirector* executeDirector);
void setPartsKeeper(ICollisionPartsKeeper* partsKeeper);
void endInit();
void setPartsFilter(const CollisionPartsFilterBase*);
void setTriFilter(const TriangleFilterBase*);
bool checkStrikePoint(const sead::Vector3f&, HitInfo*);
bool checkStrikeSphere(const sead::Vector3f&, f32, bool, const sead::Vector3f&);
bool checkStrikeArrow(const sead::Vector3f&, const sead::Vector3f&);
bool checkStrikeSphereForPlayer(const sead::Vector3f&, f32);
bool checkStrikeDisk(const sead::Vector3f&, f32, f32, const sead::Vector3f&);
sead::PtrArray<ArrowHitInfo>* getStrikeArrowInfo(u32 index);
u32 getStrikeArrowInfoNum();
sead::PtrArray<DiskHitInfo>* getStrikeSphereInfo(u32 index);
u32 getStrikeSphereInfoNum();
sead::PtrArray<SphereHitInfo>* getStrikeDiskInfo(u32 index);
u32 getStrikeDiskInfoNum();
void getSphereHitInfoArrayForCollider(SphereHitInfo** infoArray, u32* count);
void getDiskHitInfoArrayForCollider(DiskHitInfo** infoArray, u32* count);
void execute();
void searchCollisionPartsWithSphere(const sead::Vector3f&, f32,
sead::IDelegate1<CollisionParts*>&,
const CollisionPartsFilterBase*);
void validateCollisionPartsPtrArray(sead::PtrArray<CollisionParts>*);
void invalidateCollisionPartsPtrArray();
sead::PtrArray<CollisionParts>* getCollisionPartsPtrArray();
private:
ICollisionPartsKeeper* mActivePartsKeeper;
CollisionPartsKeeperOctree* mRootOctree;
CollisionPartsKeeperPtrArray* mCollisionPartsKeeperPtrArray;
CollisionPartsFilterBase* mCollisionPartsFilterBase;
TriangleFilterBase* mTriangleFilterBase;
sead::PtrArray<ArrowHitInfo>* mStrikeArrowHitInfos;
sead::PtrArray<DiskHitInfo>* mStrikeDiskHitInfos;
sead::PtrArray<SphereHitInfo>* mStrikeSphereHitInfos;
SphereHitInfo* mSphereHitArray;
DiskHitInfo* mDiskHitArray;
};
} // namespace al