| 1 | #pragma once |
| 2 | |
| 3 | #include <container/seadPtrArray.h> |
| 4 | #include <math/seadVector.h> |
| 5 | #include <prim/seadDelegate.h> |
| 6 | |
| 7 | #include "Library/Execute/IUseExecutor.h" |
| 8 | #include "Library/HostIO/HioNode.h" |
| 9 | |
| 10 | namespace al { |
| 11 | class ICollisionPartsKeeper; |
| 12 | class CollisionPartsKeeperOctree; |
| 13 | class CollisionPartsKeeperPtrArray; |
| 14 | class CollisionPartsFilterBase; |
| 15 | class TriangleFilterBase; |
| 16 | class Strike; |
| 17 | struct HitInfo; |
| 18 | struct ArrowHitInfo; |
| 19 | struct DiskHitInfo; |
| 20 | struct SphereHitInfo; |
| 21 | class CollisionParts; |
| 22 | class ExecuteDirector; |
| 23 | |
| 24 | class CollisionDirector : public HioNode, public IUseExecutor { |
| 25 | public: |
| 26 | CollisionDirector(ExecuteDirector* executeDirector); |
| 27 | void setPartsKeeper(ICollisionPartsKeeper* partsKeeper); |
| 28 | void endInit(); |
| 29 | void setPartsFilter(const CollisionPartsFilterBase*); |
| 30 | void setTriFilter(const TriangleFilterBase*); |
| 31 | bool checkStrikePoint(const sead::Vector3f&, HitInfo*); |
| 32 | bool checkStrikeSphere(const sead::Vector3f&, f32, bool, const sead::Vector3f&); |
| 33 | bool checkStrikeArrow(const sead::Vector3f&, const sead::Vector3f&); |
| 34 | bool checkStrikeSphereForPlayer(const sead::Vector3f&, f32); |
| 35 | bool checkStrikeDisk(const sead::Vector3f&, f32, f32, const sead::Vector3f&); |
| 36 | sead::PtrArray<ArrowHitInfo>* getStrikeArrowInfo(u32 index); |
| 37 | u32 getStrikeArrowInfoNum(); |
| 38 | sead::PtrArray<DiskHitInfo>* getStrikeSphereInfo(u32 index); |
| 39 | u32 getStrikeSphereInfoNum(); |
| 40 | sead::PtrArray<SphereHitInfo>* getStrikeDiskInfo(u32 index); |
| 41 | u32 getStrikeDiskInfoNum(); |
| 42 | void getSphereHitInfoArrayForCollider(SphereHitInfo** infoArray, u32* count); |
| 43 | void getDiskHitInfoArrayForCollider(DiskHitInfo** infoArray, u32* count); |
| 44 | void execute(); |
| 45 | void searchCollisionPartsWithSphere(const sead::Vector3f&, f32, |
| 46 | sead::IDelegate1<CollisionParts*>&, |
| 47 | const CollisionPartsFilterBase*); |
| 48 | void validateCollisionPartsPtrArray(sead::PtrArray<CollisionParts>*); |
| 49 | void invalidateCollisionPartsPtrArray(); |
| 50 | sead::PtrArray<CollisionParts>* getCollisionPartsPtrArray(); |
| 51 | |
| 52 | private: |
| 53 | ICollisionPartsKeeper* mActivePartsKeeper; |
| 54 | CollisionPartsKeeperOctree* mRootOctree; |
| 55 | CollisionPartsKeeperPtrArray* mCollisionPartsKeeperPtrArray; |
| 56 | CollisionPartsFilterBase* mCollisionPartsFilterBase; |
| 57 | TriangleFilterBase* mTriangleFilterBase; |
| 58 | sead::PtrArray<ArrowHitInfo>* mStrikeArrowHitInfos; |
| 59 | sead::PtrArray<SphereHitInfo>* mStrikeSphereHitInfos; |
| 60 | sead::PtrArray<DiskHitInfo>* mStrikeDiskHitInfos; |
| 61 | SphereHitInfo* mSphereHitArray; |
| 62 | DiskHitInfo* mDiskHitArray; |
| 63 | }; |
| 64 | } // namespace al |
| 65 | |