#include <msp/game/stage.h>
#include <msp/game/transform.h>
#include <msp/game/transformpropagator.h>
+#include "controls.h"
+#include "damagedealer.h"
#include "gamecontroller.h"
#include "physics.h"
+#include "playercontroller.h"
+#include "setups.h"
using namespace Msp;
+BassteroidsResources::BassteroidsResources()
+{
+ add_type<AsteroidSetup>().suffix(".roid.setup");
+ add_type<BulletSetup>().suffix(".bullet.setup");
+ add_type<ShipSetup>().suffix(".ship.setup");
+}
+
+
Bassteroids::Bassteroids(int, char **):
+ event_observer(director.get_event_bus()),
game_stage(director.create_stage()),
- cam_setup({ .field_of_view_y=Geometry::Angle<float>::zero(), .size={ 80, 45 }, .near_clip=-30, .far_clip=30, .sequence_name="space.seq" }),
+ pf_setup({ .size={ 80, 45 }}),
+ playfield(game_stage.get_root(), pf_setup),
cam_entity(game_stage.get_root(), Game::TransformValues()),
- camera(const_cast<const Game::Owned<Game::Entity> &>(cam_entity), cam_setup)
+ camera(cam_entity, resources.get<Game::CameraSetup>("main.camera.setup"))
{
game_stage.add_system<GameController>();
game_stage.add_system<Physics>();
+ game_stage.add_system<DamageDealer>();
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));
+}