1 #ifndef OPHIDIAN_GUI_DRAWABLE_BATCH_H
2 #define OPHIDIAN_GUI_DRAWABLE_BATCH_H
4 #include <SFML/Graphics.hpp>
5 #include "../geometry/geometry.h"
6 #include "../entity_system/entity_system.h"
7 #include "../entity_system/vector_property.h"
13 std::vector< sf::Vertex > m_delta;
14 const std::size_t c_DURATION;
15 std::size_t m_current;
19 m_delta(batch.vertex_count()),
25 sf::Vertex& operator[](
const std::size_t i)
31 if(m_current == c_DURATION)
36 for(std::size_t i = 0; i < m_delta.size(); ++i)
38 v[i].position.x += m_delta[i].position.x/
static_cast<double>(c_DURATION);
39 v[i].position.y += m_delta[i].position.y/
static_cast<double>(c_DURATION);
47 template<std::
size_t NumberOfVertices>
52 sf::PrimitiveType m_primitive;
58 m_primitive(primitive),
64 bool has_animation()
const {
65 return m_animation !=
nullptr;
68 const sf::Vertex operator[](
const std::size_t i)
const {
69 return reinterpret_cast<const sf::Vertex*
>(m_vertices.data())[i];
74 m_animation = animation;
77 entity_system::entity create() {
78 auto the_entity = m_system.
create();
79 paint(the_entity, sf::Color::Black);
83 void destroy(entity_system::entity the_entity) {
87 void transform(entity_system::entity the_entity,
const sf::Transform & trans)
89 std::array<sf::Vertex, NumberOfVertices> & vertices = m_vertices[m_system.
lookup(the_entity)];
90 for(sf::Vertex & v : vertices)
91 v.position = trans.transformPoint(v.position);
94 void paint(entity_system::entity the_entity,
const sf::Color & color)
96 std::array<sf::Vertex, NumberOfVertices> & vertices = m_vertices[m_system.
lookup(the_entity)];
97 for(sf::Vertex & v : vertices)
101 void set_point(entity_system::entity the_entity, std::size_t i,
const geometry::point<double> &p)
103 std::array<sf::Vertex, NumberOfVertices> & vertices = m_vertices[m_system.
lookup(the_entity)];
104 vertices.at(i).position = sf::Vector2f(p.x(), p.y());
107 geometry::point<double> point(entity_system::entity the_entity, std::size_t i)
const {
108 const std::array<sf::Vertex, NumberOfVertices> & vertices = m_vertices[m_system.
lookup(the_entity)];
109 return geometry::point<double>(vertices[i].position.x, vertices[i].position.y);
112 std::size_t vertex_count()
const {
113 return m_system.
size()*NumberOfVertices;
116 const std::array<sf::Vertex, NumberOfVertices> & points(entity_system::entity & the_entity)
const {
117 return m_vertices[m_system.
lookup(the_entity)];
124 m_animation = m_animation->update(reinterpret_cast<sf::Vertex*>(m_vertices.data()));
127 void draw(sf::RenderTarget& target, sf::RenderStates states)
const {
128 target.draw(reinterpret_cast<const sf::Vertex*>(m_vertices.data()), m_system.
size()*NumberOfVertices, m_primitive, states);
132 for(
auto entity : m_system)
133 m_system.destroy(entity);
143 #endif // OPHIDIAN_GUI_DRAWABLE_BATCH_H
void preallocate(std::size_t qnt)
Preallocate method.
Definition: entity_system.cpp:53
Definition: drawable_batch.h:12
Implementation of the vector property class.
Definition: vector_property.h:37
void destroy(entity e)
Destroy an entity.
Definition: entity_system.cpp:27
entity create()
Creates an entity.
Definition: entity_system.cpp:42
Definition: drawable_batch.h:48
entity_system class.
Definition: entity_system.h:40
std::size_t size() const
Returns the size of the system.
Definition: entity_system.h:82
entity_index lookup(entity e) const
Gets the index of an entity.
Definition: entity_system.h:149
void register_property(property *property)
Registers property.
Definition: entity_system.cpp:61