NasNas
An intuitive and beginner friendly 2D game framework for C++
ShapeComponent.hpp
1 // Created by Modar Nasser on 11/06/2020.
2 
3 #pragma once
4 
5 #include <SFML/Graphics/CircleShape.hpp>
6 #include <SFML/Graphics/ConvexShape.hpp>
7 #include <SFML/Graphics/RectangleShape.hpp>
8 
9 #include <NasNas/core/data/Rect.hpp>
10 #include <NasNas/core/graphics/Shapes.hpp>
11 #include <NasNas/ecs/components/GraphicsComponent.hpp>
12 
13 namespace ns::ecs {
14 
15  template <typename T>
17  public:
18  explicit ShapeComponent(const T& shape, const sf::Vector2f& pos_offset={0, 0});
19 
20  auto getDrawable() -> T& override;
21  auto getGlobalBounds() -> ns::FloatRect override;
22 
23  void update() override;
24 
25  private:
26  T m_drawable;
27  void draw(sf::RenderTarget& target, sf::RenderStates states) const override;
28  };
29 
30  template<typename T>
31  ShapeComponent<T>::ShapeComponent(const T& shape, const sf::Vector2f& pos_offset) :
32  m_drawable(shape) {
33  m_transform.translate(pos_offset);
34  }
35 
36  template<typename T>
37  auto ShapeComponent<T>::getDrawable() -> T& {
38  return m_drawable;
39  }
40 
41  template<typename T>
43  return m_transform.transformRect(m_drawable.getGlobalBounds());
44  }
45 
46  template<typename T>
48 
49  template<typename T>
50  void ShapeComponent<T>::draw(sf::RenderTarget& target, sf::RenderStates states) const {
51  states.transform *= m_transform;
52  target.draw(m_drawable, states);
53  }
54 
60 
61 }