TurtleBrains  0.3.5
High quality, portable, C++ framework for rapid 2D game development.
tb_graphic.hpp
1 
9 #ifndef TurtleBrains_Graphic_hpp
10 #define TurtleBrains_Graphic_hpp
11 
12 #include <turtle_brains/graphics/tb_anchor_location.hpp>
13 #include <turtle_brains/graphics/tb_color.hpp>
14 #include <turtle_brains/graphics/tb_texture_manager.hpp>
15 
16 #include <turtle_brains/math/tb_vector.hpp>
17 
18 namespace TurtleBrains::Graphics
19 {
24 
29 
34 
38  float ScreenAspectRatio(void);
39 
44 
49  class Graphic
50  {
51  public:
56  Graphic(void);
57 
63  Graphic(const Graphic& other) = default;
64 
68  virtual ~Graphic(void) = default;
69 
75  Graphic& operator=(const Graphic& other) = default;
76 
81  bool IsActive(void) const;
82 
88  void SetActive(const bool isActive);
89 
94  void Update(const float deltaTime);
95 
100  bool IsVisible(void) const;
101 
107  void SetVisible(const bool isVisible);
108 
113  void Render(void) const;
114 
118  const tbMath::Vector2& GetPosition(void) const;
119 
128  void SetPosition(const float x, const float y);
129 
138  void SetPosition(const tbMath::Vector2& position);
139 
144  const tbMath::Vector2& GetOrigin(void) const;
145 
151  void SetOrigin(const AnchorLocation& anchor, const float offsetX, const float offsetY);
152 
158  void SetOrigin(const AnchorLocation& anchor, const tbMath::Vector2& offset = tbMath::Vector2::Zero());
159 
166  inline void SetOrigin(const float originX, const float originY) { mOrigin.x = originX; mOrigin.y = originY; }
167 
174  inline void SetOrigin(const tbMath::Vector2& origin) { mOrigin = origin; }
175 
179  float GetDepth(void) const;
180 
188  void SetDepth(const float newDepth);
189 
194  inline const tbMath::Vector2& GetScale(void) const { return mScale; }
195 
204  void SetScale(const float scale);
205 
215  void SetScale(const tbMath::Vector2& scale);
216 
227  void SetScale(const float scaleX, const float scaleY);
228 
236  inline tbMath::Angle GetRotation(void) const { return mRotation; }
237 
244  inline void SetRotation(const tbMath::Angle& angle) { mRotation = angle; }
245 
246 
252  inline void SetScroll(const float scroll) { mScroll.x = scroll; mScroll.y = scroll; }
253 
262  inline void SetScroll(const float scrollX, const float scrollY) { mScroll.x = scrollX; mScroll.y = scrollY; }
263 
269  bool IsRelative(void) const;
270 
271  //
272  // @details TODO: TurtleBrains: Implementation: Currently this is unimplemented and undocumented, all Graphics
273  // are currently relative.
274  //
275  //void SetRelative(const bool isRelative);
276 
281  const Color& GetColor(void) const;
282 
287  virtual void SetColor(const tbGraphics::Color& newColor);
288 
293  virtual PixelSpace GetPixelWidth(void) const { return 0; }
294 
299  virtual PixelSpace GetPixelHeight(void) const { return 0; }
300 
305  float GetWidth(void) const { return static_cast<float>(GetPixelWidth()); }
306 
311  float GetHeight(void) const { return static_cast<float>(GetPixelHeight()); }
312 
316  float GetScaledWidth(void) const { return GetWidth() * GetScale().x; }
317 
321  float GetScaledHeight(void) const { return GetHeight() * GetScale().y; }
322 
335  const float offsetX, const float offsetY) const;
336 
341  const tbMath::Vector2& offset = tbMath::Vector2::Zero()) const;
342 
346  bool UnstableIsPointContained(const tbMath::Vector2& point) const;
347 
348  protected:
357  virtual void OnUpdate(const float deltaTime);
358 
366  virtual void OnRender(void) const = 0;
367 
372  virtual void ApplyTransform(void) const;
373 
378  virtual void PopTransform(void) const;
379 
380  private:
381  tbMath::Vector2 mPosition;
382  tbMath::Vector2 mScroll;
383  tbMath::Vector2 mOrigin; //0,0 = top-left, 1/2w, 1/2h = center.
384  tbMath::Vector2 mScale;
385  tbMath::Angle mRotation;
386  float mDepthZ;
387  bool mIsActive;
388  bool mIsVisible;
389  bool mIsRelative;
390  Color mColor;
391  };
392 
400  tbMath::Vector2 GetAnchorPositionOfScreen(const tbGraphics::AnchorLocation& anchor, const float offsetX, const float offsetY);
401 
406 
407 }; /* namespace TurtleBrains::Graphics */
408 
410 
411 #endif /* TurtleBrains_Graphic_hpp */
Definition: tb_color.hpp:24
Definition: tb_graphic.hpp:50
tbMath::Vector2 GetAnchorPosition(const tbGraphics::AnchorLocation &anchor, const tbMath::Vector2 &offset=tbMath::Vector2::Zero()) const
float GetHeight(void) const
Definition: tb_graphic.hpp:311
void SetVisible(const bool isVisible)
const tbMath::Vector2 & GetPosition(void) const
virtual PixelSpace GetPixelWidth(void) const
Definition: tb_graphic.hpp:293
const tbMath::Vector2 & GetOrigin(void) const
void SetScroll(const float scrollX, const float scrollY)
Definition: tb_graphic.hpp:262
void SetScale(const float scaleX, const float scaleY)
void SetActive(const bool isActive)
Graphic & operator=(const Graphic &other)=default
void SetRotation(const tbMath::Angle &angle)
Definition: tb_graphic.hpp:244
void SetScale(const float scale)
bool UnstableIsPointContained(const tbMath::Vector2 &point) const
virtual PixelSpace GetPixelHeight(void) const
Definition: tb_graphic.hpp:299
tbMath::Angle GetRotation(void) const
Definition: tb_graphic.hpp:236
tbMath::Vector2 GetAnchorPosition(const tbGraphics::AnchorLocation &anchor, const float offsetX, const float offsetY) const
void SetOrigin(const tbMath::Vector2 &origin)
Definition: tb_graphic.hpp:174
virtual void PopTransform(void) const
virtual void OnUpdate(const float deltaTime)
void Update(const float deltaTime)
void SetOrigin(const AnchorLocation &anchor, const tbMath::Vector2 &offset=tbMath::Vector2::Zero())
virtual ~Graphic(void)=default
float GetWidth(void) const
Definition: tb_graphic.hpp:305
void SetDepth(const float newDepth)
void SetOrigin(const AnchorLocation &anchor, const float offsetX, const float offsetY)
void SetPosition(const tbMath::Vector2 &position)
virtual void OnRender(void) const =0
virtual void ApplyTransform(void) const
const Color & GetColor(void) const
virtual void SetColor(const tbGraphics::Color &newColor)
Graphic(const Graphic &other)=default
void SetScale(const tbMath::Vector2 &scale)
void SetPosition(const float x, const float y)
void SetOrigin(const float originX, const float originY)
Definition: tb_graphic.hpp:166
float GetScaledWidth(void) const
Definition: tb_graphic.hpp:316
const tbMath::Vector2 & GetScale(void) const
Definition: tb_graphic.hpp:194
void SetScroll(const float scroll)
Definition: tb_graphic.hpp:252
float GetScaledHeight(void) const
Definition: tb_graphic.hpp:321
Definition: tb_angle.hpp:38
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...
PixelSpace ScreenWidth(void)
Anchor
Definition: tb_anchor_location.hpp:22
tbMath::Vector2 GetAnchorPositionOfScreen(const tbGraphics::AnchorLocation &anchor, const float offsetX, const float offsetY)
PixelSpace ScreenHeight(void)
tbMath::Vector2 ScreenSize(void)
tbMath::Vector2 ScreenCenter(void)
tbCore::uint16 PixelSpace
Definition: tb_texture_manager.hpp:34
float ScreenAspectRatio(void)