#define MSP_GAME_ENTITY_H_
#include "handle.h"
+#include "owned.h"
namespace Msp::Game {
class Component;
class Stage;
+class Transform;
+struct TransformValues;
class hierarchy_error: public std::logic_error
{
class Entity
{
+public:
+ enum TransformTag { NO_TRANSFORM };
+
private:
Handle<Entity> parent;
std::vector<Handle<Component>> components;
std::vector<Handle<Entity>> children;
+ Owned<Transform> transform;
public:
- Entity(Handle<Entity>);
+ Entity(Handle<Entity>, TransformTag);
+ Entity(Handle<Entity>, const TransformValues &);
virtual ~Entity();
void add_component(Handle<Component>);
Handle<Entity> get_parent() const { return parent; }
Handle<Entity> get_root();
+ const std::vector<Handle<Entity>> &get_children() const { return children; }
Stage &get_stage();
+ Handle<Transform> get_transform() const { return transform; }
};