diff options
Diffstat (limited to 'src/example')
| -rw-r--r-- | src/example/CMakeLists.txt | 19 | ||||
| -rw-r--r-- | src/example/components_internal.cpp | 60 | ||||
| -rw-r--r-- | src/example/script.cpp | 33 | 
3 files changed, 110 insertions, 2 deletions
| diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt index 17e995b..f66e08a 100644 --- a/src/example/CMakeLists.txt +++ b/src/example/CMakeLists.txt @@ -1,5 +1,20 @@ -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) +add_example(script)  add_executable(particel EXCLUDE_FROM_ALL particel.cpp)  target_link_libraries(particel PUBLIC crepe) diff --git a/src/example/components_internal.cpp b/src/example/components_internal.cpp new file mode 100644 index 0000000..54ce295 --- /dev/null +++ b/src/example/components_internal.cpp @@ -0,0 +1,60 @@ +/** \file + *  + * Standalone example for usage of the internal ECS + */ + +#include <cassert> +#include <chrono> + +#include <crepe/Collider.h> +#include <crepe/Component.h> +#include <crepe/ComponentManager.h> +#include <crepe/GameObject.h> +#include <crepe/Rigidbody.h> +#include <crepe/Sprite.h> +#include <crepe/util/log.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; +} diff --git a/src/example/script.cpp b/src/example/script.cpp new file mode 100644 index 0000000..28605c7 --- /dev/null +++ b/src/example/script.cpp @@ -0,0 +1,33 @@ +/** \file + *  + * Standalone example for usage of the script component and system + */ + +#include <crepe/util/log.h> +#include <crepe/ScriptSystem.h> +#include <crepe/ComponentManager.h> +#include <crepe/GameObject.h> + +#include <crepe/api/BehaviorScript.h> + +using namespace crepe; +using namespace std; + +class MyScript : public api::BehaviorScript { +	void update() { +		dbg_trace(); +	} +}; + +int main() { +	dbg_trace(); + +	auto obj = GameObject(0, "name", "tag", 0); +	obj.add_component<MyScript>(); + +	auto & sys = ScriptSystem::get_instance(); +	sys.update(); // -> MyScript::update + +	return 0; +} + |