diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/crepe/ComponentManager.cpp | 2 | ||||
| -rw-r--r-- | src/crepe/ComponentManager.h | 11 | ||||
| -rw-r--r-- | src/crepe/GameObject.cpp | 2 | ||||
| -rw-r--r-- | src/crepe/GameObject.h | 3 | ||||
| -rw-r--r-- | src/example/CMakeLists.txt | 18 | ||||
| -rw-r--r-- | src/example/components_internal.cpp | 56 | 
6 files changed, 84 insertions, 8 deletions
| diff --git a/src/crepe/ComponentManager.cpp b/src/crepe/ComponentManager.cpp index b080c9d..9a3fec7 100644 --- a/src/crepe/ComponentManager.cpp +++ b/src/crepe/ComponentManager.cpp @@ -7,7 +7,7 @@ ComponentManager & ComponentManager::get_instance() {  	return instance;  } -void ComponentManager::delete_all_components_of_id(std::uint32_t id) { +void ComponentManager::delete_all_components_of_id(uint32_t id) {  	// Loop through all the types (in the unordered_map<>)  	for (auto & [type, componentArray] : components) {  		// Make sure that the id (that we are looking for) is within the boundaries of the vector<> diff --git a/src/crepe/ComponentManager.h b/src/crepe/ComponentManager.h index cf6edad..9e559dd 100644 --- a/src/crepe/ComponentManager.h +++ b/src/crepe/ComponentManager.h @@ -23,22 +23,22 @@ public:  public:  	//! Add a component of a specific type  	template <typename T, typename... Args> -	void add_component(std::uint32_t id, Args &&... args); +	void add_component(uint32_t id, Args &&... args);  	//! Deletes all components of a specific type and id  	template <typename T> -	void delete_components_by_id(std::uint32_t id); +	void delete_components_by_id(uint32_t id);  	//! Deletes all components of a specific type  	template <typename T>  	void delete_components();  	//! Deletes all components of a specific id -	void delete_all_components_of_id(std::uint32_t id); +	void delete_all_components_of_id(uint32_t id);  	//! Deletes all components  	void delete_all_components();  	//! Get a vector<> of all components at specific type and id  	template <typename T>  	std::vector<std::reference_wrapper<T>> -	get_components_by_id(std::uint32_t id) const; +	get_components_by_id(uint32_t id) const;  	//! Get a vector<> of all components of a specific type  	template <typename T>  	std::vector<std::reference_wrapper<T>> get_components_by_type() const; @@ -58,3 +58,6 @@ private:  };  } // namespace crepe + +#include "ComponentManager.hpp" + diff --git a/src/crepe/GameObject.cpp b/src/crepe/GameObject.cpp index 304f75a..de3beb6 100644 --- a/src/crepe/GameObject.cpp +++ b/src/crepe/GameObject.cpp @@ -2,6 +2,6 @@  using namespace crepe; -GameObject::GameObject(std::uint32_t id, std::string name, std::string tag, +GameObject::GameObject(uint32_t id, std::string name, std::string tag,  					   int layer)  	: id(id), name(name), tag(tag), active(true), layer(layer) {} diff --git a/src/crepe/GameObject.h b/src/crepe/GameObject.h index 114990c..d5a7c36 100644 --- a/src/crepe/GameObject.h +++ b/src/crepe/GameObject.h @@ -20,3 +20,6 @@ public:  };  } // namespace crepe + +#include "GameObject.hpp" + diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt index bcc9271..eef38fd 100644 --- a/src/example/CMakeLists.txt +++ b/src/example/CMakeLists.txt @@ -1,3 +1,17 @@ -add_executable(audio_internal EXCLUDE_FROM_ALL audio_internal.cpp) -target_link_libraries(audio_internal PUBLIC crepe) +# add_example(target_name [SOURCES...]) +function(add_example target_name) +	# if SOURCES is not specified +	if(NOT ARGV1) +		# A .cpp file with target_name exists, and should be used +		set(sources ${target_name}.cpp) +	else() +		set(sources ${ARGV}) +	endif() + +	add_executable(${target_name} EXCLUDE_FROM_ALL ${sources}) +	target_link_libraries(${target_name} PUBLIC crepe) +endfunction() + +add_example(audio_internal) +add_example(components_internal) diff --git a/src/example/components_internal.cpp b/src/example/components_internal.cpp new file mode 100644 index 0000000..821a7de --- /dev/null +++ b/src/example/components_internal.cpp @@ -0,0 +1,56 @@ +/** \file + *  + * Standalone example for usage of the internal ECS + */ + +#include <cassert> +#include <chrono> + +#include <crepe/util/log.h> +#include <crepe/ComponentManager.h> +#include <crepe/GameObject.h> +#include <crepe/Components.h> + +using namespace crepe; +using namespace std; + +#define OBJ_COUNT 100000 + +int main() { +	dbg_trace(); + +	auto & mgr = ComponentManager::get_instance(); + +  auto start_adding = chrono::high_resolution_clock::now(); + +  GameObject * game_object[OBJ_COUNT]; + +  for (int i = 0; i < OBJ_COUNT; ++i) { +    game_object[i] = new GameObject(i, "Name", "Tag", 0); + +    game_object[i]->add_component<Sprite>("test"); +    game_object[i]->add_component<Rigidbody>(0, 0, i); +    game_object[i]->add_component<Collider>(i); +  } + +  auto stop_adding = chrono::high_resolution_clock::now(); + +  auto sprites = mgr.get_components_by_type<Sprite>(); +  for (auto sprite : sprites) { +		assert(sprite.get().path == "test"); +  } + +  auto stop_looping = chrono::high_resolution_clock::now(); + +  for (int i = 0; i < OBJ_COUNT; ++i) { +    delete game_object[i]; +  } + +  auto add_time = chrono::duration_cast<chrono::microseconds>(stop_adding - start_adding); +  auto loop_time = chrono::duration_cast<chrono::microseconds>(stop_looping - stop_adding); +	printf("add time:  %ldus\n", add_time.count()); +	printf("loop time: %ldus\n", loop_time.count()); + +	return 0; +} + |