diff options
Diffstat (limited to 'src/example')
-rw-r--r-- | src/example/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/example/ecs.cpp | 56 | ||||
-rw-r--r-- | src/example/particle.cpp | 2 | ||||
-rw-r--r-- | src/example/physics.cpp | 10 | ||||
-rw-r--r-- | src/example/rendering.cpp | 21 | ||||
-rw-r--r-- | src/example/script.cpp | 8 |
6 files changed, 65 insertions, 33 deletions
diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt index fea6f60..81df8d1 100644 --- a/src/example/CMakeLists.txt +++ b/src/example/CMakeLists.txt @@ -24,3 +24,4 @@ add_example(rendering) add_example(asset_manager) add_example(particle) add_example(physics) +add_example(ecs) diff --git a/src/example/ecs.cpp b/src/example/ecs.cpp new file mode 100644 index 0000000..5646edd --- /dev/null +++ b/src/example/ecs.cpp @@ -0,0 +1,56 @@ +#include <iostream> + +#include "../crepe/ComponentManager.h" +#include "../crepe/Metadata.h" +#include "../crepe/api/GameObject.h" +#include "../crepe/api/Transform.h" + +using namespace crepe::api; +using namespace crepe; +using namespace std; + +int main() { + // Create a few GameObjects + try { + GameObject body(0, "body", "person", Point{0, 0}, 0, 1); + GameObject rightLeg(1, "rightLeg", "person", Point{1, 1}, 0, 1); + GameObject leftLeg(2, "leftLeg", "person", Point{1, 1}, 0, 1); + GameObject rightFoot(3, "rightFoot", "person", Point{2, 2}, 0, 1); + GameObject leftFoot(4, "leftFoot", "person", Point{2, 2}, 0, 1); + + // Set the parent of each GameObject + rightFoot.set_parent(rightLeg); + leftFoot.set_parent(leftLeg); + rightLeg.set_parent(body); + leftLeg.set_parent(body); + + // Adding a second Transform component is not allowed and will invoke an exception + body.add_component<Transform>(Point{10, 10}, 0, 1); + } catch (const exception & e) { + cerr << e.what() << endl; + } + + // Get the Metadata and Transform components of each GameObject + ComponentManager & mgr = ComponentManager::get_instance(); + vector<reference_wrapper<Metadata>> metadata + = mgr.get_components_by_type<Metadata>(); + vector<reference_wrapper<Transform>> transform + = mgr.get_components_by_type<Transform>(); + + // Print the Metadata and Transform components + for (auto & m : metadata) { + cout << "Id: " << m.get().game_object_id << " Name: " << m.get().name + << " Tag: " << m.get().tag << " Parent: " << m.get().parent + << " Children: "; + for (auto & c : m.get().children) { + cout << c << " "; + } + cout << endl; + } + for (auto & t : transform) { + cout << "Id: " << t.get().game_object_id << " Position: [" + << t.get().position.x << ", " << t.get().position.y << "]" << endl; + } + + return 0; +} diff --git a/src/example/particle.cpp b/src/example/particle.cpp index 53fa213..fe8a43b 100644 --- a/src/example/particle.cpp +++ b/src/example/particle.cpp @@ -25,7 +25,7 @@ int main(int argc, char * argv[]) { } GameObject * game_object[1]; - game_object[0] = new GameObject(0, "Name", "Tag", 0); + game_object[0] = new GameObject(0, "Name", "Tag", Point{0, 0}, 0, 1); // FIXME: all systems are singletons, so this shouldn't even compile. ParticleSystem particle_system; diff --git a/src/example/physics.cpp b/src/example/physics.cpp index db69b9b..1bafdf3 100644 --- a/src/example/physics.cpp +++ b/src/example/physics.cpp @@ -16,13 +16,9 @@ using namespace std; int main(int argc, char * argv[]) { PhysicsSystem physics_system; GameObject * game_object[2]; - game_object[1] = new GameObject(2, "Name", "Tag", 0); // not found not used - game_object[0] = new GameObject(5, "Name", "Tag", 0); - Point point = { - .x = 0, - .y = 0, - }; - game_object[0]->add_component<Transform>(point, 0, 0); + // not found not used + game_object[1] = new GameObject(2, "Name", "Tag", Point{0, 0}, 0, 0); + game_object[0] = new GameObject(5, "Name", "Tag", Point{0, 0}, 0, 0); game_object[0]->add_component<Rigidbody>(1, 1, BodyType::DYNAMIC); game_object[0]->add_component<Force>(1, 0); physics_system.update(); diff --git a/src/example/rendering.cpp b/src/example/rendering.cpp index 1bf448c..9624093 100644 --- a/src/example/rendering.cpp +++ b/src/example/rendering.cpp @@ -23,19 +23,14 @@ int main() { dbg_trace(); - auto obj = GameObject(0, "name", "tag", 0); - auto obj1 = GameObject(1, "name", "tag", 0); - auto obj2 = GameObject(2, "name", "tag", 0); + auto obj = GameObject(0, "name", "tag", Point{0, 0}, 1, 1); + auto obj1 = GameObject(1, "name", "tag", Point{500, 0}, 1, 0.1); + auto obj2 = GameObject(2, "name", "tag", Point{800, 0}, 1, 0.1); auto & mgr = AssetManager::get_instance(); // Normal adding components { Color color(0, 0, 0, 0); - Point point = { - .x = 0, - .y = 0, - }; - obj.add_component<Transform>(point, 1, 1); obj.add_component<Sprite>( make_shared<Texture>("../asset/texture/img.png"), color, FlipSettings{true, true}); @@ -43,22 +38,12 @@ int main() { { Color color(0, 0, 0, 0); - Point point = { - .x = 500, - .y = 0, - }; - obj1.add_component<Transform>(point, 0, 0.1); auto img = mgr.cache<Texture>("../asset/texture/second.png"); obj1.add_component<Sprite>(img, color, FlipSettings{true, true}); } { Color color(0, 0, 0, 0); - Point point = { - .x = 800, - .y = 0, - }; - //obj.add_component<Transform>(point, 0, 0.1); auto img = mgr.cache<Texture>("../asset/texture/second.png"); obj2.add_component<Sprite>(img, color, FlipSettings{true, true}); } diff --git a/src/example/script.cpp b/src/example/script.cpp index 5df26e8..e4c8319 100644 --- a/src/example/script.cpp +++ b/src/example/script.cpp @@ -37,13 +37,7 @@ class MyScript : public Script { int main() { // Create game object with Transform and BehaviorScript components - auto obj = GameObject(0, "name", "tag", 0); - obj.add_component<Transform>( - Point{ - .x = 1.2, - .y = 3.4, - }, - 0, 0); + auto obj = GameObject(0, "name", "tag", Point{1.2, 3.4}, 0, 1); obj.add_component<BehaviorScript>().set_script<MyScript>(); // Get ScriptSystem singleton instance (this would normally be done from the |