From 650cca5da5e15b9d4a85e7f734515f538b0cc0f3 Mon Sep 17 00:00:00 2001
From: Stijn Buys <ingar@osirion.org>
Date: Sat, 13 Nov 2010 00:31:20 +0000
Subject: fixed broken game::RaceTrack docking, made race entities NonSolid

---
 src/game/base/game.cc      |  4 +++-
 src/game/base/game.h       |  1 +
 src/game/base/racetrack.cc | 18 +++++++++++-------
 src/game/base/racetrack.h  |  4 ++--
 4 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/src/game/base/game.cc b/src/game/base/game.cc
index 30970f9..d80fb3e 100644
--- a/src/game/base/game.cc
+++ b/src/game/base/game.cc
@@ -191,7 +191,9 @@ void Game::func_target_dock(core::Player *player, core::Entity *entity)
 		JumpGate *jumpgate = static_cast<JumpGate *>(entity);
 		jumpgate->func_dock(ship);
 		return;
-		
+	} else if (entity->moduletype() == race_enttype) {
+		RaceTrack *race = static_cast<RaceTrack *>(entity);
+		race->func_dock(ship);
 	} else {
 		ship->get_location().assign(entity->location());
 		ship->set_state(core::Entity::Docked);
diff --git a/src/game/base/game.h b/src/game/base/game.h
index 4f583a8..908aeb6 100644
--- a/src/game/base/game.h
+++ b/src/game/base/game.h
@@ -34,6 +34,7 @@ const unsigned int jumppoint_enttype = 260;
 const unsigned int jumpgate_enttype = 261;
 const unsigned int station_enttype = 262;
 const unsigned int cargopod_enttype = 263;
+const unsigned int race_enttype = 264;
 
 // planet docking distance
 const float planet_safe_distance = 50.0f;
diff --git a/src/game/base/racetrack.cc b/src/game/base/racetrack.cc
index 51526ea..67b8327 100644
--- a/src/game/base/racetrack.cc
+++ b/src/game/base/racetrack.cc
@@ -28,6 +28,8 @@ CheckPoint::CheckPoint(RaceTrack *parent)
 	} else {
 		die();
 	}
+	
+	set_flag(core::Entity::NonSolid);
 }
 
 CheckPoint::~CheckPoint()
@@ -42,9 +44,11 @@ RaceTrack::RaceTrack() : EntityDynamic()
 	track_player = 0;
 	track_racestart = 0;
 	track_checkpointtime = 0;
+	entity_moduletypeid = race_enttype;
 
 	set_state(core::Entity::NoPower);
 	set_flag(core::Entity::Dockable);
+	set_flag(core::Entity::NonSolid);
 }
 
 RaceTrack::~RaceTrack()
@@ -57,7 +61,7 @@ void RaceTrack::add_checkpoint(CheckPoint *checkpoint)
 	track_checkpoints.push_back(checkpoint);
 }
 
-void RaceTrack::reset()
+void RaceTrack::reset_race()
 {
 	if (track_player) {
 		track_player->set_mission_target(0);
@@ -73,7 +77,7 @@ void RaceTrack::reset()
 	set_state(core::Entity::NoPower);
 }
 
-void RaceTrack::dock(core::Entity *entity)
+void RaceTrack::func_dock(core::Entity *entity)
 {
 
 	if (entity->moduletype() != ship_enttype)
@@ -123,12 +127,12 @@ void RaceTrack::frame(float seconds)
 	}
 
 	if (!player) {
-		reset();
+		reset_race();
 		return;
 	}
 
 	if (!player->control() || (player->control()->zone() != zone())) {
-		reset();
+		reset_race();
 		return;
 	}
 
@@ -137,7 +141,7 @@ void RaceTrack::frame(float seconds)
 		if (math::distance(location(), player->control()->location()) > radius()) {
 			std::string message("^BNo cheating!");
 			core::server()->broadcast(message);
-			reset();
+			reset_race();
 			return;
 		}
 
@@ -172,7 +176,7 @@ void RaceTrack::frame(float seconds)
 			std::string message("^BToo slow, race lost!");
 			core::server()->broadcast(message);
 
-			reset();
+			reset_race();
 			return;
 		}
 
@@ -205,7 +209,7 @@ void RaceTrack::frame(float seconds)
 				player->send(msgstr.str());
 				player->sound("game/buy");
 
-				reset();
+				reset_race();
 			}
 		}
 	}
diff --git a/src/game/base/racetrack.h b/src/game/base/racetrack.h
index ef7375a..da810a3 100644
--- a/src/game/base/racetrack.h
+++ b/src/game/base/racetrack.h
@@ -43,10 +43,10 @@ public:
 	void add_checkpoint(CheckPoint *checkpoint);
 
 	/// reset the race track
-	void reset();
+	void reset_race();
 
 	/// entity received a docking request
-	virtual void dock(core::Entity *entity);
+	virtual void func_dock(core::Entity *entity);
 
 	/// run one time frame
 	virtual void frame(float elapsed);
-- 
cgit v1.2.3