Mercurial > hg > openttd
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);