Mountain  1.0.0
Simple C++ 2D Game Framework
collider.hpp
1 #pragma once
2 
3 #include "Mountain/core.hpp"
4 
5 #include <Maths/vector2.hpp>
6 
8 
9 namespace Mountain
10 {
11  enum class ColliderType : uint8_t
12  {
13  Hitbox,
14  Circle,
15  Grid,
16  List
17  };
18 
19  class Hitbox;
20  class Circle;
21  class Grid;
22  class ColliderList;
23 
24  class MOUNTAIN_API Collider
25  {
26  friend class Entity;
27 
28  public:
29  Vector2 offset;
30  ColliderType type;
31 
32  const Vector2* basePosition = nullptr;
33 
34  explicit Collider(ColliderType type);
35 
36  explicit Collider(ColliderType type, Vector2 offset);
37 
38  virtual ~Collider() = default;
39 
40  DEFAULT_COPY_MOVE_OPERATIONS(Collider)
41 
42  virtual void RenderDebug(const Color& color) const = 0;
43 
44  [[nodiscard]]
45  virtual Vector2 GetActualPosition() const;
46 
47  [[nodiscard]]
48  bool_t CheckCollision(const Entity& e) const;
49  [[nodiscard]]
50  bool_t CheckCollision(const Collider& collider) const;
51  [[nodiscard]]
52  virtual bool_t CheckCollision(Vector2 point) const = 0;
53  [[nodiscard]]
54  virtual bool_t CheckCollision(const Hitbox& hitbox) const = 0;
55  [[nodiscard]]
56  virtual bool_t CheckCollision(const Circle& circle) const = 0;
57  [[nodiscard]]
58  virtual bool_t CheckCollision(const Grid& grid) const = 0;
59  [[nodiscard]]
60  virtual bool_t CheckCollision(const ColliderList& list) const = 0;
61 
62  [[nodiscard]]
63  virtual float_t Left() const = 0;
64  [[nodiscard]]
65  virtual float_t Right() const = 0;
66  [[nodiscard]]
67  virtual float_t Top() const = 0;
68  [[nodiscard]]
69  virtual float_t Bottom() const = 0;
70  [[nodiscard]]
71  virtual Vector2 Center() const;
72  [[nodiscard]]
73  virtual Vector2 TopLeft() const;
74  [[nodiscard]]
75  virtual Vector2 TopRight() const;
76  [[nodiscard]]
77  virtual Vector2 BottomLeft() const;
78  [[nodiscard]]
79  virtual Vector2 BottomRight() const;
80 
81  [[nodiscard]]
82  virtual float_t AbsoluteLeft() const = 0;
83  [[nodiscard]]
84  virtual float_t AbsoluteRight() const = 0;
85  [[nodiscard]]
86  virtual float_t AbsoluteTop() const = 0;
87  [[nodiscard]]
88  virtual float_t AbsoluteBottom() const = 0;
89  [[nodiscard]]
90  virtual Vector2 AbsoluteCenter() const;
91  [[nodiscard]]
92  virtual Vector2 AbsoluteTopLeft() const;
93  [[nodiscard]]
94  virtual Vector2 AbsoluteTopRight() const;
95  [[nodiscard]]
96  virtual Vector2 AbsoluteBottomLeft() const;
97  [[nodiscard]]
98  virtual Vector2 AbsoluteBottomRight() const;
99 
100  [[nodiscard]]
101  virtual float_t Width() const;
102  [[nodiscard]]
103  virtual float_t Height() const;
104  [[nodiscard]]
105  virtual Vector2 Size() const;
106  };
107 }
Defines multiple color structs.
The Color struct represents a color in RGBA color space.
Definition: color.hpp:26
Contains all declarations of the Mountain Framework.
Definition: audio.hpp:22