From fd778219e40c5fbb4d0af1839cbc313caaf10d9d Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 28 Sep 2008 15:05:13 +0000 Subject: move base game module to new subdirectory --- src/game/racetrack.cc | 195 -------------------------------------------------- 1 file changed, 195 deletions(-) delete mode 100644 src/game/racetrack.cc (limited to 'src/game/racetrack.cc') diff --git a/src/game/racetrack.cc b/src/game/racetrack.cc deleted file mode 100644 index cfacb82..0000000 --- a/src/game/racetrack.cc +++ /dev/null @@ -1,195 +0,0 @@ -/* - game/racetrack.cc - This file is part of the Osirion project and is distributed under - the terms and conditions of the GNU General Public License version 2 -*/ - -#include -#include - -#include "game/racetrack.h" -#include "core/gameserver.h" - -namespace game { - -/* ---- class CheckPoint ------------------------------------------- */ - -CheckPoint::CheckPoint(RaceTrack *parent) -{ - entity_eventstate = core::Entity::NoPower; - parent_track = parent; - if (parent) { - entity_color = parent->color(); - entity_color_second = parent->color_second(); - set_zone(parent->zone()); - parent->add_checkpoint(this); - } else { - die(); - } -} - -CheckPoint::~CheckPoint() -{ - -} - -/* ---- class RaceTrack -------------------------------------------- */ - -RaceTrack::RaceTrack() -{ - track_player = 0; - track_racestart = 0; - track_checkpointtime = 0; - - entity_eventstate = core::Entity::NoPower; -} - -RaceTrack::~RaceTrack() -{ - track_checkpoints.clear(); -} - -void RaceTrack::add_checkpoint(CheckPoint *checkpoint) -{ - track_checkpoints.push_back(checkpoint); -} - -void RaceTrack::reset() -{ - if (track_player) { - track_player->set_mission_target(0); - } - track_player = 0; - track_racestart = 0; - track_checkpointtime = 0; - - for (CheckPoints::iterator cpit = track_checkpoints.begin(); cpit != track_checkpoints.end(); ++cpit) { - (*cpit)->set_eventstate(core::Entity::NoPower); - } - - set_eventstate(core::Entity::NoPower); -} - -void RaceTrack::frame(float seconds) -{ - if (!track_checkpoints.size()) - return; - - if (!track_player) { - - // FIXME this should go through proper collision detection - for (core::GameServer::Players::iterator it = core::server()->players().begin(); it != core::server()->players().end(); ++it) { - if ((*it)->control() && (*it)->control()->zone() == zone()) { - if (math::distance((*it)->control()->location(), location()) <= 1) { - track_player = (*it); - - track_racestart = core::server()->time(); - set_eventstate(core::Entity::Normal); - - for (CheckPoints::iterator cpit = track_checkpoints.begin(); cpit != track_checkpoints.end(); ++cpit) { - set_eventstate(core::Entity::Normal); - } - - entity_timer = 5.0f; - std::string message("^B"); - message.append(track_player->name()); - message.append(" ^Bactivated the race! Race starts in 5..."); - core::server()->broadcast(message); - track_player->set_mission_target(this); - return; - } - } - } - - return; - } - - // FIXME this should go into a proper general function - // validate current player - core::Player *player = 0; - for (core::GameServer::Players::iterator pit = core::server()->players().begin(); (!player) && (pit != core::server()->players().end()); ++pit) { - if ((*pit) == track_player) { - player = (*pit); - } - } - - if (!player) { - reset(); - return; - } - - if (!player->control() || (player->control()->zone() != zone())) { - reset(); - return; - } - - if (entity_timer) { - - if (math::distance(player->control()->location(), location()) > 1) { - std::string message("^BNo cheating!"); - core::server()->broadcast(message); - reset(); - return; - } - - if (track_racestart + 1.0f <= core::server()->time()) { - entity_timer -= 1.0f; - entity_dirty = true; - - if (entity_timer > 0) { - std::stringstream msgstr; - msgstr << "^B" << entity_timer << "..."; - core::server()->broadcast(msgstr.str()); - track_racestart = core::server()->time(); - } else { - for (CheckPoints::iterator cpit = track_checkpoints.begin(); cpit != track_checkpoints.end(); ++cpit) { - (*cpit)->set_eventstate(core::Entity::NoPower); - } - std::string message("^BGo!"); - core::server()->broadcast(message); - - track_racestart = core::server()->time(); - track_checkpointtime = core::server()->time() + 15.0f; - track_checkpoint = track_checkpoints.begin(); - (*track_checkpoint)->set_eventstate(core::Entity::Normal); - track_player->set_mission_target((*track_checkpoint)); - } - } - - - } else { - - if (core::server()->time() > track_checkpointtime) { - std::string message("^BToo slow, race lost!"); - core::server()->broadcast(message); - - reset(); - return; - } - - if (math::distance(track_player->control()->location(), (*track_checkpoint)->location()) <= 1) { - CheckPoints::iterator next_checkpoint = track_checkpoint; - next_checkpoint++; - - if (next_checkpoint != track_checkpoints.end()) { - - std::string message("^BCheckpoint!"); - core::server()->broadcast(message); - track_checkpointtime = core::server()->time() + 15.0f; - (*track_checkpoint)->set_eventstate(core::Entity::NoPower); - track_checkpoint++; - (*track_checkpoint)->set_eventstate(core::Entity::Normal); - track_player->set_mission_target((*track_checkpoint)); - - } else { - - std::stringstream msgstr; - msgstr << "^BRace completed in " << core::server()->time() - track_racestart << " seconds!"; - core::server()->broadcast(msgstr.str()); - reset(); - } - } - } -} - -} -- cgit v1.2.3