summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortron <tron@openttd.org>2006-02-09 06:33:37 +0000
committertron <tron@openttd.org>2006-02-09 06:33:37 +0000
commite407ced5378f9a02a2b52675a44e93829019ad97 (patch)
tree0f62f4640eec4ee72f144fc35919f268bc00c588
parent8097d92162c31ae8a2ac0110dd01f51bfd97de41 (diff)
downloadopenttd-e407ced5378f9a02a2b52675a44e93829019ad97.tar.xz
(svn r3582) Restructure MoveGoodsToStation() to avoid double bookkeeping of StationIDs and station pointers
-rw-r--r--station_cmd.c47
1 files changed, 20 insertions, 27 deletions
diff --git a/station_cmd.c b/station_cmd.c
index 67b92559a..19bbe0769 100644
--- a/station_cmd.c
+++ b/station_cmd.c
@@ -2527,9 +2527,8 @@ int32 CmdRenameStation(int x, int y, uint32 flags, uint32 p1, uint32 p2)
uint MoveGoodsToStation(TileIndex tile, int w, int h, int type, uint amount)
{
- Station *around_ptr[8];
- StationID around[8];
- int i;
+ Station* around[8];
+ uint i;
uint moved;
uint best_rating, best_rating2;
Station *st1, *st2;
@@ -2539,8 +2538,7 @@ uint MoveGoodsToStation(TileIndex tile, int w, int h, int type, uint amount)
int h_prod;
int max_rad;
-
- memset(around, 0xff, sizeof(around));
+ for (i = 0; i < lengthof(around); i++) around[i] = NULL;
if (_patches.modified_catchment) {
w_prod = w;
@@ -2557,17 +2555,15 @@ uint MoveGoodsToStation(TileIndex tile, int w, int h, int type, uint amount)
}
BEGIN_TILE_LOOP(cur_tile, w, h, tile - TileDiffXY(max_rad, max_rad))
- StationID st_index;
+ Station* st;
cur_tile = TILE_MASK(cur_tile);
if (!IsTileType(cur_tile, MP_STATION)) continue;
- st_index = _m[cur_tile].m2;
-
- for (i = 0; i != 8; i++) {
- if (around[i] == INVALID_STATION) {
- Station* st = GetStation(st_index);
+ st = GetStation(_m[cur_tile].m2);
+ for (i = 0; i != lengthof(around); i++) {
+ if (around[i] == NULL) {
if (!IsBuoy(st) &&
(st->town->exclusive_counter == 0 || st->town->exclusivity == st->owner) && // check exclusive transport rights
st->goods[type].rating != 0 &&
@@ -2604,25 +2600,22 @@ uint MoveGoodsToStation(TileIndex tile, int w, int h, int type, uint amount)
y_dist = 0;
}
- if (x_dist <= rad && y_dist <= rad) {
- around[i] = st_index;
- around_ptr[i] = st;
- }
+ if (x_dist <= rad && y_dist <= rad) around[i] = st;
}
break;
- } else if (around[i] == st_index) {
+ } else if (around[i] == st) {
break;
}
}
END_TILE_LOOP(cur_tile, w, h, tile - TileDiffXY(max_rad, max_rad))
/* no stations around at all? */
- if (around[0] == INVALID_STATION) return 0;
+ if (around[0] == NULL) return 0;
- if (around[1] == INVALID_STATION) {
+ if (around[1] == NULL) {
/* only one station around */
- moved = (amount * around_ptr[0]->goods[type].rating >> 8) + 1;
- UpdateStationWaiting(around_ptr[0], type, moved);
+ moved = (amount * around[0]->goods[type].rating >> 8) + 1;
+ UpdateStationWaiting(around[0], type, moved);
return moved;
}
@@ -2630,16 +2623,16 @@ uint MoveGoodsToStation(TileIndex tile, int w, int h, int type, uint amount)
st2 = st1 = NULL;
best_rating = best_rating2 = 0;
- for (i = 0; i != 8 && around[i] != INVALID_STATION; i++) {
- if (around_ptr[i]->goods[type].rating >= best_rating) {
+ for (i = 0; i != lengthof(around) && around[i] != NULL; i++) {
+ if (around[i]->goods[type].rating >= best_rating) {
best_rating2 = best_rating;
st2 = st1;
- best_rating = around_ptr[i]->goods[type].rating;
- st1 = around_ptr[i];
- } else if (around_ptr[i]->goods[type].rating >= best_rating2) {
- best_rating2 = around_ptr[i]->goods[type].rating;
- st2 = around_ptr[i];
+ best_rating = around[i]->goods[type].rating;
+ st1 = around[i];
+ } else if (around[i]->goods[type].rating >= best_rating2) {
+ best_rating2 = around[i]->goods[type].rating;
+ st2 = around[i];
}
}