X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=examples%2Fbassteroids%2Fsource%2Fplayercontroller.cpp;h=46f9c1f85e30dfe710c96411a041c73455b22029;hb=cb4e8bbe06dc64aff932784541a29493723fc03e;hp=65a879d2447727277ce4da16c4b4e1f822f57aef;hpb=683858c0265e820d57bb5a1f7f21ab72b232a79d;p=libs%2Fgame.git diff --git a/examples/bassteroids/source/playercontroller.cpp b/examples/bassteroids/source/playercontroller.cpp index 65a879d..46f9c1f 100644 --- a/examples/bassteroids/source/playercontroller.cpp +++ b/examples/bassteroids/source/playercontroller.cpp @@ -12,6 +12,7 @@ PlayerController::PlayerController(Game::Stage &s): .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" }} { } @@ -55,16 +56,22 @@ void PlayerController::tick(Time::TimeDelta dt) controls->reset_edges(); } +void PlayerController::deferred_tick() +{ + System::deferred_tick(); + erase_if(bullets, [](Game::Handle b){ return !b->get_hitpoints()->is_alive(); }); +} + void PlayerController::fire() { Game::Handle player_tf = player_ship->get_transform(); Game::Handle player_body = player_ship->get_body(); - bullets.emplace_back(stage.get_root(), bullet_setup); + Game::TransformValues tv; + tv.position = (player_tf->get_world_matrix()*LinAl::Vector(2.0f, 0.0f, 0.0f, 1.0f)).slice<3>(0); + tv.rotation = player_tf->get_rotation()*Geometry::Quaternion::rotation(Geometry::Angle::from_degrees(10), LinAl::Vector(0.0f, 0.0f, 1.0f)); + bullets.emplace_back(stage.get_root(), bullet_setup, tv); Game::Handle bullet = bullets.back(); - Game::Handle bullet_tf = bullet->get_transform(); - bullet_tf->set_position((player_tf->get_world_matrix()*LinAl::Vector(2.0f, 0.0f, 0.0f, 1.0f)).slice<3>(0)); - bullet_tf->set_rotation(player_tf->get_rotation()*Geometry::Quaternion::rotation(Geometry::Angle::from_degrees(10), LinAl::Vector(0.0f, 0.0f, 1.0f))); Game::Handle bullet_body = bullet->get_body(); bullet_body->set_velocity(player_body->get_velocity()+(player_tf->get_world_matrix()*LinAl::Vector(20.0f, 0.0f, 0.0f, 0.0f)).slice<2>(0)); }