]> git.tdb.fi Git - libs/game.git/blobdiff - examples/bassteroids/source/bassteroids.cpp
Add a controllable player ship to Bassteroids
[libs/game.git] / examples / bassteroids / source / bassteroids.cpp
index 4ea600fce7543135d5643a63dbd2606acc11048f..317b6944f4ce7600b75684008862c1d85d4cb696 100644 (file)
@@ -3,12 +3,15 @@
 #include <msp/game/stage.h>
 #include <msp/game/transform.h>
 #include <msp/game/transformpropagator.h>
+#include "controls.h"
 #include "gamecontroller.h"
 #include "physics.h"
+#include "playercontroller.h"
 
 using namespace Msp;
 
 Bassteroids::Bassteroids(int, char **):
+       event_observer(director.get_event_bus()),
        game_stage(director.create_stage()),
        pf_setup({ .size={ 80, 45 }}),
        playfield(game_stage.get_root(), pf_setup),
@@ -19,6 +22,16 @@ Bassteroids::Bassteroids(int, char **):
        game_stage.add_system<GameController>();
        game_stage.add_system<Physics>();
        game_stage.add_system<Game::TransformPropagator>();
+       player_controller = &game_stage.add_system<PlayerController>();
+
+       event_observer.observe<GameView::Events::PlayerArrived>([this](auto &e){ player_arrived(e); });
+
+       player_input.set_control_scheme_type<Controls>(GameView::PlayerInput::ONE_LOCAL_PLAYER);
 
        director.activate_stage(game_stage);
 }
+
+void Bassteroids::player_arrived(const GameView::Events::PlayerArrived &event)
+{
+       player_controller->set_controls(static_cast<Controls *>(&event.controls));
+}