]> git.tdb.fi Git - libs/game.git/blobdiff - source/game/entity.h
Provide a way to request events for existing entities and components
[libs/game.git] / source / game / entity.h
index c28cbe5075b94567709ba562f33698097e959e29..8dc5139558abeba8a676e6fdac67747c53e26df3 100644 (file)
@@ -35,6 +35,12 @@ public:
 
        void add_component(Handle<Component>);
        void remove_component(Handle<Component>);
+       const std::vector<Handle<Component>> &get_components() const { return components; }
+
+       template<typename T>
+       Handle<T> get_component();
+
+       Handle<Transform> get_transform() const { return transform; }
 
        void add_child(Handle<Entity>);
        void remove_child(Handle<Entity>);
@@ -43,10 +49,18 @@ public:
        Handle<Entity> get_root();
        const std::vector<Handle<Entity>> &get_children() const { return children; }
        Stage &get_stage();
-       Handle<Transform> get_transform() const { return transform; }
 };
 
 
+template<typename T>
+inline Handle<T> Entity::get_component()
+{
+       for(Handle<Component> c: components)
+               if(Handle<T> tc = dynamic_handle_cast<T>(c))
+                       return tc;
+       return nullptr;
+}
+
 inline Handle<Entity> Entity::get_root()
 {
        Handle<Entity> e = Handle<Entity>::from_object(this);