diff options
Diffstat (limited to 'src/crepe/api')
-rw-r--r-- | src/crepe/api/GameObject.cpp | 22 | ||||
-rw-r--r-- | src/crepe/api/GameObject.h | 10 | ||||
-rw-r--r-- | src/crepe/api/Transform.cpp | 6 | ||||
-rw-r--r-- | src/crepe/api/Transform.h | 3 |
4 files changed, 31 insertions, 10 deletions
diff --git a/src/crepe/api/GameObject.cpp b/src/crepe/api/GameObject.cpp index b167187..5393e39 100644 --- a/src/crepe/api/GameObject.cpp +++ b/src/crepe/api/GameObject.cpp @@ -1,7 +1,25 @@ +#include "api/Transform.h" + #include "GameObject.h" +#include "Metadata.h" using namespace crepe::api; using namespace std; -GameObject::GameObject(uint32_t id, string name, string tag, int layer) - : id(id), name(name), tag(tag), active(true), layer(layer) {} +GameObject::GameObject(uint32_t id, std::string name, std::string tag, + Point position, double rotation, double scale) + : id(id) { + ComponentManager & mgr = ComponentManager::get_instance(); + mgr.add_component<Transform>(this->id, position, rotation, scale); + mgr.add_component<Metadata>(this->id, name, tag); +} + +void GameObject::set_parent(GameObject & parent) { + auto & mgr = ComponentManager::get_instance(); + vector<reference_wrapper<Metadata>> thisMetadata + = mgr.get_components_by_id<Metadata>(this->id); + vector<reference_wrapper<Metadata>> parentMetadata + = mgr.get_components_by_id<Metadata>(parent.id); + thisMetadata.at(0).get().parent = parent.id; + parentMetadata.at(0).get().children.push_back(this->id); +} diff --git a/src/crepe/api/GameObject.h b/src/crepe/api/GameObject.h index 57508c5..862fee8 100644 --- a/src/crepe/api/GameObject.h +++ b/src/crepe/api/GameObject.h @@ -3,20 +3,20 @@ #include <cstdint> #include <string> +#include "api/Point.h" + namespace crepe::api { class GameObject { public: - GameObject(uint32_t id, std::string name, std::string tag, int layer); + GameObject(uint32_t id, std::string name, std::string tag, Point position, + double rotation, double scale); + void set_parent(GameObject & parent); template <typename T, typename... Args> T & add_component(Args &&... args); uint32_t id; - std::string name; - std::string tag; - bool active; - int layer; }; } // namespace crepe::api diff --git a/src/crepe/api/Transform.cpp b/src/crepe/api/Transform.cpp index c76bc72..4b4da8f 100644 --- a/src/crepe/api/Transform.cpp +++ b/src/crepe/api/Transform.cpp @@ -8,9 +8,11 @@ using namespace crepe::api; -Transform::Transform(uint32_t game_id, const Point & point, double rot, - double scale) +Transform::Transform(uint32_t game_id, Point point, double rot, double scale) : Component(game_id), position(point), rotation(rot), scale(scale) { dbg_trace(); } + Transform::~Transform() { dbg_trace(); } + +int Transform::get_instances_max() const { return 1; } diff --git a/src/crepe/api/Transform.h b/src/crepe/api/Transform.h index c451c16..85e16b4 100644 --- a/src/crepe/api/Transform.h +++ b/src/crepe/api/Transform.h @@ -14,8 +14,9 @@ class Transform : public Component { // works similar (or the same) as those found in GLSL? public: - Transform(uint32_t id, const Point &, double, double); + Transform(uint32_t id, Point, double, double); ~Transform(); + int get_instances_max() const; //! Translation (shift) Point position; //! Rotation, in radians |