Motor OpenGL
Cargando...
Buscando...
Nada coincide
component.h
1#pragma once
2
3#include <iostream>
4#include "ec.h"
5#include <functional>
6#include <array>
7#include <utils/logger.h>
8#include <core/serialize/Serializable.h>
9#include <core/serialize/Inspectable.h>
10
11class Transform;
12class Scene;
13namespace ec
14{
15 class RenderComponent;
16 class UpdateComponent;
17
20 {
21 using Iterator = std::vector<Component*>::iterator;
22 public:
23
26#ifdef _DEBUG
27 LOG_INFO("Creating base component");
28#endif // _DEBUG
29 };
30
32 virtual ~Component() { };
33
34 protected:
35 std::weak_ptr<ec::Entity> _entity;
36 Iterator _iterator;
37
38 public:
39
42 inline void setContext(std::weak_ptr<ec::Entity> ent)
43 {
44 _entity = ent;
45 }
46
47 inline virtual void initComponent() {}
48
49 inline virtual void start() {}
50 virtual ec::cmpID_t getID() const = 0;
51 virtual std::string serializeID() const = 0;
52
53 virtual void drawOnInspector() override {}
54
55 virtual void serialize(cme::JsonSerializer& s) const override {}
56 virtual void deserialize(cme::JsonSerializer& s) override {}
57
58 virtual RenderComponent* getAsRender() { return nullptr; }
59 virtual UpdateComponent* getAsUpdate() { return nullptr; }
60 };
61
62
65 using RenderIterator = std::vector<RenderComponent*>::iterator;
66 protected:
67 RenderIterator _renderIterator;
68 public:
69 virtual ~RenderComponent() {}
70 virtual void render() const = 0;
71 };
72
75 using UpdateIterator = std::vector<UpdateComponent*>::iterator;
76 protected:
77 UpdateIterator _updateIterator;
78 public:
79 virtual void update() = 0;
80
81 inline UpdateIterator& getUpdateIterator() { return _updateIterator; } // deberia haber aqui un assert
82 void setUpdateIterator(UpdateIterator it) { _updateIterator = it; }
83 };
84}
Interfaz para que las clases se puedan ver en el inspector.
Definition Inspectable.h:6
Se encarga de serializar en un JSON lo que sea de tipo Serializable.
Definition JsonSerializer.h:11
Interfaz que hace que los objetos se vuelvan serializables.
Definition Serializable.h:7
virtual void serialize(cme::JsonSerializer &s) const override
Serializa el objeto en un JSON utilizando el JsonSerializer proporcionado.
Definition component.h:55
void setContext(std::weak_ptr< ec::Entity > ent)
Hacer saber al componente quien le controla.
Definition component.h:42
Component()
Constructor.
Definition component.h:25
virtual ~Component()
Destructor.
Definition component.h:32
virtual void deserialize(cme::JsonSerializer &s) override
Deserializa el objeto desde un JSON utilizando el JsonSerializer proporcionado.
Definition component.h:56
Componente de render.
Definition component.h:64
Componente de update.
Definition component.h:74