TurtleBrains  0.3.5
High quality, portable, C++ framework for rapid 2D game development.
tb_basic_shapes.hpp
1 
14 #ifndef TurtleBrains_BasicShapes_hpp
15 #define TurtleBrains_BasicShapes_hpp
16 
17 #include <turtle_brains/graphics/tb_graphic.hpp>
18 #include <turtle_brains/math/tb_vector.hpp>
19 
20 #include <array>
21 #include <vector>
22 #include <memory>
23 
24 namespace TurtleBrains::Graphics
25 {
26  namespace Implementation
27  {
28  struct PolygonShapeData;
29  struct QuadShapeData;
30  };
31 
32  class OutlinedPolygonShape;
33 
37  class PolygonShape : public Graphic
38  {
39  public:
40 
44  PolygonShape(void);
45 
49  PolygonShape(const PolygonShape& other);
50 
54  PolygonShape(PolygonShape&& other) noexcept;
55 
59  virtual ~PolygonShape(void);
60 
67 
71  PolygonShape& operator=(PolygonShape&& other) noexcept;
72 
76  virtual void SetColor(const tbGraphics::Color& newColor) override;
77 
81  virtual PixelSpace GetPixelWidth(void) const override;
82 
86  virtual PixelSpace GetPixelHeight(void) const override;
87 
91  virtual void ClearVertices(void);
92 
97  virtual void AddVertex(const tbMath::Vector2& position, const Color& color = ColorPalette::White,
99 
104  void SetAsTriangles(void);
105 
111  void SetAsTriangleFan(void);
112 
118  void SetAsTriangleStrip(void);
119 
125  void SetAsLines(void);
126 
131  void SetAsLineStrip(void);
132 
139  void SetAsLineLoop(void);
140 
150  void SetVertexPosition(size_t vertexIndex, const tbMath::Vector2& position);
151 
156  void RecomputeBounds(void);
157 
158  protected:
164  virtual void OnRender(void) const override;
165 
166  private:
167  friend class OutlinedPolygonShape;
168 
169  std::unique_ptr<Implementation::PolygonShapeData> mData;
170  };
171 
172 
178  {
179  public:
184 
189 
193  virtual ~OutlinedPolygonShape(void);
194 
198  virtual void ClearVertices(void) override;
199 
206  void SetFillColor(const tbGraphics::Color& fillColor);
207 
213  void SetOutlineColor(const tbGraphics::Color& outlineColor);
214 
215  protected:
223 
231 
239 
244  virtual void OnRender(void) const override;
245 
246  private:
247  //Privately overridden to protect from ambiguous SetColor() mistakes, use SetFillColor() or SetOutlineColor().
248  virtual void SetColor(const tbGraphics::Color& color) override;
249 
250  //Privately overridden to protect from ambiguous AddVertex() mistakes, use AddOutlinedVertex(), AddShapeVertex()
251  // or AddShapeAndOutlineVertex() for clarity.
252  virtual void AddVertex(const tbMath::Vector2& position, const tbGraphics::Color& color = tbGraphics::ColorPalette::White,
253  const tbMath::Vector2& uv = tbMath::Vector2::Zero()) override;
254 
255  PolygonShape mOutline;
256  };
257 
258 
263  class BoxShape : public PolygonShape
264  {
265  public:
275  explicit BoxShape(const float width = 64.0f, const float height = 64.0f, const tbGraphics::Color& color = tbGraphics::ColorPalette::White,
276  const tbMath::Vector2& position = tbMath::Vector2::Zero());
277 
281  BoxShape(const BoxShape& other) = default;
282 
286  virtual ~BoxShape(void) = default;
287 
291  BoxShape& operator=(const BoxShape& other) = default;
292 
299  void SetSize(const float width, const float height);
300  };
301 
302 
306  class QuadShape : public Graphic
307  {
308  public:
309  enum QuadVertex { kTopLeft, kTopRight, kBottomLeft, kBottomRight };
310 
314  QuadShape(const float width, const float height, const tbGraphics::Color& color = tbGraphics::ColorPalette::White,
315  const tbMath::Vector2& position = tbMath::Vector2::Zero());
316 
320  QuadShape(const QuadShape& other) noexcept;
321  QuadShape(QuadShape&& other) noexcept;
322 
326  virtual ~QuadShape(void);
327 
331  QuadShape& operator=(const QuadShape& other) noexcept;
332  QuadShape& operator=(QuadShape&& other) noexcept;
333 
337  virtual void SetColor(const tbGraphics::Color& newColor) override;
338 
339  virtual void SetColor(const tbGraphics::Color& topLeftColor, const tbGraphics::Color& topRightColor,
340  const tbGraphics::Color& bottomLeftColor, const tbGraphics::Color& bottomRightColor);
341 
342  void SetPosition(const float x, const float y) { Graphic::SetPosition(x, y); }
343  void SetPosition(const tbMath::Vector2& position) { Graphic::SetPosition(position); }
344  void SetPosition(const QuadVertex vertexIndex, const tbMath::Vector2& position);
345 
346  const tbMath::Vector2& GetPosition(void) const { return Graphic::GetPosition(); }
347  tbMath::Vector2 GetPosition(const QuadVertex vertexPosition) const;
348 
355  void SetSize(const float width, const float height);
356 
360  virtual PixelSpace GetPixelWidth(void) const override;
361 
365  virtual PixelSpace GetPixelHeight(void) const override;
366 
372  virtual void OnRender(void) const override;
373 
374  private:
375  std::unique_ptr<Implementation::QuadShapeData> mData;
376  };
377 
378 
384  {
385  public:
396  explicit OutlinedBoxShape(const float width = 64.0f, const float height = 64.0f, const tbGraphics::Color& fillColor = tbGraphics::ColorPalette::White,
397  const tbGraphics::Color& outlineColor = tbGraphics::ColorPalette::Black, const tbMath::Vector2& position = tbMath::Vector2::Zero());
398 
402  virtual ~OutlinedBoxShape(void);
403  };
404 
405 
412  class FullScreenQuad : public BoxShape
413  {
414  public:
418  explicit FullScreenQuad(const tbGraphics::Color& color);
419 
423  virtual ~FullScreenQuad(void);
424  };
425 
426 
431  class CircleShape : public PolygonShape
432  {
433  public:
445  explicit CircleShape(const float radius = 64.0f, const tbGraphics::Color& color = tbGraphics::ColorPalette::White,
446  const tbMath::Vector2& position = tbMath::Vector2::Zero(), const int sectionCount = 30);
447 
451  virtual ~CircleShape(void);
452 
464  void SetSize(const float radius, const int sectionCount = 30);
465  };
466 
467 
473  {
474  public:
487  explicit OutlinedCircleShape(const float radius = 64.0f, const tbGraphics::Color& fillColor = tbGraphics::ColorPalette::White,
488  const tbGraphics::Color& outlineColor = tbGraphics::ColorPalette::Black, const tbMath::Vector2& position = tbMath::Vector2::Zero(),
489  const int sectionCount = 30);
490 
494  virtual ~OutlinedCircleShape(void);
495  };
496 
497 }; /* namespace TurtleBrains::Graphics */
498 
500 
501 #endif /* TurtleBrains_BasicShapes_hpp */
Definition: tb_basic_shapes.hpp:264
virtual ~BoxShape(void)=default
BoxShape(const float width=64.0f, const float height=64.0f, const tbGraphics::Color &color=tbGraphics::ColorPalette::White, const tbMath::Vector2 &position=tbMath::Vector2::Zero())
void SetSize(const float width, const float height)
BoxShape & operator=(const BoxShape &other)=default
BoxShape(const BoxShape &other)=default
Definition: tb_basic_shapes.hpp:432
void SetSize(const float radius, const int sectionCount=30)
CircleShape(const float radius=64.0f, const tbGraphics::Color &color=tbGraphics::ColorPalette::White, const tbMath::Vector2 &position=tbMath::Vector2::Zero(), const int sectionCount=30)
Definition: tb_color.hpp:24
Definition: tb_basic_shapes.hpp:413
FullScreenQuad(const tbGraphics::Color &color)
Definition: tb_graphic.hpp:50
const tbMath::Vector2 & GetPosition(void) const
void SetPosition(const float x, const float y)
Definition: tb_basic_shapes.hpp:384
OutlinedBoxShape(const float width=64.0f, const float height=64.0f, const tbGraphics::Color &fillColor=tbGraphics::ColorPalette::White, const tbGraphics::Color &outlineColor=tbGraphics::ColorPalette::Black, const tbMath::Vector2 &position=tbMath::Vector2::Zero())
Definition: tb_basic_shapes.hpp:473
OutlinedCircleShape(const float radius=64.0f, const tbGraphics::Color &fillColor=tbGraphics::ColorPalette::White, const tbGraphics::Color &outlineColor=tbGraphics::ColorPalette::Black, const tbMath::Vector2 &position=tbMath::Vector2::Zero(), const int sectionCount=30)
Definition: tb_basic_shapes.hpp:178
void AddOutlineVertex(const tbMath::Vector2 &position, const tbMath::Vector2 &uv=tbMath::Vector2::Zero())
void AddShapeVertex(const tbMath::Vector2 &position, const tbMath::Vector2 &uv=tbMath::Vector2::Zero())
void SetOutlineColor(const tbGraphics::Color &outlineColor)
virtual void ClearVertices(void) override
void AddShapeAndOutlineVertex(const tbMath::Vector2 &position, const tbMath::Vector2 &uv=tbMath::Vector2::Zero())
void SetFillColor(const tbGraphics::Color &fillColor)
virtual void OnRender(void) const override
OutlinedPolygonShape(const OutlinedPolygonShape &other)
Definition: tb_basic_shapes.hpp:38
virtual PixelSpace GetPixelHeight(void) const override
virtual void AddVertex(const tbMath::Vector2 &position, const Color &color=ColorPalette::White, const tbMath::Vector2 &uv=tbMath::Vector2::Zero())
PolygonShape & operator=(const PolygonShape &other)
virtual PixelSpace GetPixelWidth(void) const override
void SetVertexPosition(size_t vertexIndex, const tbMath::Vector2 &position)
PolygonShape(const PolygonShape &other)
virtual void SetColor(const tbGraphics::Color &newColor) override
virtual void OnRender(void) const override
Definition: tb_basic_shapes.hpp:307
virtual PixelSpace GetPixelWidth(void) const override
virtual void OnRender(void) const override
virtual void SetColor(const tbGraphics::Color &newColor) override
QuadShape(const float width, const float height, const tbGraphics::Color &color=tbGraphics::ColorPalette::White, const tbMath::Vector2 &position=tbMath::Vector2::Zero())
void SetSize(const float width, const float height)
virtual PixelSpace GetPixelHeight(void) const override
Definition: tb_vector.hpp:99
static TypedVector2 Zero(void)
Definition: tb_vector.hpp:104
Give the GameScene and Entities something to display, Text, Sprites and AnimatedSprites help bring th...
tbCore::uint16 PixelSpace
Definition: tb_texture_manager.hpp:34