Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-12-28 12:33:04 +0000
committerStijn Buys <ingar@osirion.org>2008-12-28 12:33:04 +0000
commit4e1d951705204899ee99d7fcedf582b25b86b506 (patch)
tree03cb919ff062368dfc334b9f71b932cf89e31517 /src/game/base/game.cc
parent82c63c49134a6fca91d908792438e6284dc4cebf (diff)
generic docking API,
race activating requires docking
Diffstat (limited to 'src/game/base/game.cc')
-rw-r--r--src/game/base/game.cc34
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());
}
}