diff options
Diffstat (limited to 'src/example/game.cpp')
-rw-r--r-- | src/example/game.cpp | 53 |
1 files changed, 46 insertions, 7 deletions
diff --git a/src/example/game.cpp b/src/example/game.cpp index a8d6d1b..ade90c9 100644 --- a/src/example/game.cpp +++ b/src/example/game.cpp @@ -1,8 +1,10 @@ +#include "manager/ComponentManager.h" +#include "api/Scene.h" +#include "manager/Mediator.h" #include <crepe/api/BoxCollider.h> #include <crepe/api/Camera.h> #include <crepe/api/Color.h> #include <crepe/api/Event.h> -#include <crepe/api/EventManager.h> #include <crepe/api/GameObject.h> #include <crepe/api/LoopManager.h> #include <crepe/api/Rigidbody.h> @@ -21,21 +23,58 @@ class MyScript : public Script { Log::logf("Box {} script on_collision()", test.info.this_collider.game_object_id); return true; } + bool keypressed(const KeyPressEvent & test) { + Log::logf("Box script keypressed()"); + switch (test.key) { + case Keycode::A: + { + Transform & tf = this->get_component<Transform>(); + tf.position.x -= 1; + break; + } + case Keycode::W: + { + Transform & tf = this->get_component<Transform>(); + tf.position.y -= 1; + break; + } + case Keycode::S: + { + Transform & tf = this->get_component<Transform>(); + tf.position.y += 1; + break; + } + case Keycode::D: + { + Transform & tf = this->get_component<Transform>(); + tf.position.x += 1; + break; + } + default: + break; + } + return false; + } + void init() { - subscribe<CollisionEvent>( - [this](const CollisionEvent & ev) -> bool { return this->oncollision(ev); }); + Log::logf("init"); + subscribe<CollisionEvent>([this](const CollisionEvent & ev) -> bool { return this->oncollision(ev); }); + subscribe<KeyPressEvent>([this](const KeyPressEvent & ev) -> bool { return this->keypressed(ev); }); } void update() { // Retrieve component from the same GameObject this script is on } + }; class ConcreteScene1 : public Scene { public: using Scene::Scene; - + void load_scene() { - ComponentManager & mgr = this->component_manager; + + Mediator & m = this->mediator; + ComponentManager & mgr = m.component_manager; Color color(0, 0, 0, 255); float screen_size_width = 640; @@ -68,9 +107,9 @@ public: "Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1); game_object1.add_component<Rigidbody>(Rigidbody::Data{ .mass = 1, - .gravity_scale = 0.01, + .gravity_scale = 0, .body_type = Rigidbody::BodyType::DYNAMIC, - .linear_velocity = {1, 1}, + .linear_velocity = {0, 0}, .constraints = {0, 0, 0}, .elastisity_coefficient = 1, .offset = {0, 0}, |