changeset 4011:3087808b106a draft

(svn r5222) Misc. smaller changes, mostly const, variable scope and replacing some magic numbers by enums
author tron <tron@openttd.org>
date Sun, 11 Jun 2006 07:17:43 +0000
parents c7bb9484977e
children a56a6dd1f22e
files ai/default/default.c
diffstat 1 files changed, 137 insertions(+), 128 deletions(-) [+]
line wrap: on
line diff
--- a/ai/default/default.c
+++ b/ai/default/default.c
@@ -114,9 +114,10 @@
 			}
 
 			/* not reliable? */
-			if ((v->age != 0 &&
-					GetEngine(v->engine_type)->reliability < 35389) ||
-					v->age >= v->max_age) {
+			if (v->age >= v->max_age || (
+						v->age != 0 &&
+						GetEngine(v->engine_type)->reliability < 35389
+					)) {
 				p->ai.state = AIS_VEH_CHECK_REPLACE_VEHICLE;
 				p->ai.cur_veh = v;
 				return;
@@ -148,8 +149,7 @@
 		}
 
 		ret = DoCommand(tile, i, 0, 0, CMD_BUILD_RAIL_VEHICLE);
-		if (!CmdFailed(ret) && ret <= money &&
-				rvi->ai_rank >= best_veh_score) {
+		if (!CmdFailed(ret) && ret <= money && rvi->ai_rank >= best_veh_score) {
 			best_veh_score = rvi->ai_rank;
 			best_veh_index = i;
 		}
@@ -162,16 +162,16 @@
 {
 	EngineID best_veh_index = INVALID_ENGINE;
 	int32 best_veh_cost = 0;
-	int32 ret;
-
 	EngineID i = _cargoc.ai_roadveh_start[cargo];
 	EngineID end = i + _cargoc.ai_roadveh_count[cargo];
 
 	for (; i != end; i++) {
 		const Engine* e = GetEngine(i);
-
-		if (!HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D)
+		int32 ret;
+
+		if (!HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D) {
 			continue;
+		}
 
 		ret = DoCommand(tile, i, 0, 0, CMD_BUILD_ROAD_VEH);
 		if (!CmdFailed(ret) && ret <= money && ret >= best_veh_cost) {
@@ -187,18 +187,17 @@
 {
 	EngineID best_veh_index = INVALID_ENGINE;
 	int32 best_veh_cost = 0;
-	int32 ret;
-
-	EngineID i = AIRCRAFT_ENGINES_INDEX;
-	EngineID end = i + NUM_AIRCRAFT_ENGINES;
-
-	for (; i != end; i++) {
+	EngineID i;
+
+	for (i = AIRCRAFT_ENGINES_INDEX; i != AIRCRAFT_ENGINES_INDEX + NUM_AIRCRAFT_ENGINES; i++) {
 		const Engine* e = GetEngine(i);
-
-		if (!HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D)
+		int32 ret;
+
+		if (!HASBIT(e->player_avail, _current_player) || e->reliability < 0x8A3D) {
 			continue;
-
-		if (flag&1) {
+		}
+
+		if (flag & 1) {
 			if (i<253) continue;
 		} else {
 			if (i>=253) continue;
@@ -214,7 +213,7 @@
 	return best_veh_index;
 }
 
-static int32 AiGetBasePrice(Player *p)
+static int32 AiGetBasePrice(const Player* p)
 {
 	int32 base = _price.station_value;
 
@@ -238,23 +237,23 @@
 }
 #endif
 
-static EngineID AiChooseRoadVehToReplaceWith(Player* p, Vehicle* v)
+static EngineID AiChooseRoadVehToReplaceWith(const Player* p, const Vehicle* v)
 {
 	int32 avail_money = p->player_money + v->value;
 	return AiChooseRoadVehToBuild(v->cargo_type, avail_money, v->tile);
 }
 
-static EngineID AiChooseAircraftToReplaceWith(Player* p, Vehicle* v)
+static EngineID AiChooseAircraftToReplaceWith(const Player* p, const Vehicle* v)
 {
 	int32 avail_money = p->player_money + v->value;
 	return AiChooseAircraftToBuild(avail_money, v->engine_type>=253?1:0);
 }
 
-static EngineID AiChooseTrainToReplaceWith(Player* p, Vehicle* v)
+static EngineID AiChooseTrainToReplaceWith(const Player* p, const Vehicle* v)
 {
 	int32 avail_money = p->player_money + v->value;
-	int num=0;
-	Vehicle *u = v;
+	const Vehicle* u = v;
+	int num = 0;
 
 	while (++num, u->next != NULL) {
 		u = u->next;
@@ -264,7 +263,7 @@
 	return AiChooseTrainToBuild(v->u.rail.railtype, avail_money, 0, v->tile);
 }
 
-static EngineID AiChooseShipToReplaceWith(Player* p, Vehicle* v)
+static EngineID AiChooseShipToReplaceWith(const Player* p, const Vehicle* v)
 {
 	error("!AiChooseShipToReplaceWith");
 
@@ -301,7 +300,7 @@
 
 static void AiHandleReplaceTrain(Player *p)
 {
-	Vehicle *v = p->ai.cur_veh;
+	const Vehicle* v = p->ai.cur_veh;
 	BackuppedOrders orderbak[1];
 	EngineID veh;
 
@@ -331,7 +330,7 @@
 
 static void AiHandleReplaceRoadVeh(Player *p)
 {
-	Vehicle *v = p->ai.cur_veh;
+	const Vehicle* v = p->ai.cur_veh;
 	BackuppedOrders orderbak[1];
 	EngineID veh;
 
@@ -360,7 +359,7 @@
 
 static void AiHandleReplaceAircraft(Player *p)
 {
-	Vehicle *v = p->ai.cur_veh;
+	const Vehicle* v = p->ai.cur_veh;
 	BackuppedOrders orderbak[1];
 	EngineID veh;
 
@@ -392,7 +391,7 @@
 	error("!AiHandleReplaceShip");
 }
 
-typedef EngineID CheckReplaceProc(Player* p, Vehicle* v);
+typedef EngineID CheckReplaceProc(const Player* p, const Vehicle* v);
 
 static CheckReplaceProc* const _veh_check_replace_proc[] = {
 	AiChooseTrainToReplaceWith,
@@ -411,7 +410,7 @@
 
 static void AiStateCheckReplaceVehicle(Player *p)
 {
-	Vehicle *v = p->ai.cur_veh;
+	const Vehicle* v = p->ai.cur_veh;
 
 	if (v->type == 0 ||
 			v->owner != _current_player ||
@@ -457,9 +456,8 @@
 {
 	uint i;
 	CargoID cargo;
-	Subsidy *s;
-	Industry *from, *to_ind;
-	Town *to_tow;
+	const Subsidy* s;
+	Industry* from;
 	TileIndex to_xy;
 
 	// initially error
@@ -473,20 +471,25 @@
 
 	// Don't want passengers or mail
 	cargo = s->cargo_type;
-	if (cargo == CT_INVALID || cargo == CT_PASSENGERS || cargo == CT_MAIL || s->age > 7)
+	if (cargo == CT_INVALID ||
+			cargo == CT_PASSENGERS ||
+			cargo == CT_MAIL ||
+			s->age > 7) {
 		return;
+	}
 	fr->cargo = cargo;
 
 	fr->from = from = GetIndustry(s->from);
 
 	if (cargo == CT_GOODS || cargo == CT_FOOD) {
-		to_tow = GetTown(s->to);
-		if (to_tow->population < (uint32)(cargo == CT_FOOD ? 200 : 900))
-			return; // error
+		Town* to_tow = GetTown(s->to);
+
+		if (to_tow->population < (cargo == CT_FOOD ? 200 : 900)) return; // error
 		fr->to = to_tow;
 		to_xy = to_tow->xy;
 	} else {
-		to_ind = GetIndustry(s->to);
+		Industry* to_ind = GetIndustry(s->to);
+
 		fr->to = to_ind;
 		to_xy = to_ind->xy;
 	}
@@ -497,7 +500,7 @@
 static void AiFindSubsidyPassengerRoute(FoundRoute *fr)
 {
 	uint i;
-	Subsidy *s;
+	const Subsidy* s;
 	Town *from,*to;
 
 	// initially error
@@ -524,8 +527,7 @@
 
 static void AiFindRandomIndustryRoute(FoundRoute *fr)
 {
-	Industry *i,*i2;
-	Town *t;
+	Industry* i;
 	uint32 r;
 	CargoID cargo;
 
@@ -545,21 +547,27 @@
 	fr->cargo = cargo;
 
 	// don't allow passengers
-	if (cargo == 0xFF || cargo == CT_PASSENGERS) return;
+	if (cargo == CT_INVALID || cargo == CT_PASSENGERS) return;
 
 	if (cargo != CT_GOODS && cargo != CT_FOOD) {
 		// pick a dest, and see if it can receive
-		i2 = AiFindRandomIndustry();
-		if (i2 == NULL || i == i2 || !(i2->accepts_cargo[0] == cargo || i2->accepts_cargo[1] == cargo || i2->accepts_cargo[2] == cargo))
+		Industry* i2 = AiFindRandomIndustry();
+
+		if (i2 == NULL || i == i2 || (
+					i2->accepts_cargo[0] != cargo &&
+					i2->accepts_cargo[1] != cargo &&
+					i2->accepts_cargo[2] != cargo)
+				) {
 			return;
+		}
 
 		fr->to = i2;
 		fr->distance = DistanceManhattan(i->xy, i2->xy);
 	} else {
 		// pick a dest town, and see if it's big enough
-		t = AiFindRandomTown();
-		if (t == NULL || t->population < (uint32)(cargo == CT_FOOD ? 200 : 900))
-			return;
+		Town* t = AiFindRandomTown();
+
+		if (t == NULL || t->population < (cargo == CT_FOOD ? 200 : 900)) return;
 
 		fr->to = t;
 		fr->distance = DistanceManhattan(i->xy, t->xy);
@@ -590,7 +598,7 @@
 {
 	TileIndex from_tile, to_tile;
 	Station *st;
-	int dist, cur;
+	int dist;
 	uint same_station = 0;
 
 	// Make sure distance to closest station is < 37 pixels.
@@ -598,7 +606,10 @@
 	to_tile = GET_TOWN_OR_INDUSTRY_TILE(fr->to);
 
 	dist = 0xFFFF;
-	FOR_ALL_STATIONS(st) if (st->xy != 0 && st->owner == _current_player) {
+	FOR_ALL_STATIONS(st) {
+		int cur;
+
+		if (st->xy == 0 || st->owner != _current_player) continue;
 		cur = DistanceMax(from_tile, st->xy);
 		if (cur < dist) dist = cur;
 		cur = DistanceMax(to_tile, st->xy);
@@ -610,7 +621,7 @@
 	//  For each road or airport station, we want 350 of population!
 	if ((bitmask == 2 || bitmask == 4) &&
 			same_station > 2 &&
-			((Town*)(fr->from))->population < same_station * 350) {
+			((Town*)fr->from)->population < same_station * 350) {
 		return false;
 	}
 
@@ -623,20 +634,26 @@
 	}
 
 	if (fr->cargo == CT_PASSENGERS || fr->cargo == CT_MAIL) {
-		if (((Town*)fr->from)->pct_pass_transported > 0x99 ||
-				((Town*)fr->to)->pct_pass_transported > 0x99)
+		const Town* from = fr->from;
+		const Town* to   = fr->to;
+
+		if (from->pct_pass_transported > 0x99 ||
+				to->pct_pass_transported > 0x99) {
 			return false;
+		}
 
 		// Make sure it has a reasonably good rating
-		if (((Town*)fr->from)->ratings[_current_player] < -100 ||
-				((Town*)fr->to)->ratings[_current_player] < -100)
+		if (from->ratings[_current_player] < -100 ||
+				to->ratings[_current_player] < -100) {
 			return false;
+		}
 	} else {
 		const Industry* i = (const Industry*)fr->from;
 
 		if (i->pct_transported[fr->cargo != i->produced_cargo[0]] > 0x99 ||
-				i->total_production[fr->cargo != i->produced_cargo[0]] == 0)
+				i->total_production[fr->cargo != i->produced_cargo[0]] == 0) {
 			return false;
+		}
 	}
 
 	p->ai.route_type_mask |= bitmask;
@@ -1504,25 +1521,22 @@
 
 static bool AiCheckTrackResources(TileIndex tile, const AiDefaultBlockData *p, byte cargo)
 {
-	uint values[NUM_CARGO];
-	int rad;
-
-	for (;p->mode != 4;p++) if (p->mode == 1) {
-		TileIndex tile2 = TILE_ADD(tile, ToTileIndexDiff(p->tileoffs));
+	uint rad = (_patches.modified_catchment) ? CA_TRAIN : 4;
+
+	for (; p->mode != 4; p++) {
+		AcceptedCargo values;
+		TileIndex tile2;
 		uint w;
 		uint h;
 
+		if (p->mode != 1) continue;
+
+		tile2 = TILE_ADD(tile, ToTileIndexDiff(p->tileoffs));
 		w = GB(p->attr, 1, 3);
 		h = GB(p->attr, 4, 3);
+
 		if (p->attr & 1) uintswap(w, h);
 
-
-		if (_patches.modified_catchment) {
-			rad = CA_TRAIN;
-		} else {
-			rad = 4;
-		}
-
 		if (cargo & 0x80) {
 			GetProductionAroundTiles(values, tile2, w, h, rad);
 			return values[cargo & 0x7F] != 0;
@@ -1876,7 +1890,7 @@
 
 static void AiBanTile(Player* p, TileIndex tile, byte val)
 {
-	int i;
+	uint i;
 
 	for (i = lengthof(p->ai.banned_tiles) - 1; i != 0; i--) {
 		p->ai.banned_tiles[i] = p->ai.banned_tiles[i - 1];
@@ -1954,15 +1968,14 @@
 		}
 
 		// Is building a (rail)bridge possible at this place (type doesn't matter)?
-		if (CmdFailed(DoCommand(tile_new, tile, 0 | arf->player->ai.railtype_to_use << 8,
-			DC_AUTO, CMD_BUILD_BRIDGE)) )
-				return;
+		if (CmdFailed(DoCommand(tile_new, tile, 0 | arf->player->ai.railtype_to_use << 8, DC_AUTO, CMD_BUILD_BRIDGE))) {
+			return;
+		}
 		AiBuildRailRecursive(arf, tile_new, dir2);
 
 		// At the bottom depth, check if the new path is better than the old one.
 		if (arf->depth == 1) {
-			if (AiCheckRailPathBetter(arf, p))
-				arf->bridge_end_tile = tile_new;
+			if (AiCheckRailPathBetter(arf, p)) arf->bridge_end_tile = tile_new;
 		}
 	}
 }
@@ -1991,14 +2004,12 @@
 	// Reached destination?
 	if (tile == arf->final_tile) {
 		if (arf->final_dir != (dir^2)) {
-			if (arf->recursive_mode != 2)
-				arf->recursive_mode = 1;
+			if (arf->recursive_mode != 2) arf->recursive_mode = 1;
 		} else if (arf->recursive_mode != 2) {
 			arf->recursive_mode = 2;
 			arf->cur_best_depth = arf->depth;
 		} else {
-			if (arf->depth < arf->cur_best_depth)
-				arf->cur_best_depth = arf->depth;
+			if (arf->depth < arf->cur_best_depth) arf->cur_best_depth = arf->depth;
 		}
 		return;
 	}
@@ -2226,23 +2237,30 @@
 
 static void AiBuildRail(Player *p)
 {
-	if (p->ai.state_mode < 1) {
-		// Construct mode, build new rail.
-		AiBuildRailConstruct(p);
-	} else if (p->ai.state_mode == 1) {
-		// Destruct mode, destroy the rail currently built.
-		AiBuildRailDestruct(p);
-	} else if (p->ai.state_mode == 2) {
-		uint i;
-
-		// Terraform some and then try building again.
-		for (i = 0; i != 4; i++)
-			AiDoTerraformLand(p->ai.cur_tile_a, p->ai.cur_dir_a, 3, 0);
-
-		if (++p->ai.state_counter == 4) {
-			p->ai.state_counter = 0;
-			p->ai.state_mode = 0;
+	switch (p->ai.state_mode) {
+		case 0: // Construct mode, build new rail.
+			AiBuildRailConstruct(p);
+			break;
+
+		case 1: // Destruct mode, destroy the rail currently built.
+			AiBuildRailDestruct(p);
+			break;
+
+		case 2: {
+			uint i;
+
+			// Terraform some and then try building again.
+			for (i = 0; i != 4; i++) {
+				AiDoTerraformLand(p->ai.cur_tile_a, p->ai.cur_dir_a, 3, 0);
+			}
+
+			if (++p->ai.state_counter == 4) {
+				p->ai.state_counter = 0;
+				p->ai.state_mode = 0;
+			}
 		}
+
+		default: break;
 	}
 }
 
@@ -2463,19 +2481,15 @@
 
 static void AiStateDeleteRailBlocks(Player *p)
 {
-	int num;
-	AiBuildRec *aib;
-	const AiDefaultBlockData *b;
-
-	num = p->ai.num_build_rec;
-	aib = &p->ai.src;
+	const AiBuildRec* aib = &p->ai.src;
+	uint num = p->ai.num_build_rec;
+
 	do {
-		if (aib->cur_building_rule != 255) {
-			b = _default_rail_track_data[aib->cur_building_rule]->data;
-			while (b->mode != 4) {
-				DoCommand(TILE_ADD(aib->use_tile, ToTileIndexDiff(b->tileoffs)), 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
-				b++;
-			}
+		const AiDefaultBlockData* b;
+
+		if (aib->cur_building_rule == 255) continue;
+		for (b = _default_rail_track_data[aib->cur_building_rule]->data; b->mode != 4; b++) {
+			DoCommand(TILE_ADD(aib->use_tile, ToTileIndexDiff(b->tileoffs)), 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
 		}
 	} while (++aib,--num);
 
@@ -2812,13 +2826,13 @@
 
 static bool AiBuildRoadHelper(TileIndex tile, int flags, int type)
 {
-	static const byte _road_bits[] = {
-		8+2,
-		1+4,
-		1+8,
-		4+2,
-		1+2,
-		8+4,
+	static const RoadBits _road_bits[] = {
+		ROAD_X,
+		ROAD_Y,
+		ROAD_NW | ROAD_NE,
+		ROAD_SW | ROAD_SE,
+		ROAD_NW | ROAD_SW,
+		ROAD_SE | ROAD_NE
 	};
 	return !CmdFailed(DoCommand(tile, _road_bits[type], 0, flags, CMD_BUILD_ROAD));
 }
@@ -3191,21 +3205,16 @@
 
 static void AiStateDeleteRoadBlocks(Player *p)
 {
-	int num;
-	AiBuildRec *aib;
-	const AiDefaultBlockData *b;
-
-	num = p->ai.num_build_rec;
-	aib = &p->ai.src;
+	const AiBuildRec* aib = &p->ai.src;
+	uint num = p->ai.num_build_rec;
+
 	do {
-		if (aib->cur_building_rule != 255) {
-			b = _road_default_block_data[aib->cur_building_rule]->data;
-			while (b->mode != 4) {
-				if (b->mode <= 1) {
-					DoCommand(TILE_ADD(aib->use_tile, ToTileIndexDiff(b->tileoffs)), 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
-				}
-				b++;
-			}
+		const AiDefaultBlockData* b;
+
+		if (aib->cur_building_rule == 255) continue;
+		for (b = _road_default_block_data[aib->cur_building_rule]->data; b->mode != 4; b++) {
+			if (b->mode > 1) continue;
+			DoCommand(TILE_ADD(aib->use_tile, ToTileIndexDiff(b->tileoffs)), 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
 		}
 	} while (++aib,--num);
 
@@ -3818,7 +3827,7 @@
 	}
 }
 
-static void AiAdjustLoan(Player *p)
+static void AiAdjustLoan(const Player* p)
 {
 	int32 base = AiGetBasePrice(p);