+ if(abs(angular_speed.radians())>1e-5)
+ 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();
+
+ controls->reset_edges();
+}
+
+void PlayerController::fire()
+{
+ Game::Handle<Game::Transform> player_tf = player_ship->get_transform();
+ Game::Handle<RigidBody> player_body = player_ship->get_body();
+
+ bullets.emplace_back(stage.get_root(), bullet_setup);
+ Game::Handle<Bullet> bullet = bullets.back();
+ Game::Handle<Game::Transform> bullet_tf = bullet->get_transform();
+ bullet_tf->set_position((player_tf->get_world_matrix()*LinAl::Vector<float, 4>(2.0f, 0.0f, 0.0f, 1.0f)).slice<3>(0));
+ bullet_tf->set_rotation(player_tf->get_rotation()*Geometry::Quaternion<float>::rotation(Geometry::Angle<float>::from_degrees(10), LinAl::Vector<float, 3>(0.0f, 0.0f, 1.0f)));
+ Game::Handle<RigidBody> bullet_body = bullet->get_body();
+ bullet_body->set_velocity(player_body->get_velocity()+(player_tf->get_world_matrix()*LinAl::Vector<float, 4>(20.0f, 0.0f, 0.0f, 0.0f)).slice<2>(0));