1#pragma once
2
3#include <math/seadMatrix.h>
4#include <math/seadVector.h>
5
6namespace al {
7class AreaObj;
8class AreaObjFilterBase;
9class AreaObjFindCallBack;
10class AreaObjGroup;
11class IUseAreaObj;
12
13class AreaObjFilterBase {
14public:
15 virtual bool isValidArea(AreaObj* areaObj) const = 0;
16};
17
18class AreaObjFindCallBack {
19public:
20 virtual void findArea(const AreaObj* areaObj) = 0;
21};
22
23AreaObj* tryFindAreaObj(const IUseAreaObj* areaUser, const char* name,
24 const sead::Vector3f& position);
25AreaObj* tryFindAreaObjWithFilter(const IUseAreaObj* areaUser, const char* name,
26 const sead::Vector3f& position, AreaObjFilterBase* filter);
27bool tryFindAreaObjAll(const IUseAreaObj* areaUser, const char* name,
28 const sead::Vector3f& position, AreaObjFindCallBack* callBack);
29AreaObjGroup* tryFindAreaObjGroup(const IUseAreaObj* areaUser, const char* name);
30bool isInAreaObj(const AreaObjGroup* group, const sead::Vector3f& position);
31AreaObj* tryGetAreaObj(const AreaObjGroup* group, const sead::Vector3f& position);
32bool isInAreaPos(const AreaObj* areaObj, const sead::Vector3f& position);
33bool isInAreaObj(const IUseAreaObj* areaUser, const char* name, const sead::Vector3f& position);
34bool isExistAreaObj(const IUseAreaObj* areaUser, const char* name);
35bool isInDeathArea(const IUseAreaObj* areaUser, const sead::Vector3f& position);
36bool isInWaterArea(const IUseAreaObj* areaUser, const sead::Vector3f& position);
37bool isInPlayerControlOffArea(const IUseAreaObj* areaUser, const sead::Vector3f& position);
38s32 calcAreaObjNum(const IUseAreaObj* areaUser, const char* name);
39f32 calcWaterSinkDepth(const IUseAreaObj* areaUser, const sead::Vector3f& position);
40bool tryGetAreaObjArg(s32* outArg, const AreaObj* areaObj, const char* key);
41bool tryGetAreaObjArg(f32* outArg, const AreaObj* areaObj, const char* key);
42bool tryGetAreaObjArg(bool* outArg, const AreaObj* areaObj, const char* key);
43bool tryGetAreaObjStringArg(const char** outArg, const AreaObj* areaObj, const char* key);
44const sead::Matrix34f& getAreaObjBaseMtx(const AreaObj* areaObj);
45const sead::Vector3f& getAreaObjScale(const AreaObj* areaObj);
46void getAreaObjDirFront(sead::Vector3f* outFrontDir, const AreaObj* areaObj);
47void getAreaObjDirUp(sead::Vector3f* outUpDir, const AreaObj* areaObj);
48void getAreaObjDirSide(sead::Vector3f* outSideDir, const AreaObj* areaObj);
49void calcNearestAreaObjEdgePos(sead::Vector3f* outNearestEdgePos, const AreaObj* areaObj,
50 const sead::Vector3f& position);
51void calcNearestAreaObjEdgePosTopY(sead::Vector3f* outNearestEdgePosTopY, const AreaObj* areaObj,
52 const sead::Vector3f& position);
53f32 calcNearestAreaObjEdgeRateTopY(const AreaObj* areaObj, const sead::Vector3f& position);
54void calcAreaObjCenterPos(sead::Vector3f* outCenterPosition, const AreaObj* areaObj);
55bool checkAreaObjCollisionByArrow(sead::Vector3f* outHitPosition, sead::Vector3f* outNormal,
56 const AreaObj* areaObj, const sead::Vector3f& position1,
57 const sead::Vector3f& position2);
58bool calcFindAreaSurface(const IUseAreaObj* areaUser, const char* name,
59 sead::Vector3f* outHitPosition, sead::Vector3f* outNormal,
60 const sead::Vector3f& position1, const sead::Vector3f& position2);
61bool calcFindAreaSurface(const IUseAreaObj* areaUser, const char* name,
62 sead::Vector3f* outHitPosition, sead::Vector3f* outNormal,
63 const sead::Vector3f& position, const sead::Vector3f& direction,
64 f32 distance);
65} // namespace al
66