Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/base/game.cc')
-rw-r--r--src/game/base/game.cc43
1 files changed, 38 insertions, 5 deletions
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");