]> git.tdb.fi Git - libs/game.git/blob - examples/bassteroids/source/bassteroids.cpp
Load the various setups through resources
[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 #include "setups.h"
12
13 using namespace Msp;
14
15 BassteroidsResources::BassteroidsResources()
16 {
17         add_type<AsteroidSetup>().suffix(".roid.setup");
18         add_type<BulletSetup>().suffix(".bullet.setup");
19         add_type<ShipSetup>().suffix(".ship.setup");
20 }
21
22
23 Bassteroids::Bassteroids(int, char **):
24         event_observer(director.get_event_bus()),
25         game_stage(director.create_stage()),
26         pf_setup({ .size={ 80, 45 }}),
27         playfield(game_stage.get_root(), pf_setup),
28         cam_entity(game_stage.get_root(), Game::TransformValues()),
29         camera(cam_entity, resources.get<Game::CameraSetup>("main.camera.setup"))
30 {
31         game_stage.add_system<GameController>();
32         game_stage.add_system<Physics>();
33         game_stage.add_system<DamageDealer>();
34         game_stage.add_system<Game::TransformPropagator>();
35         player_controller = &game_stage.add_system<PlayerController>();
36
37         event_observer.observe<GameView::Events::PlayerArrived>([this](auto &e){ player_arrived(e); });
38
39         player_input.set_control_scheme_type<Controls>(GameView::PlayerInput::ONE_LOCAL_PLAYER);
40
41         director.activate_stage(game_stage);
42 }
43
44 void Bassteroids::player_arrived(const GameView::Events::PlayerArrived &event)
45 {
46         player_controller->set_controls(static_cast<Controls *>(&event.controls));
47 }