summaryrefslogtreecommitdiff
path: root/train_cmd.c
diff options
context:
space:
mode:
authortron <tron@openttd.org>2005-03-09 19:09:04 +0000
committertron <tron@openttd.org>2005-03-09 19:09:04 +0000
commite6e3e69da446dc00c0b9de25467638fa1081ad64 (patch)
treef2c654684c8e8ee724d40b54c8aa56c87ca8c5b6 /train_cmd.c
parent750a26553194f6967e09098caf532e0ac7731d0a (diff)
downloadopenttd-e6e3e69da446dc00c0b9de25467638fa1081ad64.tar.xz
(svn r1976) Cleanups - mostly indentation and fiddling with loops
Diffstat (limited to 'train_cmd.c')
-rw-r--r--train_cmd.c220
1 files changed, 107 insertions, 113 deletions
diff --git a/train_cmd.c b/train_cmd.c
index 7cedb0354..b7da037f8 100644
--- a/train_cmd.c
+++ b/train_cmd.c
@@ -64,13 +64,15 @@ static bool TrainShouldStop(Vehicle *v, TileIndex tile)
assert(IsTileType(v->tile, MP_STATION));
//When does a train drive through a station
//first we deal with the "new nonstop handling"
- if ( _patches.new_nonstop && o->flags & OF_NON_STOP && _map2[tile] == o->station )
+ if (_patches.new_nonstop && o->flags & OF_NON_STOP &&
+ _map2[tile] == o->station )
return false;
if (v->last_station_visited == _map2[tile])
return false;
- if ( _map2[tile] != o->station && (o->flags & OF_NON_STOP || _patches.new_nonstop))
+ if (_map2[tile] != o->station &&
+ (o->flags & OF_NON_STOP || _patches.new_nonstop))
return false;
return true;
@@ -122,24 +124,22 @@ static int GetTrainAcceleration(Vehicle *v, bool mode)
}
//if we have a 90 degree turn, fix the speed limit to 60
- if ( _curve_neighbours90[dir][0] == ndir || _curve_neighbours90[dir][1] == ndir) {
+ if (_curve_neighbours90[dir][0] == ndir ||
+ _curve_neighbours90[dir][1] == ndir) {
max_speed = 61;
}
}
- for(i = 0; i < numcurve; i++) {
- sum += dist[i];
- }
+ for (i = 0; i < numcurve; i++) sum += dist[i];
free(dist);
dist = NULL;
- if (numcurve > 0) {
- sum /= numcurve;
- }
+ if (numcurve > 0) sum /= numcurve;
- if ((curvecount[0] != 0 || curvecount[1] != 0) && (max_speed > 88)) {
+ if ((curvecount[0] != 0 || curvecount[1] != 0) && max_speed > 88) {
int total = curvecount[0] + curvecount[1];
+
if (curvecount[0] == 1 && curvecount[1] == 1) {
max_speed = 0xFFFF;
} else if (total > 1) {
@@ -221,53 +221,55 @@ static int GetTrainAcceleration(Vehicle *v, bool mode)
switch (v->u.rail.railtype) {
case 0:
case 1:
- {
force = power / speed; //[N]
force *= 22;
force /= 10;
- } break;
+ break;
+
case 2:
force = power / 25;
- break;
+ break;
}
- } else
+ } else {
//"kickoff" acceleration
force = resistance * 10;
+ }
if (force <= 0) force = 10000;
- if (v->u.rail.railtype != 2)
- force = min(force, mass * 10 * 200);
+ if (v->u.rail.railtype != 2) force = min(force, mass * 10 * 200);
if (mode == AM_ACCEL) {
return (force - resistance) / (mass * 4);
} else {
- return min((-force - resistance) /(mass * 4), (10000 / (mass * 4)));
+ return min((-force - resistance) / (mass * 4), 10000 / (mass * 4));
}
}
void UpdateTrainAcceleration(Vehicle *v)
{
- uint acc, power=0, max_speed=5000, weight=0;
+ uint power = 0;
+ uint max_speed = 5000;
+ uint weight = 0;
Vehicle *u = v;
assert(v->subtype == TS_Front_Engine);
// compute stuff like max speed, power, and weight.
- do {
+ for (; u != NULL; u = u->next) {
const RailVehicleInfo *rvi = RailVehInfo(u->engine_type);
// power is sum of the power for all engines
power += rvi->power;
// limit the max speed to the speed of the slowest vehicle.
- if (rvi->max_speed && rvi->max_speed <= max_speed) max_speed = rvi->max_speed;
+ if (rvi->max_speed != 0 && rvi->max_speed <= max_speed)
+ max_speed = rvi->max_speed;
// weight is the sum of the weight of the wagon and the weight of the cargo.
weight += rvi->weight;
- weight += (_cargoc.weights[u->cargo_type] * u->cargo_count) >> 4;
-
- } while ( (u=u->next) != NULL);
+ weight += (_cargoc.weights[u->cargo_type] * u->cargo_count) / 16;
+ }
// these are shown in the UI
v->u.rail.cached_weight = weight;
@@ -276,13 +278,7 @@ void UpdateTrainAcceleration(Vehicle *v)
assert(weight != 0);
- // compute acceleration
- acc = power / weight * 4;
-
- if (acc >= 255) acc=255;
- if (acc == 0) acc++;
-
- v->acceleration = (byte)acc;
+ v->acceleration = clamp(power / weight * 4, 1, 255);
}
int GetTrainImage(Vehicle *v, byte direction)
@@ -292,7 +288,7 @@ int GetTrainImage(Vehicle *v, byte direction)
if (is_custom_sprite(img)) {
base = GetCustomVehicleSprite(v, direction + 4 * is_custom_secondhead_sprite(img));
- if (base) return base;
+ if (base != 0) return base;
img = _engine_original_sprites[v->engine_type];
}
@@ -312,22 +308,24 @@ void DrawTrainEngine(int x, int y, int engine, uint32 image_ormod)
if (is_custom_sprite(img)) {
image = GetCustomVehicleIcon(engine, 6);
- if (!image) img = _engine_original_sprites[engine];
+ if (image == 0) img = _engine_original_sprites[engine];
}
- if (!image) {
+ if (image == 0) {
image = (6 & _engine_sprite_and[img]) + _engine_sprite_base[img];
}
if (rvi->flags & RVI_MULTIHEAD) {
- DrawSprite(image | image_ormod, x-14, y);
+ DrawSprite(image | image_ormod, x - 14, y);
x += 15;
image = 0;
if (is_custom_sprite(img)) {
image = GetCustomVehicleIcon(engine, 2);
- if (!image) img = _engine_original_sprites[engine];
+ if (image == 0) img = _engine_original_sprites[engine];
}
- if (!image) {
- image = ((6 + _engine_sprite_add[img+1]) & _engine_sprite_and[img+1]) + _engine_sprite_base[img+1];
+ if (image == 0) {
+ image =
+ ((6 + _engine_sprite_add[img + 1]) & _engine_sprite_and[img + 1]) +
+ _engine_sprite_base[img + 1];
}
}
DrawSprite(image | image_ormod, x, y);
@@ -337,7 +335,7 @@ void DrawTrainEngineInfo(int engine, int x, int y, int maxw)
{
const RailVehicleInfo *rvi = RailVehInfo(engine);
int cap;
- uint multihead = ((rvi->flags & RVI_MULTIHEAD) ? 1 : 0);
+ uint multihead = (rvi->flags & RVI_MULTIHEAD) ? 1 : 0;
SetDParam(0, ((_price.build_railvehicle >> 3) * rvi->base_cost) >> 5);
SetDParam(2, rvi->max_speed * 10 >> 4);
@@ -416,7 +414,7 @@ static int32 CmdBuildRailWagon(uint engine, uint tile, uint32 flags)
u->next = v;
v->subtype = TS_Not_First;
v->u.rail.first_engine = u->u.rail.first_engine;
- if (v->u.rail.first_engine == 0xffff && u->subtype == TS_Front_Engine )
+ if (v->u.rail.first_engine == 0xffff && u->subtype == TS_Front_Engine)
v->u.rail.first_engine = u->engine_type;
} else {
v->u.rail.first_engine = 0xffff;
@@ -449,11 +447,13 @@ static int32 CmdBuildRailWagon(uint engine, uint tile, uint32 flags)
static void NormalizeTrainVehInDepot(Vehicle *u)
{
Vehicle *v;
+
FOR_ALL_VEHICLES(v) {
if (v->type == VEH_Train && v->subtype == TS_Free_Car &&
v->tile == u->tile &&
v->u.rail.track == 0x80) {
- if (DoCommandByTile(0,v->index | (u->index<<16), 1, DC_EXEC, CMD_MOVE_RAIL_VEHICLE) == CMD_ERROR)
+ if (DoCommandByTile(0, v->index | (u->index << 16), 1, DC_EXEC,
+ CMD_MOVE_RAIL_VEHICLE) == CMD_ERROR)
break;
}
}
@@ -521,10 +521,8 @@ void AddRearEngineToMultiheadedTrain(Vehicle *v, Vehicle *u, bool building)
if (building) v->next = u;
u->engine_type = v->engine_type;
u->build_year = v->build_year;
- if (building)
- v->value = u->value = v->value >> 1;
- else
- u->value = v->value;
+ if (building) v->value >>= 1;
+ u->value = v->value;
u->type = VEH_Train;
u->cur_image = 0xAC2;
VehiclePositionChanged(u);
@@ -634,30 +632,30 @@ int32 CmdBuildRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
static bool IsTunnelTile(TileIndex tile)
{
- return IsTileType(tile, MP_TUNNELBRIDGE) &&
- (_map5[tile]&0x80) == 0;
+ return IsTileType(tile, MP_TUNNELBRIDGE) && (_map5[tile] & 0x80) == 0;
}
-int CheckTrainStoppedInDepot(Vehicle *v)
+int CheckTrainStoppedInDepot(const Vehicle *v)
{
int count;
TileIndex tile = v->tile;
/* check if stopped in a depot */
if (!IsTileDepotType(tile, TRANSPORT_RAIL) || v->cur_speed != 0) {
-errmsg:
_error_message = STR_881A_TRAINS_CAN_ONLY_BE_ALTERED;
return -1;
}
count = 0;
- do {
+ for (; v != NULL; v = v->next) {
count++;
- if (v->u.rail.track != 0x80 || v->tile != (TileIndex)tile ||
- (v->subtype == TS_Front_Engine && !(v->vehstatus&VS_STOPPED)))
- goto errmsg;
- } while ( (v=v->next) != NULL);
+ if (v->u.rail.track != 0x80 || v->tile != tile ||
+ (v->subtype == TS_Front_Engine && !(v->vehstatus & VS_STOPPED))) {
+ _error_message = STR_881A_TRAINS_CAN_ONLY_BE_ALTERED;
+ return -1;
+ }
+ }
return count;
}
@@ -670,30 +668,36 @@ static Vehicle *UnlinkWagon(Vehicle *v, Vehicle *first)
v->u.rail.first_engine = 0xffff;
if (v == first) {
Vehicle *u;
- if ((v=v->next) == NULL) return NULL;
- for (u=v; u; u=u->next) u->u.rail.first_engine = v->engine_type;
+
+ v = v->next;
+ if (v == NULL) return NULL;
+ for (u = v; u != NULL; u = u->next) u->u.rail.first_engine = v->engine_type;
v->subtype = TS_Free_Car;
return v;
} else {
Vehicle *u;
- for(u=first; u->next!=v; u=u->next) {}
+
+ for (u = first; u->next != v; u = u->next) {}
u->next = v->next;
return first;
}
}
-static Vehicle *FindGoodVehiclePos(Vehicle *src)
+static Vehicle *FindGoodVehiclePos(const Vehicle *src)
{
Vehicle *dst;
uint16 eng = src->engine_type;
TileIndex tile = src->tile;
FOR_ALL_VEHICLES(dst) {
- if (dst->type == VEH_Train && dst->subtype == TS_Free_Car && dst->tile==tile) {
+ if (dst->type == VEH_Train && dst->subtype == TS_Free_Car &&
+ dst->tile == tile) {
// check so all vehicles in the line have the same engine.
Vehicle *v = dst;
+
while (v->engine_type == eng) {
- if ((v = v->next) == NULL) return dst;
+ v = v->next;
+ if (v == NULL) return dst;
}
}
}
@@ -701,11 +705,11 @@ static Vehicle *FindGoodVehiclePos(Vehicle *src)
return NULL;
}
-/* p1 & 0xffff= source vehicle index
- p1 & 0xffff0000 = what wagon to put the wagon AFTER, 0xffff0000 to make a new line
- p2 & 1 = move all vehicles following the vehicle..
+/* p1 & 0xffff = source vehicle index
+ * p1 & 0xffff0000 = what wagon to put the wagon AFTER,
+ * 0xffff0000 to make a new line
+ * p2 & 1 = move all vehicles following the vehicle..
*/
-
int32 CmdMoveRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
{
Vehicle *src, *dst, *src_head, *dst_head;
@@ -717,15 +721,15 @@ int32 CmdMoveRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (src->type != VEH_Train) return CMD_ERROR;
- is_loco = !(RailVehInfo(src->engine_type)->flags & RVI_WAGON)
- && is_firsthead_sprite(src->spritenum);
+ is_loco = !(RailVehInfo(src->engine_type)->flags & RVI_WAGON) &&
+ is_firsthead_sprite(src->spritenum);
// if nothing is selected as destination, try and find a matching vehicle to drag to.
if (((int32)p1 >> 16) == -1) {
dst = NULL;
if (!is_loco) dst = FindGoodVehiclePos(src);
} else {
- dst = GetVehicle(((int32)p1 >> 16));
+ dst = GetVehicle((int32)p1 >> 16);
}
// don't move the same vehicle..
@@ -752,14 +756,17 @@ int32 CmdMoveRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (num < 0)
return CMD_ERROR;
- if (num > (_patches.mammoth_trains ? 100 : 9) && dst_head->subtype == TS_Front_Engine )
+ if (num > (_patches.mammoth_trains ? 100 : 9) &&
+ dst_head->subtype == TS_Front_Engine )
return_cmd_error(STR_8819_TRAIN_TOO_LONG);
// if it's a multiheaded vehicle we're dragging to, drag to the vehicle before..
- while (is_custom_secondhead_sprite(dst->spritenum)
- || (!is_custom_sprite(dst->spritenum) && _engine_sprite_add[dst->spritenum] != 0)) {
+ while (is_custom_secondhead_sprite(dst->spritenum) || (
+ !is_custom_sprite(dst->spritenum) &&
+ _engine_sprite_add[dst->spritenum] != 0)
+ ) {
Vehicle *v = GetPrevVehicleInChain(dst);
- if (!v || src == v) break;
+ if (v == NULL || src == v) break;
dst = v;
}
@@ -827,10 +834,10 @@ int32 CmdMoveRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// link in the wagon(s) in the chain.
{
- Vehicle *v = src;
- while (v->next != NULL) {
+ Vehicle *v;
+
+ for (v = src; v->next != NULL; v = v->next) {
v->next->u.rail.first_engine = v->u.rail.first_engine;
- v = v->next;
}
v->next = dst->next;
}
@@ -910,7 +917,8 @@ int32 CmdSellRailWagon(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// 4) the first and the last vehicle of the chain are not identical
// 5) and of "engine" type (i.e. not a carriage)
// then let the last vehicle live
- if ( (p2 == 1) && (v != last) && ( last->engine_type == first->engine_type ) && (last != first) && (first->subtype == TS_Front_Engine) )
+ if (p2 == 1 && v != last && last->engine_type == first->engine_type &&
+ last != first && first->subtype == TS_Front_Engine)
last = GetPrevVehicleInChain(last);
else
last = NULL;
@@ -919,7 +927,8 @@ int32 CmdSellRailWagon(int x, int y, uint32 flags, uint32 p1, uint32 p2)
// sell last part of multiheaded?
last = GetLastVehicleInChain(v);
// Check if the end-part is the same engine and check if it is the rear-end
- if (last->engine_type != first->engine_type || is_firsthead_sprite(last->spritenum))
+ if (last->engine_type != first->engine_type ||
+ is_firsthead_sprite(last->spritenum))
last = NULL;
} else {
last = NULL;
@@ -932,69 +941,54 @@ int32 CmdSellRailWagon(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (flags & DC_EXEC) {
- // always redraw the depot. maybe redraw train list
+ Vehicle *tmp;
+
InvalidateWindow(WC_VEHICLE_DEPOT, first->tile);
- if (first->subtype == TS_Front_Engine) {
- RebuildVehicleLists();
- }
+ if (first->subtype == TS_Front_Engine) RebuildVehicleLists();
+
// when selling an attached locomotive. we need to delete its window.
if (v->subtype == TS_Front_Engine) {
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
// rearrange all vehicles that follow to separate lines.
if (p2 == 2) {
- Vehicle *u,*tmp;
- u = v->next;
- while (u != last) {
- tmp = u;
- u = u->next;
- DoCommandByTile(tmp->tile, tmp->index | ((-1)<<16), 0, DC_EXEC, CMD_MOVE_RAIL_VEHICLE);
+ const Vehicle* u;
+ const Vehicle* tmp;
+
+ for (u = v->next; u != last; u = tmp) {
+ tmp = u->next;
+ DoCommandByTile(u->tile, u->index | INVALID_VEHICLE << 16, 0, DC_EXEC,
+ CMD_MOVE_RAIL_VEHICLE);
}
}
}
// delete the vehicles
cost = 0;
- for(;;) {
- Vehicle *tmp;
-
- assert(first);
+ for (; v != last && p2 == 1; v = tmp) {
+ assert (first != NULL);
first = UnlinkWagon(v, first);
cost -= v->value;
- tmp = v;
- DeleteVehicle(tmp);
- if ( v == last ) {
- last = NULL;
- break;
- }
- if ( (v=v->next) == last || p2 != 1) break;
+ tmp = v->next;
+ DeleteVehicle(v);
}
-
- // delete last vehicle of multiheaded train?
- if (last) {
- first = UnlinkWagon(last, first);
- cost -= last->value;
- DeleteVehicle(last);
+ if (v != NULL) {
+ first = UnlinkWagon(v, first);
+ cost -= v->value;
+ DeleteVehicle(v);
}
// an attached train changed?
- if (first && first->subtype == TS_Front_Engine) {
+ if (first != NULL && first->subtype == TS_Front_Engine) {
UpdateTrainAcceleration(first);
InvalidateWindow(WC_VEHICLE_DETAILS, first->index);
}
} else {
cost = 0;
- for(;;) {
- cost -= v->value;
- if ( v == last ) {
- last = NULL;
- break;
- }
- if ( (v=v->next) == last || p2 != 1) break;
- }
- if (last) cost -= last->value;
+ for (; v != last && p2 == 1; v = v->next) cost -= v->value;
+ if (v != NULL) cost -= v->value;
}
- InvalidateWindow(WC_REPLACE_VEHICLE, VEH_Train); // updates the replace Train window
+ InvalidateWindow(WC_REPLACE_VEHICLE, VEH_Train);
return cost;
}