mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-16 00:12:51 +00:00
(svn r8730) -Codechange: more replacements of magic numbers by enums and removal of some (by now) redundant comments.
This commit is contained in:
parent
18f88c6ad9
commit
a374caf51d
12
src/road.h
12
src/road.h
@ -28,4 +28,16 @@ static inline RoadBits DiagDirToRoadBits(DiagDirection d)
|
|||||||
return (RoadBits)(1U << (3 ^ d));
|
return (RoadBits)(1U << (3 ^ d));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Checks whether the trackdir means that we are reversing */
|
||||||
|
static inline bool IsReversingRoadTrackdir(Trackdir dir)
|
||||||
|
{
|
||||||
|
return (dir & 0x07) >= 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Checks whether the given trackdir is a straight road */
|
||||||
|
static inline bool IsStraightRoadTrackdir(Trackdir dir)
|
||||||
|
{
|
||||||
|
return (dir & 0x06) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* ROAD_H */
|
#endif /* ROAD_H */
|
||||||
|
@ -79,18 +79,6 @@ static const Trackdir _roadveh_depot_exit_trackdir[DIAGDIR_END] = {
|
|||||||
TRACKDIR_X_NE, TRACKDIR_Y_SE, TRACKDIR_X_SW, TRACKDIR_Y_NW
|
TRACKDIR_X_NE, TRACKDIR_Y_SE, TRACKDIR_X_SW, TRACKDIR_Y_NW
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Checks whether the trackdir means that we are reversing */
|
|
||||||
static bool IsReversingRoadTrackdir(Trackdir dir)
|
|
||||||
{
|
|
||||||
return (dir & 0x07) >= 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Checks whether the given trackdir is a straight road */
|
|
||||||
static bool IsStraightRoadTrackdir(Trackdir dir)
|
|
||||||
{
|
|
||||||
return (dir & 0x06) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int GetRoadVehImage(const Vehicle* v, Direction direction)
|
int GetRoadVehImage(const Vehicle* v, Direction direction)
|
||||||
{
|
{
|
||||||
int img = v->spritenum;
|
int img = v->spritenum;
|
||||||
@ -1250,6 +1238,13 @@ static uint RoadFindPathToStop(const Vehicle *v, TileIndex tile)
|
|||||||
enum {
|
enum {
|
||||||
RDE_NEXT_TILE = 0x80,
|
RDE_NEXT_TILE = 0x80,
|
||||||
RDE_TURNED = 0x40,
|
RDE_TURNED = 0x40,
|
||||||
|
|
||||||
|
/* Start frames for when a vehicle enters a tile/changes its state.
|
||||||
|
* The start frame is different for vehicles that turned around or
|
||||||
|
* are leaving the depot as the do not start at the edge of the tile */
|
||||||
|
RVC_DEFAULT_START_FRAME = 0,
|
||||||
|
RVC_TURN_AROUND_START_FRAME = 1,
|
||||||
|
RVC_DEPOT_START_FRAME = 6
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct RoadDriveEntry {
|
typedef struct RoadDriveEntry {
|
||||||
@ -1313,10 +1308,10 @@ static void RoadVehController(Vehicle *v)
|
|||||||
v->direction = DiagDirToDir(dir);
|
v->direction = DiagDirToDir(dir);
|
||||||
|
|
||||||
tdir = _roadveh_depot_exit_trackdir[dir];
|
tdir = _roadveh_depot_exit_trackdir[dir];
|
||||||
rdp = _road_drive_data[(_opt.road_side << 4) + tdir];
|
rdp = _road_drive_data[(_opt.road_side << RVS_DRIVE_SIDE) + tdir];
|
||||||
|
|
||||||
x = TileX(v->tile) * TILE_SIZE + (rdp[6].x & 0xF);
|
x = TileX(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].x & 0xF);
|
||||||
y = TileY(v->tile) * TILE_SIZE + (rdp[6].y & 0xF);
|
y = TileY(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].y & 0xF);
|
||||||
|
|
||||||
if (RoadVehFindCloseTo(v, x, y, v->direction) != NULL) return;
|
if (RoadVehFindCloseTo(v, x, y, v->direction) != NULL) return;
|
||||||
|
|
||||||
@ -1328,7 +1323,7 @@ static void RoadVehController(Vehicle *v)
|
|||||||
|
|
||||||
v->vehstatus &= ~VS_HIDDEN;
|
v->vehstatus &= ~VS_HIDDEN;
|
||||||
v->u.road.state = tdir;
|
v->u.road.state = tdir;
|
||||||
v->u.road.frame = 6;
|
v->u.road.frame = RVC_DEPOT_START_FRAME;
|
||||||
|
|
||||||
v->cur_image = GetRoadVehImage(v, v->direction);
|
v->cur_image = GetRoadVehImage(v, v->direction);
|
||||||
UpdateRoadVehDeltaXY(v);
|
UpdateRoadVehDeltaXY(v);
|
||||||
@ -1355,7 +1350,7 @@ static void RoadVehController(Vehicle *v)
|
|||||||
BeginVehicleMove(v);
|
BeginVehicleMove(v);
|
||||||
|
|
||||||
if (v->u.road.state == RVSB_WORMHOLE) {
|
if (v->u.road.state == RVSB_WORMHOLE) {
|
||||||
/* Vehicle is on a bridge or in a tunnel */
|
/* Vehicle is entering a depot or is on a bridge or in a tunnel */
|
||||||
GetNewVehiclePosResult gp;
|
GetNewVehiclePosResult gp;
|
||||||
|
|
||||||
GetNewVehiclePos(v, &gp);
|
GetNewVehiclePos(v, &gp);
|
||||||
@ -1385,7 +1380,6 @@ static void RoadVehController(Vehicle *v)
|
|||||||
rd = _road_drive_data[(v->u.road.state + (_opt.road_side << RVS_DRIVE_SIDE)) ^ v->u.road.overtaking][v->u.road.frame + 1];
|
rd = _road_drive_data[(v->u.road.state + (_opt.road_side << RVS_DRIVE_SIDE)) ^ v->u.road.overtaking][v->u.road.frame + 1];
|
||||||
|
|
||||||
if (rd.x & RDE_NEXT_TILE) {
|
if (rd.x & RDE_NEXT_TILE) {
|
||||||
/* Vehicle is moving to the next tile */
|
|
||||||
TileIndex tile = v->tile + TileOffsByDiagDir(rd.x & 3);
|
TileIndex tile = v->tile + TileOffsByDiagDir(rd.x & 3);
|
||||||
Trackdir dir = RoadFindPathToDest(v, tile, (DiagDirection)(rd.x & 3));
|
Trackdir dir = RoadFindPathToDest(v, tile, (DiagDirection)(rd.x & 3));
|
||||||
uint32 r;
|
uint32 r;
|
||||||
@ -1393,7 +1387,6 @@ static void RoadVehController(Vehicle *v)
|
|||||||
const RoadDriveEntry *rdp;
|
const RoadDriveEntry *rdp;
|
||||||
|
|
||||||
if (dir == INVALID_TRACKDIR) {
|
if (dir == INVALID_TRACKDIR) {
|
||||||
/* No path was found to destination */
|
|
||||||
v->cur_speed = 0;
|
v->cur_speed = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1405,17 +1398,16 @@ again:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Get position data for first frame on the new tile */
|
/* Get position data for first frame on the new tile */
|
||||||
rdp = _road_drive_data[(dir + (_opt.road_side << 4)) ^ v->u.road.overtaking];
|
rdp = _road_drive_data[(dir + (_opt.road_side << RVS_DRIVE_SIDE)) ^ v->u.road.overtaking];
|
||||||
|
|
||||||
x = TileX(tile) * TILE_SIZE + rdp[0].x;
|
x = TileX(tile) * TILE_SIZE + rdp[RVC_DEFAULT_START_FRAME].x;
|
||||||
y = TileY(tile) * TILE_SIZE + rdp[0].y;
|
y = TileY(tile) * TILE_SIZE + rdp[RVC_DEFAULT_START_FRAME].y;
|
||||||
|
|
||||||
newdir = RoadVehGetSlidingDirection(v, x, y);
|
newdir = RoadVehGetSlidingDirection(v, x, y);
|
||||||
if (RoadVehFindCloseTo(v, x, y, newdir) != NULL) return;
|
if (RoadVehFindCloseTo(v, x, y, newdir) != NULL) return;
|
||||||
|
|
||||||
r = VehicleEnterTile(v, tile, x, y);
|
r = VehicleEnterTile(v, tile, x, y);
|
||||||
if (HASBIT(r, VETS_CANNOT_ENTER)) {
|
if (HASBIT(r, VETS_CANNOT_ENTER)) {
|
||||||
/* Vehicle cannot enter the tile */
|
|
||||||
if (!IsTileType(tile, MP_TUNNELBRIDGE)) {
|
if (!IsTileType(tile, MP_TUNNELBRIDGE)) {
|
||||||
v->cur_speed = 0;
|
v->cur_speed = 0;
|
||||||
return;
|
return;
|
||||||
@ -1433,20 +1425,18 @@ again:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (IsRoadStop(v->tile)) {
|
if (IsRoadStop(v->tile)) {
|
||||||
/* The tile that the vehicle is leaving is a road stop */
|
|
||||||
RoadStop *rs = GetRoadStopByTile(v->tile, GetRoadStopType(v->tile));
|
RoadStop *rs = GetRoadStopByTile(v->tile, GetRoadStopType(v->tile));
|
||||||
|
|
||||||
/* Vehicle is leaving a road stop tile, mark bay as free and clear the usage bit */
|
/* Vehicle is leaving a road stop tile, mark bay as free */
|
||||||
rs->FreeBay(HASBIT(v->u.road.state, RVS_USING_SECOND_BAY));
|
rs->FreeBay(HASBIT(v->u.road.state, RVS_USING_SECOND_BAY));
|
||||||
rs->SetEntranceBusy(false);
|
rs->SetEntranceBusy(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!HASBIT(r, VETS_ENTERED_WORMHOLE)) {
|
if (!HASBIT(r, VETS_ENTERED_WORMHOLE)) {
|
||||||
/* Set vehicle to first frame on new tile */
|
|
||||||
v->tile = tile;
|
v->tile = tile;
|
||||||
v->u.road.state = (byte)dir;
|
v->u.road.state = (byte)dir;
|
||||||
v->u.road.frame = 0;
|
v->u.road.frame = RVC_DEFAULT_START_FRAME;
|
||||||
}
|
}
|
||||||
if (newdir != v->direction) {
|
if (newdir != v->direction) {
|
||||||
v->direction = newdir;
|
v->direction = newdir;
|
||||||
@ -1463,35 +1453,30 @@ again:
|
|||||||
/* Vehicle has finished turning around, it will now head back onto the same tile */
|
/* Vehicle has finished turning around, it will now head back onto the same tile */
|
||||||
Trackdir dir = RoadFindPathToDest(v, v->tile, (DiagDirection)(rd.x & 3));
|
Trackdir dir = RoadFindPathToDest(v, v->tile, (DiagDirection)(rd.x & 3));
|
||||||
uint32 r;
|
uint32 r;
|
||||||
int tmp;
|
|
||||||
Direction newdir;
|
Direction newdir;
|
||||||
const RoadDriveEntry *rdp;
|
const RoadDriveEntry *rdp;
|
||||||
|
|
||||||
if (dir == INVALID_TRACKDIR) {
|
if (dir == INVALID_TRACKDIR) {
|
||||||
/* No path was found to destination */
|
|
||||||
v->cur_speed = 0;
|
v->cur_speed = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = (_opt.road_side << 4) + dir;
|
rdp = _road_drive_data[(_opt.road_side << RVS_DRIVE_SIDE) + dir];
|
||||||
rdp = _road_drive_data[tmp];
|
|
||||||
|
|
||||||
x = TileX(v->tile) * TILE_SIZE + rdp[1].x;
|
x = TileX(v->tile) * TILE_SIZE + rdp[RVC_TURN_AROUND_START_FRAME].x;
|
||||||
y = TileY(v->tile) * TILE_SIZE + rdp[1].y;
|
y = TileY(v->tile) * TILE_SIZE + rdp[RVC_TURN_AROUND_START_FRAME].y;
|
||||||
|
|
||||||
newdir = RoadVehGetSlidingDirection(v, x, y);
|
newdir = RoadVehGetSlidingDirection(v, x, y);
|
||||||
if (RoadVehFindCloseTo(v, x, y, newdir) != NULL) return;
|
if (RoadVehFindCloseTo(v, x, y, newdir) != NULL) return;
|
||||||
|
|
||||||
r = VehicleEnterTile(v, v->tile, x, y);
|
r = VehicleEnterTile(v, v->tile, x, y);
|
||||||
if (HASBIT(r, VETS_CANNOT_ENTER)) {
|
if (HASBIT(r, VETS_CANNOT_ENTER)) {
|
||||||
/* Vehicle cannot enter the tile */
|
|
||||||
v->cur_speed = 0;
|
v->cur_speed = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set vehicle to second frame on the tile */
|
v->u.road.state = dir;
|
||||||
v->u.road.state = tmp & ~(1 << RVS_DRIVE_SIDE);
|
v->u.road.frame = RVC_TURN_AROUND_START_FRAME;
|
||||||
v->u.road.frame = 1;
|
|
||||||
|
|
||||||
if (newdir != v->direction) {
|
if (newdir != v->direction) {
|
||||||
v->direction = newdir;
|
v->direction = newdir;
|
||||||
@ -1524,7 +1509,6 @@ again:
|
|||||||
|
|
||||||
old_dir = v->direction;
|
old_dir = v->direction;
|
||||||
if (new_dir != old_dir) {
|
if (new_dir != old_dir) {
|
||||||
/* The vehicle's direction has changed. */
|
|
||||||
v->direction = new_dir;
|
v->direction = new_dir;
|
||||||
v->cur_speed -= (v->cur_speed >> 2);
|
v->cur_speed -= (v->cur_speed >> 2);
|
||||||
if (old_dir != v->u.road.state) {
|
if (old_dir != v->u.road.state) {
|
||||||
@ -1534,7 +1518,7 @@ again:
|
|||||||
SetRoadVehPosition(v, v->x_pos, v->y_pos);
|
SetRoadVehPosition(v, v->x_pos, v->y_pos);
|
||||||
/* Note, return here means that the frame counter is not incremented
|
/* Note, return here means that the frame counter is not incremented
|
||||||
* for vehicles changing direction in a road stop. This causes frames to
|
* for vehicles changing direction in a road stop. This causes frames to
|
||||||
* be repeated. Is this intended? */
|
* be repeated. (XXX) Is this intended? */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1552,7 +1536,6 @@ again:
|
|||||||
/* Vehicle has arrived at a bay in a road stop */
|
/* Vehicle has arrived at a bay in a road stop */
|
||||||
Order old_order;
|
Order old_order;
|
||||||
|
|
||||||
/* Clear road stop busy bit to allow another vehicle to enter or leave */
|
|
||||||
rs->SetEntranceBusy(false);
|
rs->SetEntranceBusy(false);
|
||||||
|
|
||||||
v->last_station_visited = GetStationIndex(v->tile);
|
v->last_station_visited = GetStationIndex(v->tile);
|
||||||
@ -1581,7 +1564,7 @@ again:
|
|||||||
/* Vehicle is ready to leave a bay in a road stop */
|
/* Vehicle is ready to leave a bay in a road stop */
|
||||||
if (v->current_order.type != OT_GOTO_DEPOT) {
|
if (v->current_order.type != OT_GOTO_DEPOT) {
|
||||||
if (rs->IsEntranceBusy()) {
|
if (rs->IsEntranceBusy()) {
|
||||||
/* Road stop entrance is busy, so wait */
|
/* Road stop entrance is busy, so wait as there is nowhere else to go */
|
||||||
v->cur_speed = 0;
|
v->cur_speed = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1589,7 +1572,7 @@ again:
|
|||||||
v->current_order.flags = 0;
|
v->current_order.flags = 0;
|
||||||
ClearSlot(v);
|
ClearSlot(v);
|
||||||
}
|
}
|
||||||
/* Set road stop busy bit to prevent another vehicle trying to enter or leave */
|
|
||||||
rs->SetEntranceBusy(true);
|
rs->SetEntranceBusy(true);
|
||||||
|
|
||||||
if (rs == v->u.road.slot) {
|
if (rs == v->u.road.slot) {
|
||||||
@ -1626,7 +1609,6 @@ again:
|
|||||||
* entry onto bridge or into tunnel */
|
* entry onto bridge or into tunnel */
|
||||||
r = VehicleEnterTile(v, v->tile, x, y);
|
r = VehicleEnterTile(v, v->tile, x, y);
|
||||||
if (HASBIT(r, VETS_CANNOT_ENTER)) {
|
if (HASBIT(r, VETS_CANNOT_ENTER)) {
|
||||||
/* Vehicle cannot continue */
|
|
||||||
v->cur_speed = 0;
|
v->cur_speed = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2760,7 +2760,7 @@ Trackdir GetVehicleTrackdir(const Vehicle* v)
|
|||||||
return DiagdirToDiagTrackdir(GetRoadStopDir(v->tile)); /* Road vehicle in a station */
|
return DiagdirToDiagTrackdir(GetRoadStopDir(v->tile)); /* Road vehicle in a station */
|
||||||
|
|
||||||
/* If vehicle's state is a valid track direction (vehicle is not turning around) return it */
|
/* If vehicle's state is a valid track direction (vehicle is not turning around) return it */
|
||||||
if ((v->u.road.state & 7) < 6) return (Trackdir)v->u.road.state;
|
if (!IsReversingRoadTrackdir((Trackdir)v->u.road.state)) return (Trackdir)v->u.road.state;
|
||||||
|
|
||||||
/* Vehicle is turning around, get the direction from vehicle's direction */
|
/* Vehicle is turning around, get the direction from vehicle's direction */
|
||||||
return DiagdirToDiagTrackdir(DirToDiagDir(v->direction));
|
return DiagdirToDiagTrackdir(DirToDiagDir(v->direction));
|
||||||
|
Loading…
Reference in New Issue
Block a user