diff options
-rw-r--r-- | src/game/base/game.cc | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/game/base/game.cc b/src/game/base/game.cc index 18b5497..c171711 100644 --- a/src/game/base/game.cc +++ b/src/game/base/game.cc @@ -832,13 +832,26 @@ void Game::func_goto(core::Player *player, const std::string &args) Ship *ship = static_cast<Ship *>(player->control()); if (dock) { - if (dock->type() == core::Entity::Globe) + if (dock->type() == core::Entity::Globe) { + // target is a planet: keep a safe distance ship->get_location().assign(dock->location() + (dock->axis().forward() *(planet_safe_distance + ship->radius() + dock->radius()))); - else - ship->get_location().assign(dock->location() + (dock->axis().forward() *(ship->radius() + dock->radius()))); + ship->get_axis().assign(dock->axis()); + ship->get_axis().change_direction(180.0f); - ship->get_axis().assign(dock->axis()); - ship->get_axis().change_direction(180.0f); + } if (dock->type() == core::Entity::Controlable) { + // target is a controlable: appear above it + + // FIxME target might be docked -> requires ship docked_at awareness + // we might want to match the target's state() and speed() + ship->get_location().assign(dock->location() + (dock->axis().up() *(ship->radius() + dock->radius()))); + ship->get_axis().assign(dock->axis()); + + } else { + // targe is something else, appear in front of it + ship->get_location().assign(dock->location() + (dock->axis().forward() *(ship->radius() + dock->radius()))); + ship->get_axis().assign(dock->axis()); + ship->get_axis().change_direction(180.0f); + } ship->set_state(core::Entity::Normal); ship->reset(); |