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
10namespace al {
11class ICollisionPartsKeeper;
12class CollisionPartsKeeperOctree;
13class CollisionPartsKeeperPtrArray;
14class CollisionPartsFilterBase;
15class TriangleFilterBase;
16class Strike;
17struct HitInfo;
18struct ArrowHitInfo;
19struct DiskHitInfo;
20struct SphereHitInfo;
21class CollisionParts;
22class ExecuteDirector;
23
24class CollisionDirector : public HioNode, public IUseExecutor {
25public:
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
52private:
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