TurtleBrains  0.2.1
High quality, portable, C++ API for native application and game development.
tb_basic_shapes.h
1 
9 #ifndef _TurtleBrains_BasicShapes_h_
10 #define _TurtleBrains_BasicShapes_h_
11 
12 #include "implementation/tbi_renderer.h"
13 #include "tb_graphic.h"
14 #include "../math/tb_vector.h"
15 
16 #include <vector>
17 
18 namespace TurtleBrains
19 {
20  namespace Graphics
21  {
22  class OutlinedPolygonShape;
23 
27  class PolygonShape : public Graphic
28  {
29  public:
30 
34  PolygonShape(void);
35 
39  PolygonShape(const PolygonShape& other);
40 
44  virtual ~PolygonShape(void);
45 
49  virtual void SetColor(const tbGraphics::Color& newColor) override;
50 
51  protected:
57  virtual void OnRender(void) const override;
58 
62  virtual void ClearVertices(void);
63 
68  virtual void AddVertex(const tbMath::Vector2& position);
69 
73  virtual PixelSpace GetPixelWidth(void) const override;
74 
78  virtual PixelSpace GetPixelHeight(void) const override;
79 
84  void SetAsTriangles(void) { mPrimitiveType = tbImplementation::Renderer::kTriangles; }
85 
91  void SetAsTriangleFan(void) { mPrimitiveType = tbImplementation::Renderer::kTriangleFan; }
92 
98  void SetAsTriangleStrip(void) { mPrimitiveType = tbImplementation::Renderer::kTriangleStrip; }
99 
105  void SetAsLines(void) { mPrimitiveType = tbImplementation::Renderer::kLines; }
106 
111  void SetAsLineStrip(void) { mPrimitiveType = tbImplementation::Renderer::kLineStrip; }
112 
119  void SetAsLineLoop(void) { mPrimitiveType = tbImplementation::Renderer::kLineLoop; }
120 
121  private:
122  friend class OutlinedPolygonShape;
123 
124  std::vector<tbImplementation::Renderer::Vertex2D> mVertices;
125  tbImplementation::Renderer::PrimitiveType mPrimitiveType;
126  tbMath::Vector2 mMinimumBounds;
127  tbMath::Vector2 mMaximumBounds;
128  };
129 
130 
136  {
137  public:
141  OutlinedPolygonShape(void);
142 
147 
151  virtual ~OutlinedPolygonShape(void);
152 
156  virtual void ClearVertices(void) override;
157 
164  void SetFillColor(const tbGraphics::Color& fillColor);
165 
171  void SetOutlineColor(const tbGraphics::Color& outlineColor);
172 
173  protected:
180  void AddOutlineVertex(const tbMath::Vector2& position);
181 
188  void AddShapeVertex(const tbMath::Vector2& position);
189 
196  void AddShapeAndOutlineVertex(const tbMath::Vector2& position);
197 
202  virtual void OnRender(void) const override;
203 
204  private:
205  //Privately overriden to protect from ambiguous SetColor() mistakes, use SetFillColor() or SetOutlineColor().
206  virtual void SetColor(const tbGraphics::Color& color) override;
207 
208  //Privately overridden to protect from ambiguous AddVertex() mistakes, use AddOutlinedVertex(), AddShapeVertex()
209  // or AddShapeAndOutlineVertex() for clarity.
210  virtual void AddVertex(const tbMath::Vector2& position) override;
211 
212  PolygonShape mOutline;
213  };
214 
215 
220  class BoxShape : public PolygonShape
221  {
222  public:
232  BoxShape(const float width, const float height, const tbGraphics::Color& color = tbGraphics::Color::kWhite, const tbMath::Vector2& position = tbMath::Vector2::Zero());
233 
237  virtual ~BoxShape(void);
238  };
239 
240 
246  {
247  public:
258  OutlinedBoxShape(const float width, const float height, const tbGraphics::Color& fillColor = tbGraphics::Color::kWhite,
259  const tbGraphics::Color& outlineColor = tbGraphics::Color::kBlack, const tbMath::Vector2& position = tbMath::Vector2::Zero());
260 
264  virtual ~OutlinedBoxShape(void);
265  };
266 
267 
272  class FullScreenQuad : public BoxShape
273  {
274  public:
278  FullScreenQuad(const tbGraphics::Color& color);
279 
283  virtual ~FullScreenQuad(void);
284  };
285 
286 
291  class CircleShape : public PolygonShape
292  {
293  public:
305  CircleShape(const float radius, const tbGraphics::Color& color = tbGraphics::Color::kWhite, const tbMath::Vector2& position = tbMath::Vector2::Zero(),
306  const int sectionCount = 30);
307 
311  virtual ~CircleShape(void);
312  };
313 
314 
320  {
321  public:
334  OutlinedCircleShape(const float radius, const tbGraphics::Color& fillColor = tbGraphics::Color::kWhite,
335  const tbGraphics::Color& outlineColor = tbGraphics::Color::kBlack, const tbMath::Vector2& position = tbMath::Vector2::Zero(),
336  const int sectionCount = 30);
337 
341  virtual ~OutlinedCircleShape(void);
342  };
343 
344  }; /* namespace Graphics */
345 }; /* namespace TurtleBrains */
346 
348 
349 #endif /* _TurtleBrains_BasicShapes_h_ */
Definition: tb_vector.h:47
virtual void ClearVertices(void) override
Definition: tb_graphic.h:61
void SetAsTriangles(void)
Definition: tb_basic_shapes.h:84
Give the GameScene and Entities something to display, Text, Sprites and AnimatedSprites help bring th...
OutlinedBoxShape(const float width, const float height, const tbGraphics::Color &fillColor=tbGraphics::Color::kWhite, const tbGraphics::Color &outlineColor=tbGraphics::Color::kBlack, const tbMath::Vector2 &position=tbMath::Vector2::Zero())
void SetFillColor(const tbGraphics::Color &fillColor)
OutlinedCircleShape(const float radius, const tbGraphics::Color &fillColor=tbGraphics::Color::kWhite, const tbGraphics::Color &outlineColor=tbGraphics::Color::kBlack, const tbMath::Vector2 &position=tbMath::Vector2::Zero(), const int sectionCount=30)
virtual PixelSpace GetPixelHeight(void) const override
void AddShapeVertex(const tbMath::Vector2 &position)
Definition: tb_basic_shapes.h:135
static const Color kBlack
Definition: tb_color.h:31
void AddOutlineVertex(const tbMath::Vector2 &position)
Definition: tb_basic_shapes.h:27
Contains all functions, classes and helpers related to game/application development written by Tim "B...
Definition: tb_application_dialog.h:21
static Vector2 Zero(void)
Definition: tb_vector.h:53
Definition: tb_basic_shapes.h:245
CircleShape(const float radius, const tbGraphics::Color &color=tbGraphics::Color::kWhite, const tbMath::Vector2 &position=tbMath::Vector2::Zero(), const int sectionCount=30)
Definition: tb_color.h:23
static const Color kWhite
Definition: tb_color.h:30
void SetAsLines(void)
Definition: tb_basic_shapes.h:105
FullScreenQuad(const tbGraphics::Color &color)
void SetAsLineStrip(void)
Definition: tb_basic_shapes.h:111
void SetAsTriangleFan(void)
Definition: tb_basic_shapes.h:91
tbCore::uint16 PixelSpace
Definition: tb_texture_manager.h:33
Definition: tb_basic_shapes.h:319
void AddShapeAndOutlineVertex(const tbMath::Vector2 &position)
Definition: tb_basic_shapes.h:291
virtual void AddVertex(const tbMath::Vector2 &position)
virtual void SetColor(const tbGraphics::Color &newColor) override
Definition: tb_basic_shapes.h:272
void SetOutlineColor(const tbGraphics::Color &outlineColor)
void SetAsLineLoop(void)
Definition: tb_basic_shapes.h:119
virtual PixelSpace GetPixelWidth(void) const override
void SetAsTriangleStrip(void)
Definition: tb_basic_shapes.h:98
virtual void OnRender(void) const override
BoxShape(const float width, const float height, const tbGraphics::Color &color=tbGraphics::Color::kWhite, const tbMath::Vector2 &position=tbMath::Vector2::Zero())
virtual void OnRender(void) const override
Definition: tb_basic_shapes.h:220