changeset 3952:b3db64768651 draft

(svn r5098) Do some manual CSE and replace a few magic numbers to improve the readability of the trolly AI
author tron <tron@openttd.org>
date Sun, 04 Jun 2006 13:39:38 +0000
parents 42a0c30766a8
children ae87af7dc5f8
files ai/trolly/trolly.c
diffstat 1 files changed, 41 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/ai/trolly/trolly.c
+++ b/ai/trolly/trolly.c
@@ -430,18 +430,24 @@
 		//   is.
 
 		if (p->ainew.from_type == AI_CITY && p->ainew.tbt == AI_BUS) {
-			int max_cargo = GetTown(p->ainew.from_ic)->max_pass + GetTown(p->ainew.temp)->max_pass;
-			max_cargo -= GetTown(p->ainew.from_ic)->act_pass + GetTown(p->ainew.temp)->act_pass;
+			const Town* town_from = GetTown(p->ainew.from_ic);
+			const Town* town_temp = GetTown(p->ainew.temp);
+			uint distance = DistanceManhattan(town_from->xy, town_temp->xy);
+			int max_cargo;
+
+			max_cargo  = town_from->max_pass + town_temp->max_pass;
+			max_cargo -= town_from->act_pass + town_temp->act_pass;
+
 			// max_cargo is now the amount of cargo we can move between the two cities
 			// If it is more than the distance, we allow it
-			if (DistanceManhattan(GetTown(p->ainew.from_ic)->xy, GetTown(p->ainew.temp)->xy) <= max_cargo * AI_LOCATEROUTE_BUS_CARGO_DISTANCE) {
+			if (distance <= max_cargo * AI_LOCATEROUTE_BUS_CARGO_DISTANCE) {
 				// We found a good city/industry, save the data of it
 				p->ainew.to_ic = p->ainew.temp;
 				p->ainew.state = AI_STATE_FIND_STATION;
 
 				DEBUG(ai,1)(
 					"[AiNew - LocateRoute] Found bus-route of %d tiles long (from %d to %d)",
-					DistanceManhattan(GetTown(p->ainew.from_ic)->xy, GetTown(p->ainew.temp)->xy),
+					distance,
 					p->ainew.from_ic,
 					p->ainew.temp
 				);
@@ -452,17 +458,20 @@
 				return;
 			}
 		} else if (p->ainew.tbt == AI_TRUCK) {
+			const Industry* ind_from = GetIndustry(p->ainew.from_ic);
+			const Industry* ind_temp = GetIndustry(p->ainew.temp);
 			bool found = false;
 			int max_cargo = 0;
-			int i;
+			uint i;
+
 			// TODO: in max_cargo, also check other cargo (beside [0])
 			// First we check if the from_ic produces cargo that this ic accepts
-			if (GetIndustry(p->ainew.from_ic)->produced_cargo[0] != CT_INVALID && GetIndustry(p->ainew.from_ic)->total_production[0] != 0) {
-				for (i=0;i<3;i++) {
-					if (GetIndustry(p->ainew.temp)->accepts_cargo[i] == CT_INVALID) break;
-					if (GetIndustry(p->ainew.from_ic)->produced_cargo[0] == GetIndustry(p->ainew.temp)->accepts_cargo[i]) {
+			if (ind_from->produced_cargo[0] != CT_INVALID && ind_from->total_production[0] != 0) {
+				for (i = 0; i < lengthof(ind_temp->accepts_cargo); i++) {
+					if (ind_temp->accepts_cargo[i] == CT_INVALID) break;
+					if (ind_from->produced_cargo[0] == ind_temp->accepts_cargo[i]) {
 						// Found a compatbiel industry
-						max_cargo = GetIndustry(p->ainew.from_ic)->total_production[0] - GetIndustry(p->ainew.from_ic)->total_transported[0];
+						max_cargo = ind_from->total_production[0] - ind_from->total_transported[0];
 						found = true;
 						p->ainew.from_deliver = true;
 						p->ainew.to_deliver = false;
@@ -470,14 +479,14 @@
 					}
 				}
 			}
-			if (!found && GetIndustry(p->ainew.temp)->produced_cargo[0] != CT_INVALID && GetIndustry(p->ainew.temp)->total_production[0] != 0) {
+			if (!found && ind_temp->produced_cargo[0] != CT_INVALID && ind_temp->total_production[0] != 0) {
 				// If not check if the current ic produces cargo that the from_ic accepts
-				for (i=0;i<3;i++) {
-					if (GetIndustry(p->ainew.from_ic)->accepts_cargo[i] == CT_INVALID) break;
-					if (GetIndustry(p->ainew.temp)->produced_cargo[0] == GetIndustry(p->ainew.from_ic)->accepts_cargo[i]) {
+				for (i = 0; i < lengthof(ind_from->accepts_cargo); i++) {
+					if (ind_from->accepts_cargo[i] == CT_INVALID) break;
+					if (ind_temp->produced_cargo[0] == ind_from->accepts_cargo[i]) {
 						// Found a compatbiel industry
 						found = true;
-						max_cargo = GetIndustry(p->ainew.temp)->total_production[0] - GetIndustry(p->ainew.temp)->total_transported[0];
+						max_cargo = ind_temp->total_production[0] - ind_temp->total_transported[0];
 						p->ainew.from_deliver = false;
 						p->ainew.to_deliver = true;
 						break;
@@ -487,19 +496,21 @@
 			if (found) {
 				// Yeah, they are compatible!!!
 				// Check the length against the amount of goods
-				if (DistanceManhattan(GetIndustry(p->ainew.from_ic)->xy, GetIndustry(p->ainew.temp)->xy) > AI_LOCATEROUTE_TRUCK_MIN_DISTANCE &&
-						DistanceManhattan(GetIndustry(p->ainew.from_ic)->xy, GetIndustry(p->ainew.temp)->xy) <= max_cargo * AI_LOCATEROUTE_TRUCK_CARGO_DISTANCE) {
+				uint distance = DistanceManhattan(ind_from->xy, ind_temp->xy);
+
+				if (distance > AI_LOCATEROUTE_TRUCK_MIN_DISTANCE &&
+						distance <= max_cargo * AI_LOCATEROUTE_TRUCK_CARGO_DISTANCE) {
 					p->ainew.to_ic = p->ainew.temp;
 					if (p->ainew.from_deliver) {
-						p->ainew.cargo = GetIndustry(p->ainew.from_ic)->produced_cargo[0];
+						p->ainew.cargo = ind_from->produced_cargo[0];
 					} else {
-						p->ainew.cargo = GetIndustry(p->ainew.temp)->produced_cargo[0];
+						p->ainew.cargo = ind_temp->produced_cargo[0];
 					}
 					p->ainew.state = AI_STATE_FIND_STATION;
 
 					DEBUG(ai,1)(
 						"[AiNew - LocateRoute] Found truck-route of %d tiles long (from %d to %d)",
-						DistanceManhattan(GetIndustry(p->ainew.from_ic)->xy, GetIndustry(p->ainew.temp)->xy),
+						distance,
 						p->ainew.from_ic,
 						p->ainew.temp
 					);
@@ -564,7 +575,6 @@
 	TileIndex new_tile = 0;
 	byte direction = 0;
 	Town *town = NULL;
-	Industry *industry = NULL;
 	assert(p->ainew.state == AI_STATE_FIND_STATION);
 
 	if (p->ainew.from_tile == 0) {
@@ -573,8 +583,7 @@
 			town = GetTown(p->ainew.from_ic);
 			tile = town->xy;
 		} else {
-			industry = GetIndustry(p->ainew.from_ic);
-			tile = industry->xy;
+			tile = GetIndustry(p->ainew.from_ic)->xy;
 		}
 	} else if (p->ainew.to_tile == 0) {
 		// Second we scan for a station in the to-city
@@ -582,8 +591,7 @@
 			town = GetTown(p->ainew.to_ic);
 			tile = town->xy;
 		} else {
-			industry = GetIndustry(p->ainew.to_ic);
-			tile = industry->xy;
+			tile = GetIndustry(p->ainew.to_ic)->xy;
 		}
 	} else {
 		// Unsupported request
@@ -721,9 +729,11 @@
 	if (p->ainew.temp == -1) {
 		// Init path_info
 		if (p->ainew.from_tile == AI_STATION_RANGE) {
+			const Industry* i = GetIndustry(p->ainew.from_ic);
+
 			// For truck routes we take a range around the industry
-			p->ainew.path_info.start_tile_tl = GetIndustry(p->ainew.from_ic)->xy - TileDiffXY(1, 1);
-			p->ainew.path_info.start_tile_br = GetIndustry(p->ainew.from_ic)->xy + TileDiffXY(GetIndustry(p->ainew.from_ic)->width, GetIndustry(p->ainew.from_ic)->height) + TileDiffXY(1, 1);
+			p->ainew.path_info.start_tile_tl = i->xy - TileDiffXY(1, 1);
+			p->ainew.path_info.start_tile_br = i->xy + TileDiffXY(i->width + 1, i->height + 1);
 			p->ainew.path_info.start_direction = p->ainew.from_direction;
 		} else {
 			p->ainew.path_info.start_tile_tl = p->ainew.from_tile;
@@ -732,8 +742,10 @@
 		}
 
 		if (p->ainew.to_tile == AI_STATION_RANGE) {
-			p->ainew.path_info.end_tile_tl = GetIndustry(p->ainew.to_ic)->xy - TileDiffXY(1, 1);
-			p->ainew.path_info.end_tile_br = GetIndustry(p->ainew.to_ic)->xy + TileDiffXY(GetIndustry(p->ainew.to_ic)->width, GetIndustry(p->ainew.to_ic)->height) + TileDiffXY(1, 1);
+			const Industry* i = GetIndustry(p->ainew.to_ic);
+
+			p->ainew.path_info.end_tile_tl = i->xy - TileDiffXY(1, 1);
+			p->ainew.path_info.end_tile_br = i->xy + TileDiffXY(i->width + 1, i->height + 1);
 			p->ainew.path_info.end_direction = p->ainew.to_direction;
 		} else {
 			p->ainew.path_info.end_tile_tl = p->ainew.to_tile;