diff options
Diffstat (limited to 'mwe/ecs-homemade/inc')
| -rw-r--r-- | mwe/ecs-homemade/inc/ComponentManager.h | 48 | ||||
| -rw-r--r-- | mwe/ecs-homemade/inc/ComponentManager.hpp | 88 | ||||
| -rw-r--r-- | mwe/ecs-homemade/inc/Components.h | 29 | ||||
| -rw-r--r-- | mwe/ecs-homemade/inc/GameObjectMax.h | 20 | ||||
| -rw-r--r-- | mwe/ecs-homemade/inc/GameObjectMax.hpp | 6 | 
5 files changed, 0 insertions, 191 deletions
| diff --git a/mwe/ecs-homemade/inc/ComponentManager.h b/mwe/ecs-homemade/inc/ComponentManager.h deleted file mode 100644 index 893aa56..0000000 --- a/mwe/ecs-homemade/inc/ComponentManager.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -#include "Components.h" -#include <cstdint> -#include <unordered_map> -#include <vector> -#include <typeindex> -#include <memory> -#include <utility> - -class ComponentManager { -public: -	static ComponentManager& GetInstance();	//Singleton - -	ComponentManager(const ComponentManager&) = delete;	//Singleton -    ComponentManager(ComponentManager&&) = delete;	//Singleton -    ComponentManager& operator=(const ComponentManager&) = delete;	//Singleton -    ComponentManager& operator=(ComponentManager&&) = delete;	//Singleton - -	template <typename T, typename... Args> -	void AddComponent(std::uint32_t id, Args&&... args);	//Add a component of a specific type -	template <typename T> -	void DeleteComponentsById(std::uint32_t id);	//Deletes all components of a specific type and id -	template <typename T> -	void DeleteComponents();	//Deletes all components of a specific type -	void DeleteAllComponentsOfId(std::uint32_t id);	//Deletes all components of a specific id -	void DeleteAllComponents();	//Deletes all components - -	template <typename T> -    std::vector<std::reference_wrapper<T>> GetComponentsByID(std::uint32_t id) const;	//Get a vector<> of all components at specific type and id -	template <typename T> -	std::vector<std::pair<std::reference_wrapper<T>, std::uint32_t>> GetComponentsByType() const;	//Get a vector<> of all components of a specific type - -private: -    static ComponentManager mInstance;	//Singleton - -    ComponentManager();	//Singleton - -	/* -	 * The std::unordered_map<std::type_index, std::vector<std::vector<std::unique_ptr<Component>>>> below might seem a bit strange, let me explain this structure: -	 * The std::unordered_map<> has a key and value. The key is a std::type_index and the value is a std::vector. So, a new std::vector will be created for each new std::type_index. -	 * The first std::vector<> stores another vector<>. This first vector<> is to bind the entity's id to a component. -	 * The second std::vector<> stores unique_ptrs. Each component can be gathered via an unique_ptr. This second vector<> allows multiple components of the same std::type_index for one entity (id). -	 */ -	std::unordered_map<std::type_index, std::vector<std::vector<std::unique_ptr<Component>>>> mComponents; -}; - -#include "ComponentManager.hpp" diff --git a/mwe/ecs-homemade/inc/ComponentManager.hpp b/mwe/ecs-homemade/inc/ComponentManager.hpp deleted file mode 100644 index 53dfddd..0000000 --- a/mwe/ecs-homemade/inc/ComponentManager.hpp +++ /dev/null @@ -1,88 +0,0 @@ - -template <typename T, typename... Args> -void ComponentManager::AddComponent(std::uint32_t id, Args&&... args) { -    std::type_index type = typeid(T);	//Determine the type of T (this is used as the key of the unordered_map<>) - -    if (mComponents.find(type) == mComponents.end()) {	//Check if this component type is already in the unordered_map<> -        mComponents[type] = std::vector<std::vector<std::unique_ptr<Component>>>();	//If not, create a new (empty) vector<> of vector<unique_ptr<Component>> -    } - -    if (id >= mComponents[type].size()) {	//Resize the vector<> if the id is greater than the current size -        mComponents[type].resize(id + 1);	//Initialize new slots to nullptr (resize does automatically init to nullptr) -    } - -    mComponents[type][id].push_back(std::make_unique<T>(std::forward<Args>(args)...));	//Create a new component of type T using perfect forwarding and store its unique_ptr in the vector<> -} - -template <typename T> -void ComponentManager::DeleteComponentsById(std::uint32_t id) { -	std::type_index type = typeid(T);	//Determine the type of T (this is used as the key of the unordered_map<>) - -	if (mComponents.find(type) != mComponents.end()) {	//Find the type (in the unordered_map<>) -		std::vector<std::vector<std::unique_ptr<Component>>>& componentArray = mComponents[type];	//Get the correct vector<> - -        if (id < componentArray.size()) {	//Make sure that the id (that we are looking for) is within the boundaries of the vector<> -            componentArray[id].clear();	//Clear the whole vector<> of this specific type and id -        } -	} -} - -template <typename T> -void ComponentManager::DeleteComponents() { -	std::type_index type = typeid(T);	//Determine the type of T (this is used as the key of the unordered_map<>) - -	if (mComponents.find(type) != mComponents.end()) {	//Find the type (in the unordered_map<>) -		mComponents[type].clear();	//Clear the whole vector<> of this specific type -	} -} - -template <typename T> -std::vector<std::reference_wrapper<T>> ComponentManager::GetComponentsByID(std::uint32_t id) const { -    std::type_index type = typeid(T);	//Determine the type of T (this is used as the key of the unordered_map<>) - -	std::vector<std::reference_wrapper<T>> componentVector;	//Create an empty vector<> - -    if (mComponents.find(type) != mComponents.end()) {	//Find the type (in the unordered_map<>) - -        const std::vector<std::vector<std::unique_ptr<Component>>>& componentArray = mComponents.at(type);	//Get the correct vector<> - -        if (id < componentArray.size()) {	//Make sure that the id (that we are looking for) is within the boundaries of the vector<> -            for (const std::unique_ptr<Component>& componentPtr : componentArray[id]) {	//Loop trough the whole vector<> -                T* castedComponent = static_cast<T*>(componentPtr.get());	//Cast the unique_ptr to a raw pointer - -                if (castedComponent) {	//Ensure that the cast was successful -                    componentVector.push_back(*castedComponent); //Add the dereferenced raw pointer to the vector<> -                } -            } -        } -    } - -    return componentVector; //Return the vector<> -} - -template <typename T> -std::vector<std::pair<std::reference_wrapper<T>, std::uint32_t>> ComponentManager::GetComponentsByType() const { -    std::type_index type = typeid(T);	//Determine the type of T (this is used as the key of the unordered_map<>) - -    std::vector<std::pair<std::reference_wrapper<T>, std::uint32_t>> componentVector;	//Create an empty vector<> -	std::uint32_t id = 0;	//Set the id to 0 (the id will also be stored in the returned vector<>) - -    if (mComponents.find(type) != mComponents.end()) {	//Find the type (in the unordered_map<>) - -        const std::vector<std::vector<std::unique_ptr<Component>>>& componentArray = mComponents.at(type);	//Get the correct vector<> - -        for (const std::vector<std::unique_ptr<Component>>& component : componentArray) {	//Loop through the whole vector<> -            for (const std::unique_ptr<Component>& componentPtr : component) {	//Loop trough the whole vector<> -                T* castedComponent = static_cast<T*>(componentPtr.get());	//Cast the unique_ptr to a raw pointer - -                if (castedComponent) {	//Ensure that the cast was successful -                    componentVector.emplace_back(std::ref(*castedComponent), id);	//Pair the dereferenced raw pointer and the id and add it to the vector<> -                } -            } - -			++id;	//Increase the id (the id will also be stored in the returned vector<>) -        } -    } - -    return componentVector;	//Return the vector<> -} diff --git a/mwe/ecs-homemade/inc/Components.h b/mwe/ecs-homemade/inc/Components.h deleted file mode 100644 index 2645a45..0000000 --- a/mwe/ecs-homemade/inc/Components.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -class Component { -public: -	Component(); - -	bool mActive; -}; - -class Sprite : public Component { -public: -	void Render(); -}; - -class Rigidbody : public Component { -public: -	Rigidbody(int mass, int gravityScale, int bodyType); - -	int mMass; -	int mGravityScale; -	int mBodyType; -}; - -class Colider : public Component { -public: -	Colider(int size); - -	int mSize; -}; diff --git a/mwe/ecs-homemade/inc/GameObjectMax.h b/mwe/ecs-homemade/inc/GameObjectMax.h deleted file mode 100644 index f0bcec9..0000000 --- a/mwe/ecs-homemade/inc/GameObjectMax.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include <cstdint> -#include <string> - -class GameObject { -public: -	GameObject(std::uint32_t id, std::string name, std::string tag, int layer); - -	template <typename T, typename... Args> -	void AddComponent(Args&&... args); - -	std::uint32_t mId; -	std::string mName; -	std::string mTag; -	bool mActive; -	int mLayer; -}; - -#include "GameObjectMax.hpp" diff --git a/mwe/ecs-homemade/inc/GameObjectMax.hpp b/mwe/ecs-homemade/inc/GameObjectMax.hpp deleted file mode 100644 index 1e952ba..0000000 --- a/mwe/ecs-homemade/inc/GameObjectMax.hpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "ComponentManager.h" - -template <typename T, typename... Args> -void GameObject::AddComponent(Args&&... args) { -	ComponentManager::GetInstance().AddComponent<T>(mId, std::forward<Args>(args)...); -} |