]> git.tdb.fi Git - libs/game.git/blobdiff - examples/bassteroids/source/playercontroller.cpp
Load the various setups through resources
[libs/game.git] / examples / bassteroids / source / playercontroller.cpp
index 066b5f24d002b01f5e68824d620753651ba7bf6a..54f7520a1a4f7bf93a1056addfa20c6df1f51fa8 100644 (file)
@@ -8,12 +8,12 @@ using namespace Msp;
 
 PlayerController::PlayerController(Game::Stage &s):
        System(s),
-       player_setup{ .physical={ .body={ .mass=1, .moment_of_inertia=0.8f }, .collider={ .type=ColliderType::CIRCLE, .radius=0.8f }},
-               .mesh={ .object_name="Bass guitar.object" },
-               .speed=12.0f, .turn_rate=4.71f },
-       bullet_setup{ .physical={ .body={ .mass=0.05f, .moment_of_inertia=0.04f }, .collider={ .type=ColliderType::CIRCLE, .radius=0.2f }},
-               .mesh={ .object_name="Quaver.object" }}
-}
+       player_setup(stage.get_resources().get<ShipSetup>("player.ship.setup")),
+       bullet_setup(stage.get_resources().get<BulletSetup>("quaver.bullet.setup"))
+{
+       declare_dependency<Game::Transform>(READ_OLD);
+       declare_dependency<RigidBody>(UPDATE);
+}
 
 void PlayerController::set_controls(Controls *c)
 {
@@ -50,11 +50,17 @@ void PlayerController::tick(Time::TimeDelta dt)
                body->add_torque(angular_vel.radians()*-min(angular_speed.radians()+setup.turn_rate/angular_speed.radians(), 1.0f/dt_secs));
 
        if(controls->fire.was_pressed())
-               fire();
+               defer([this]{ fire(); });
 
        controls->reset_edges();
 }
 
+void PlayerController::deferred_tick()
+{
+       System::deferred_tick();
+       erase_if(bullets, [](Game::Handle<Bullet> b){ return !b->get_hitpoints()->is_alive(); });
+}
+
 void PlayerController::fire()
 {
        Game::Handle<Game::Transform> player_tf = player_ship->get_transform();