From a61367721cf791e99eea8b4c7f2ba62e9e28cd03 Mon Sep 17 00:00:00 2001 From: bailwillharr Date: Sun, 4 Sep 2022 01:31:10 +0100 Subject: [PATCH] Change the transform component to a struct --- CMakeLists.txt | 4 ++-- include/components/transform.hpp | 34 -------------------------------- include/object.hpp | 8 +++++--- include/transform.hpp | 17 ++++++++++++++++ src/components/transform.cpp | 16 --------------- src/object.cpp | 11 ++++------- src/sceneroot.cpp | 1 - 7 files changed, 28 insertions(+), 63 deletions(-) delete mode 100644 include/components/transform.hpp create mode 100644 include/transform.hpp delete mode 100644 src/components/transform.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 32dcabb..f46deeb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ add_library(${PROJECT_NAME} SHARED "src/sceneroot.cpp" "src/components/component.cpp" - "src/components/transform.cpp" # TODO move functionality into "Object" class + # TODO move functionality into "Object" class "src/components/camera.cpp" "src/components/mesh_renderer.cpp" "src/components/text_ui_renderer.cpp" @@ -45,11 +45,11 @@ add_library(${PROJECT_NAME} SHARED "include/input.hpp" + "include/transform.hpp" "include/object.hpp" "include/sceneroot.hpp" "include/components/component.hpp" - "include/components/transform.hpp" "include/components/camera.hpp" "include/components/mesh_renderer.hpp" "include/components/text_ui_renderer.hpp" diff --git a/include/components/transform.hpp b/include/components/transform.hpp deleted file mode 100644 index f2b1ea5..0000000 --- a/include/components/transform.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include "export.h" - -#include "component.hpp" - -#include -#include -#include - -#include -#include -#include - -namespace components { - -class ENGINE_API Transform : public Component { - -// Scale, rotate (XYZ), translate - -private: - glm::mat4 m_transformMatrix{1.0f}; - -public: - Transform(Object*); - ~Transform() override; - - glm::vec3 position{0.0f}; - glm::quat rotation{}; - glm::vec3 scale{1.0f}; - -}; - -} diff --git a/include/object.hpp b/include/object.hpp index 22afa88..1552c5d 100644 --- a/include/object.hpp +++ b/include/object.hpp @@ -4,6 +4,8 @@ #include +#include "transform.hpp" + #include #include #include @@ -79,10 +81,13 @@ public: // Ignores 'Transform' void getAllSubComponents(struct CompList& compList, glm::mat4 t); + Transform transform; + private: static int s_object_count; int m_id = s_object_count; std::string m_name; + std::list> m_children{}; std::list> m_components{}; @@ -125,9 +130,6 @@ template void Object::deleteComponent() if (std::is_base_of::value == false) { throw std::runtime_error("deleteComponent() error: specified type is not a subclass of 'Component'"); } - if (std::is_same::value) { - throw std::runtime_error("deleteComponent() error: attempt to remove the 'Transform' component"); - } for (auto itr = m_components.begin(); itr != m_components.end(); ++itr) { if (dynamic_cast((*itr).get()) != nullptr) { m_components.erase(itr); diff --git a/include/transform.hpp b/include/transform.hpp new file mode 100644 index 0000000..b7effe9 --- /dev/null +++ b/include/transform.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "export.h" + +#include +#include +#include + +struct ENGINE_API Transform { + +// Scale, rotate (XYZ), translate + + glm::vec3 position{0.0f}; + glm::quat rotation{}; + glm::vec3 scale{1.0f}; + +}; \ No newline at end of file diff --git a/src/components/transform.cpp b/src/components/transform.cpp deleted file mode 100644 index 7a3cd97..0000000 --- a/src/components/transform.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "components/transform.hpp" - -#include - -namespace components { - -Transform::Transform(Object* parent) : Component(parent, TypeEnum::TRANSFORM) -{ - -} - -Transform::~Transform() -{ -} - -} diff --git a/src/object.cpp b/src/object.cpp index 6ec1790..f81c599 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1,6 +1,5 @@ #include "object.hpp" -#include "components/transform.hpp" #include "components/camera.hpp" #include "components/mesh_renderer.hpp" #include "components/text_ui_renderer.hpp" @@ -18,8 +17,6 @@ Object::Object(std::string name, Object* parent, SceneRoot& root, struct GameIO res(*things.resMan) { s_object_count++; - // all objects come with at least a transform component - createComponent(); } Object::~Object() @@ -98,16 +95,16 @@ void Object::getAllSubComponents(struct CompList& compList, glm::mat4 parentTran glm::mat4 objTransform{1.0f}; - auto t = getComponent(); + auto t = transform; // rotation - objTransform = glm::mat4_cast(t->rotation); + objTransform = glm::mat4_cast(t.rotation); // position - reinterpret_cast(objTransform[3]) = t->position; + reinterpret_cast(objTransform[3]) = t.position; // scale (effectively applied first - objTransform = glm::scale(objTransform, t->scale); + objTransform = glm::scale(objTransform, t.scale); const glm::mat4 newTransform = parentTransform * objTransform; diff --git a/src/sceneroot.cpp b/src/sceneroot.cpp index 2a3797c..3ceba42 100644 --- a/src/sceneroot.cpp +++ b/src/sceneroot.cpp @@ -4,7 +4,6 @@ #include "components/custom.hpp" #include "components/camera.hpp" -#include "components/transform.hpp" #include "components/mesh_renderer.hpp" #include "components/text_ui_renderer.hpp"