changeset 17210:ed1320ada894 draft

(svn r21949) -Change: randomize the vehicle a small UFO targets, do not use the one with lowest index
author smatz <smatz@openttd.org>
date Wed, 02 Feb 2011 23:06:38 +0000
parents c5b47377431a
children 506aa46826a7
files src/disaster_cmd.cpp
diffstat 1 files changed, 18 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/disaster_cmd.cpp
+++ b/src/disaster_cmd.cpp
@@ -307,17 +307,28 @@
 		}
 		v->current_order.SetDestination(1);
 
+		uint n = 0; // Total number of targetable road vehicles.
 		RoadVehicle *u;
 		FOR_ALL_ROADVEHICLES(u) {
-			if (u->IsFrontEngine()) {
-				v->dest_tile = u->index;
-				v->age = 0;
-				return true;
-			}
+			if (u->IsFrontEngine()) n++;
+		}
+
+		if (n == 0) {
+			/* If there are no targetable road vehicles, destroy the UFO. */
+			delete v;
+			return false;
 		}
 
-		delete v;
-		return false;
+		n = RandomRange(n); // Choose one of them.
+		FOR_ALL_ROADVEHICLES(u) {
+			/* Find (n+1)-th road vehicle. */
+			if (u->IsFrontEngine() && (n-- == 0)) break;
+		}
+
+		/* Target it. */
+		v->dest_tile = u->index;
+		v->age = 0;
+		return true;
 	} else {
 		/* Target a vehicle */
 		RoadVehicle *u = RoadVehicle::Get(v->dest_tile);