diff options
author | Stijn Buys <ingar@osirion.org> | 2008-12-28 12:33:04 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-12-28 12:33:04 +0000 |
commit | 4e1d951705204899ee99d7fcedf582b25b86b506 (patch) | |
tree | 03cb919ff062368dfc334b9f71b932cf89e31517 /src/game/base/game.cc | |
parent | 82c63c49134a6fca91d908792438e6284dc4cebf (diff) |
generic docking API,
race activating requires docking
Diffstat (limited to 'src/game/base/game.cc')
-rw-r--r-- | src/game/base/game.cc | 34 |
1 files changed, 4 insertions, 30 deletions
diff --git a/src/game/base/game.cc b/src/game/base/game.cc index 8a096b2..756985c 100644 --- a/src/game/base/game.cc +++ b/src/game/base/game.cc @@ -169,7 +169,7 @@ void Game::func_impulse(core::Player *player, std::string const &args) } // a player sends a docking request -void Game::func_dock(core::Player *player,core::Entity *entity) +void Game::func_dock(core::Player *player, core::Entity *entity) { if (!player->control()) return; @@ -180,37 +180,11 @@ void Game::func_dock(core::Player *player,core::Entity *entity) if ((entity->flags() & core::Entity::Dockable) == 0) return; - if (player->control()->eventstate() == core::Entity::Docked) + if (player->control()->eventstate() != core::Entity::Normal) return; - if (math::distance(entity->location(), player->control()->location()) > 2.0f * (entity->radius()+player->control()->radius())) { - player->send("Target out of range"); - return; - } - - if (entity->moduletype() == jumpgate_enttype) { - JumpGate *jumpgate = static_cast<JumpGate *>(entity); - if (jumpgate->target()) { - if (jumpgate->activated()) { - player->send("Jumpgate in use"); - return; - } - player->set_view(jumpgate); - Ship * ship = static_cast<Ship *>(player->control()); - ship->initiate_jump(jumpgate); - jumpgate->activate(); - if (jumpgate->target()->moduletype() == jumpgate_enttype) { - static_cast<JumpGate *>(jumpgate->target())->activate(); - } - } else { - player->send("Jumpgate inactive."); - } - } else { - - player->control()->location().assign(entity->location()); - player->control()->set_eventstate(core::Entity::Docked); - player->set_view(entity); - player->send("^BDocking at " + entity->name()); + if ((entity->flags() & core::Entity::Dockable) == core::Entity::Dockable) { + entity->dock(player->control()); } } |