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 }},
- .hittable={ .damaging=true, .hits={ .max_hits=1 }, .damage={ .amount=1, .type=0 }},
- .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)
{
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();
}