From 4c53365c16362156529c7669079e31845384589f Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sat, 7 Mar 2009 13:57:09 +0000 Subject: renamed Entity::eventstate() to Entity::state(), introduced Destroyed state --- src/game/base/game.cc | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) (limited to 'src/game/base/game.cc') diff --git a/src/game/base/game.cc b/src/game/base/game.cc index 29c36d6..b2824f5 100644 --- a/src/game/base/game.cc +++ b/src/game/base/game.cc @@ -85,7 +85,7 @@ void Game::func_join(core::Player *player, std::string const &args) if (dock) { ship->entity_location.assign(dock->location() + (dock->axis().forward() * ((ship->radius()+ dock->radius())*2.0f))); ship->entity_axis.assign(dock->axis()); - ship->set_eventstate(core::Entity::Docked); + ship->set_state(core::Entity::Docked); player->set_view(dock); } @@ -183,7 +183,7 @@ void Game::func_dock(core::Player *player, core::Entity *entity) if ((entity->flags() & core::Entity::Dockable) == 0) return; - if (player->control()->eventstate() != core::Entity::Normal) + if (player->control()->state() != core::Entity::Normal) return; if ((entity->flags() & core::Entity::Dockable) == core::Entity::Dockable) { @@ -200,7 +200,7 @@ void Game::func_launch(core::Player *player, std::string const &args) if (!player->view()) return; - if (player->control()->eventstate() != core::Entity::Docked) + if (player->control()->state() != core::Entity::Docked) return; assert(player->view()->zone() == player->control()->zone()); @@ -208,12 +208,42 @@ void Game::func_launch(core::Player *player, std::string const &args) core::Entity *dock = player->view(); player->control()->entity_location.assign(dock->location() + (dock->axis().forward() * (player->control()->radius()+ dock->radius())*2.0f)); player->control()->entity_axis.assign(dock->axis()); - player->control()->set_eventstate(core::Entity::Normal); + player->control()->set_state(core::Entity::Normal); player->set_view(0); player->send("^BLaunching from " + dock->name()); } +// respawn +void Game::func_respawn(core::Player *player, std::string const &args) +{ + if (!player->control()) + return; + + if (!(player->view() == player->control())) + return; + + if (player->control()->state() != core::Entity::Destroyed) + return; + + player->control()->set_zone(Default::zone); + core::Entity *dock = player->control()->zone()->default_view(); + if (dock) { + player->control()->entity_location.assign(dock->location() + (dock->axis().forward() * ((player->control()->radius()+ dock->radius())*2.0f))); + player->control()->entity_axis.assign(dock->axis()); + player->control()->set_state(core::Entity::Docked); + player->set_view(dock); + player->send("^BRespawning at " + dock->name()); + } else { + player->control()->location().clear(); + player->control()->axis().clear(); + player->control()->set_state(core::Entity::Normal); + player->set_view(0); + player->send("^BRespawning"); + } +} + + // instantaniously goto a specified entity within the zone void Game::func_goto(core::Player *player, const std::string &args) { @@ -233,7 +263,7 @@ void Game::func_goto(core::Player *player, const std::string &args) player->control()->entity_location.assign(dock->location() + (dock->axis().forward() * (player->control()->radius()+dock->radius())*2.0f)); player->control()->entity_axis.assign(dock->axis()); player->control()->entity_axis.change_direction(180.0f); - player->control()->set_eventstate(core::Entity::Normal); + player->control()->set_state(core::Entity::Normal); player->set_view(0); player->send("Going to " + dock->name()); } else { @@ -290,6 +320,9 @@ Game::Game() : core::Module("Project::OSiRiON", true) func = core::Func::add("launch", Game::func_launch); func->set_info("launch to space when docked"); + func = core::Func::add("respawn", Game::func_respawn); + func->set_info("respawn when your ship has been destroyed"); + func = core::Func::add("goto", Game::func_goto); func->set_info("[string] goto to an entity within the zone"); -- cgit v1.2.3