1#pragma once
2
3#include <math/seadMatrix.h>
4#include <math/seadVector.h>
5
6#include "Library/HostIO/HioNode.h"
7#include "Library/Scene/IUseSceneObjHolder.h"
8#include "Library/Stage/IUseStageSwitch.h"
9
10namespace al {
11
12class AreaShape;
13class PlacementInfo;
14class AreaInitInfo;
15
16class AreaObj : public IUseStageSwitch, public IUseSceneObjHolder, public HioNode {
17public:
18 AreaObj(const char* name);
19
20 const char* getName() const override { return mName; }
21
22 StageSwitchKeeper* getStageSwitchKeeper() const override { return mStageSwitchKeeper; }
23
24 void initStageSwitchKeeper() override;
25 virtual void init(const AreaInitInfo& info);
26 virtual bool isInVolume(const sead::Vector3f& pos) const;
27 virtual bool isInVolumeOffset(const sead::Vector3f& pos, f32 offset) const;
28
29 SceneObjHolder* getSceneObjHolder() const override { return mSceneObjHolder; }
30
31 void validate() { mIsValid = true; }
32
33 void invalidate() { mIsValid = false; }
34
35 const PlacementInfo* getPlacementInfo() const { return mPlacementInfo; }
36
37 AreaShape* getAreaShape() const { return mAreaShape; }
38
39 const sead::Matrix34f& getAreaMtx() const { return mAreaTR; }
40
41 s32 getPriority() { return mPriority; };
42
43private:
44 const char* mName;
45 AreaShape* mAreaShape = nullptr;
46 StageSwitchKeeper* mStageSwitchKeeper = nullptr;
47 SceneObjHolder* mSceneObjHolder = nullptr;
48 sead::Matrix34f mAreaTR = sead::Matrix34f::ident;
49 PlacementInfo* mPlacementInfo = nullptr;
50 s32 mPriority = -1;
51 bool mIsValid = true;
52};
53} // namespace al
54