TurtleBrains  0.3.1
High quality, portable, C++ framework for rapid 2D 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 overridden 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  explicit BoxShape(const float width = 64.0f, const float height = 64.0f, const tbGraphics::Color& color = tbGraphics::ColorPalette::White,
233  const tbMath::Vector2& position = tbMath::Vector2::Zero());
234 
238  virtual ~BoxShape(void);
239  };
240 
241 
247  {
248  public:
259  explicit OutlinedBoxShape(const float width = 64.0f, const float height = 64.0f, const tbGraphics::Color& fillColor = tbGraphics::ColorPalette::White,
260  const tbGraphics::Color& outlineColor = tbGraphics::ColorPalette::Black, const tbMath::Vector2& position = tbMath::Vector2::Zero());
261 
265  virtual ~OutlinedBoxShape(void);
266  };
267 
268 
273  class FullScreenQuad : public BoxShape
274  {
275  public:
279  explicit FullScreenQuad(const tbGraphics::Color& color);
280 
284  virtual ~FullScreenQuad(void);
285  };
286 
287 
292  class CircleShape : public PolygonShape
293  {
294  public:
306  explicit CircleShape(const float radius = 64.0f, const tbGraphics::Color& color = tbGraphics::ColorPalette::White,
307  const tbMath::Vector2& position = tbMath::Vector2::Zero(), const int sectionCount = 30);
308 
312  virtual ~CircleShape(void);
313  };
314 
315 
321  {
322  public:
335  explicit OutlinedCircleShape(const float radius = 64.0f, const tbGraphics::Color& fillColor = tbGraphics::ColorPalette::White,
336  const tbGraphics::Color& outlineColor = tbGraphics::ColorPalette::Black, const tbMath::Vector2& position = tbMath::Vector2::Zero(),
337  const int sectionCount = 30);
338 
342  virtual ~OutlinedCircleShape(void);
343  };
344 
345  }; /* namespace Graphics */
346 }; /* namespace TurtleBrains */
347 
349 
350 #endif /* _TurtleBrains_BasicShapes_h_ */
Definition: tb_vector.h:47
virtual void ClearVertices(void) override
Definition: tb_graphic.h:61
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())
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())
void SetAsTriangles(void)
Definition: tb_basic_shapes.h:84
Give the GameScene and Entities something to display, Text, Sprites and AnimatedSprites help bring th...
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)
void SetFillColor(const tbGraphics::Color &fillColor)
virtual PixelSpace GetPixelHeight(void) const override
void AddShapeVertex(const tbMath::Vector2 &position)
Definition: tb_basic_shapes.h:135
void AddOutlineVertex(const tbMath::Vector2 &position)
Definition: tb_basic_shapes.h:27
Here is some information about the primary namespace.
Definition: tb_application_dialog.h:21
static Vector2 Zero(void)
Definition: tb_vector.h:53
Definition: tb_basic_shapes.h:246
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.h:23
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:35
Definition: tb_basic_shapes.h:320
void AddShapeAndOutlineVertex(const tbMath::Vector2 &position)
Definition: tb_basic_shapes.h:292
virtual void AddVertex(const tbMath::Vector2 &position)
virtual void SetColor(const tbGraphics::Color &newColor) override
Definition: tb_basic_shapes.h:273
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
virtual void OnRender(void) const override
Definition: tb_basic_shapes.h:220