diff options
author | Max-001 <80035972+Max-001@users.noreply.github.com> | 2024-09-25 21:08:54 +0200 |
---|---|---|
committer | Max-001 <80035972+Max-001@users.noreply.github.com> | 2024-09-25 21:08:54 +0200 |
commit | 5458abaca5f01a4d34bb55b1b44dc4fb4e9890be (patch) | |
tree | a23e35dc95c69aced7d4e16550a2b4fff8507a6c /mwe/ecs-homemade/src | |
parent | 918392ec503a66e369fffa3a5a49c8afccf96a62 (diff) |
Made a homemade ECS
Diffstat (limited to 'mwe/ecs-homemade/src')
-rw-r--r-- | mwe/ecs-homemade/src/ComponentManager.cpp | 9 | ||||
-rw-r--r-- | mwe/ecs-homemade/src/Components.cpp | 10 | ||||
-rw-r--r-- | mwe/ecs-homemade/src/GameObjectMax.cpp | 5 | ||||
-rw-r--r-- | mwe/ecs-homemade/src/main.cpp | 36 |
4 files changed, 59 insertions, 1 deletions
diff --git a/mwe/ecs-homemade/src/ComponentManager.cpp b/mwe/ecs-homemade/src/ComponentManager.cpp new file mode 100644 index 0000000..287da38 --- /dev/null +++ b/mwe/ecs-homemade/src/ComponentManager.cpp @@ -0,0 +1,9 @@ +#include "ComponentManager.h" + +ComponentManager ComponentManager::mInstance; + +ComponentManager& ComponentManager::GetInstance() { + return mInstance; +} + +ComponentManager::ComponentManager() {} diff --git a/mwe/ecs-homemade/src/Components.cpp b/mwe/ecs-homemade/src/Components.cpp new file mode 100644 index 0000000..3aece4b --- /dev/null +++ b/mwe/ecs-homemade/src/Components.cpp @@ -0,0 +1,10 @@ +#include "Components.h" +#include <iostream> + +Component::Component() : mActive(true) {} + +void Sprite::Render() { + std::cout << "Rendering sprite" << std::endl; +} + +Rigidbody::Rigidbody(int mass, int gravityScale, int bodyType) : mMass(mass), mGravityScale(gravityScale), mBodyType(bodyType) {} diff --git a/mwe/ecs-homemade/src/GameObjectMax.cpp b/mwe/ecs-homemade/src/GameObjectMax.cpp new file mode 100644 index 0000000..62c41de --- /dev/null +++ b/mwe/ecs-homemade/src/GameObjectMax.cpp @@ -0,0 +1,5 @@ +#include "GameObjectMax.h" + +#include "ComponentManager.h" + +GameObject::GameObject(std::uint32_t id, std::string name, std::string tag, int layer) : mId(id), mName(name), mTag(tag), mActive(true), mLayer(layer) {} diff --git a/mwe/ecs-homemade/src/main.cpp b/mwe/ecs-homemade/src/main.cpp index f8b829c..3dd082f 100644 --- a/mwe/ecs-homemade/src/main.cpp +++ b/mwe/ecs-homemade/src/main.cpp @@ -1,5 +1,39 @@ #include <iostream> +#include <vector> +#include <cstdint> + +#include "ComponentManager.h" +#include "GameObjectMax.h" +#include "Components.h" int main() { - std::cout << "Hello, world!" << std::endl; + GameObject gameObect0(0, "Name: 0", "Tag: 0", 0); //Entity 0 + GameObject gameObect1(1, "Name: 1", "Tag: 1", 1); //Entity 1 + + Sprite sprite0; + Rigidbody rigidbody0(1, 2, 3); + gameObect0.AddComponent<Sprite>(&sprite0); //Add a sprite to entity0 + gameObect0.AddComponent<Rigidbody>(&rigidbody0); //Also add a rigidbody to entity0 + + Rigidbody rigidbody1(4, 5, 6); + gameObect1.AddComponent<Rigidbody>(&rigidbody1); //Only add a rigidbody to entity1 + + //The entities are now initialized + //Now I will demonstrate some ways of retreiving/getting components + + Rigidbody* rigidbodyOfEntity0 = ComponentManager::GetInstance().GetComponent<Rigidbody>(gameObect0.mId); //Get the pointer to the Rigidbody component of entity 0 + std::cout << "rigidbodyOfEntity0: " << rigidbodyOfEntity0->mMass << " " << rigidbodyOfEntity0->mGravityScale << " " << rigidbodyOfEntity0->mBodyType << std::endl; + std::cout << std::endl; + + std::vector<std::uint32_t> rigidbodyIDs = ComponentManager::GetInstance().GetAllComponentIDs<Rigidbody>(); //Get all the IDs that have a Rigidbody component + for(std::uint32_t ID : rigidbodyIDs) { + std::cout << "Rigidbody ID: " << ID << std::endl; + } + std::cout << std::endl; + + std::vector<Rigidbody*> rigidbodyComponents = ComponentManager::GetInstance().GetAllComponentPointer<Rigidbody>(); //Get all the pointers to the Rigidbody component(s) + for(Rigidbody* rigidbody : rigidbodyComponents) { + std::cout << "rigidbody: " << rigidbody->mMass << " " << rigidbody->mGravityScale << " " << rigidbody->mBodyType << std::endl; + } + std::cout << std::endl; } |