1#pragma once
2
3#include "Library/Area/AreaShape.h"
4
5namespace al {
6
7class AreaShapeCylinder : public AreaShape {
8public:
9 enum class OriginType { Center, Base, Top };
10
11 AreaShapeCylinder(AreaShapeCylinder::OriginType);
12
13 bool isInVolume(const sead::Vector3f&) const override;
14 bool isInVolumeOffset(const sead::Vector3f&, f32) const override;
15 bool calcNearestEdgePoint(sead::Vector3f*, const sead::Vector3f&) const override;
16 bool checkArrowCollision(sead::Vector3f*, sead::Vector3f*, const sead::Vector3f&,
17 const sead::Vector3f&) const override;
18 bool calcLocalBoundingBox(sead::BoundBox3f*) const override;
19
20private:
21 AreaShapeCylinder::OriginType mOriginType;
22};
23
24class AreaShapeCylinderBase : public AreaShapeCylinder {
25public:
26 AreaShapeCylinderBase() : AreaShapeCylinder(AreaShapeCylinder::OriginType::Base) {}
27};
28
29class AreaShapeCylinderCenter : public AreaShapeCylinder {
30public:
31 AreaShapeCylinderCenter() : AreaShapeCylinder(AreaShapeCylinder::OriginType::Center) {}
32};
33
34class AreaShapeCylinderTop : public AreaShapeCylinder {
35public:
36 AreaShapeCylinderTop() : AreaShapeCylinder(AreaShapeCylinder::OriginType::Top) {}
37};
38
39} // namespace al
40