]> git.tdb.fi Git - libs/game.git/blob - examples/bassteroids/source/bassteroids.cpp
d6f255609c9f06e188886a4bba6ac2b03aaf3a03
[libs/game.git] / examples / bassteroids / source / bassteroids.cpp
1 #include "bassteroids.h"
2 #include <msp/game/root.h>
3 #include <msp/game/stage.h>
4 #include <msp/game/transform.h>
5 #include <msp/game/transformpropagator.h>
6 #include "controls.h"
7 #include "damagedealer.h"
8 #include "gamecontroller.h"
9 #include "physics.h"
10 #include "playercontroller.h"
11
12 using namespace Msp;
13
14 Bassteroids::Bassteroids(int, char **):
15         event_observer(director.get_event_bus()),
16         game_stage(director.create_stage()),
17         pf_setup({ .size={ 80, 45 }}),
18         playfield(game_stage.get_root(), pf_setup),
19         cam_setup({ .field_of_view_y=Geometry::Angle<float>::zero(), .size={ 80, 45 }, .near_clip=-30, .far_clip=30, .sequence_name="space.seq" }),
20         cam_entity(game_stage.get_root(), Game::TransformValues()),
21         camera(const_cast<const Game::Owned<Game::Entity> &>(cam_entity), cam_setup)
22 {
23         game_stage.add_system<GameController>();
24         game_stage.add_system<Physics>();
25         game_stage.add_system<DamageDealer>();
26         game_stage.add_system<Game::TransformPropagator>();
27         player_controller = &game_stage.add_system<PlayerController>();
28
29         event_observer.observe<GameView::Events::PlayerArrived>([this](auto &e){ player_arrived(e); });
30
31         player_input.set_control_scheme_type<Controls>(GameView::PlayerInput::ONE_LOCAL_PLAYER);
32
33         director.activate_stage(game_stage);
34 }
35
36 void Bassteroids::player_arrived(const GameView::Events::PlayerArrived &event)
37 {
38         player_controller->set_controls(static_cast<Controls *>(&event.controls));
39 }