diff options
Diffstat (limited to 'train_cmd.c')
-rw-r--r-- | train_cmd.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/train_cmd.c b/train_cmd.c index 843bb29ac..291c2ea01 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -522,7 +522,7 @@ static int32 CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags) if (flags & DC_EXEC) { Vehicle *u, *w; - uint dir; + DiagDirection dir; v = vl[0]; v->spritenum = rvi->image_index; @@ -541,7 +541,7 @@ static int32 CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags) dir = GB(_m[tile].m5, 0, 2); - v->direction = dir * 2 + 1; + v->direction = DiagDirToDir(dir); v->tile = tile; x = TileX(tile) * TILE_SIZE | _vehicle_initial_x_fract[dir]; @@ -694,13 +694,13 @@ int32 CmdBuildRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2) return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME); if (flags & DC_EXEC) { - uint dir; + DiagDirection dir; v->unitnumber = unit_num; dir = GB(_m[tile].m5, 0, 2); - v->direction = dir * 2 + 1; + v->direction = DiagDirToDir(dir); v->tile = tile; v->owner = _current_player; v->x_pos = (x |= _vehicle_initial_x_fract[dir]); @@ -1354,7 +1354,7 @@ int32 CmdSellRailWagon(int x, int y, uint32 flags, uint32 p1, uint32 p2) return cost; } -static void UpdateTrainDeltaXY(Vehicle *v, int direction) +static void UpdateTrainDeltaXY(Vehicle *v, Direction direction) { #define MKIT(a,b,c,d) ((a&0xFF)<<24) | ((b&0xFF)<<16) | ((c&0xFF)<<8) | ((d&0xFF)<<0) static const uint32 _delta_xy_table[8] = { @@ -1744,7 +1744,6 @@ static bool NtpCallbFindDepot(TileIndex tile, TrainFindDepotData *tfdd, int trac // crashed! static TrainFindDepotData FindClosestTrainDepot(Vehicle *v) { - int i; TrainFindDepotData tfdd; TileIndex tile = v->tile; @@ -1782,14 +1781,16 @@ static TrainFindDepotData FindClosestTrainDepot(Vehicle *v) } } else { // search in the forward direction first. - i = v->direction >> 1; - if (!(v->direction & 1) && v->u.rail.track != _state_dir_table[i]) i = (i - 1) & 3; + DiagDirection i; + + i = DirToDiagDir(v->direction); + if (!(v->direction & 1) && v->u.rail.track != _state_dir_table[i]) i = (i + 3) & 3; NewTrainPathfind(tile, 0, i, (NTPEnumProc*)NtpCallbFindDepot, &tfdd); if (tfdd.best_length == (uint)-1){ tfdd.reverse = true; // search in backwards direction - i = (v->direction^4) >> 1; - if (!(v->direction & 1) && v->u.rail.track != _state_dir_table[i]) i = (i - 1) & 3; + i = ReverseDiagDir(DirToDiagDir(v->direction)); + if (!(v->direction & 1) && v->u.rail.track != _state_dir_table[i]) i = (i + 3) & 3; NewTrainPathfind(tile, 0, i, (NTPEnumProc*)NtpCallbFindDepot, &tfdd); } } @@ -2081,7 +2082,7 @@ static unsigned int _declspec(naked) _rdtsc(void) /* choose a track */ -static byte ChooseTrainTrack(Vehicle *v, TileIndex tile, int enterdir, TrackdirBits trackdirbits) +static byte ChooseTrainTrack(Vehicle* v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirbits) { TrainTrackFollowerData fd; uint best_track; @@ -2496,7 +2497,7 @@ static const byte _new_vehicle_direction_table[11] = { 2, 3, 4, }; -static int GetNewVehicleDirectionByTile(TileIndex new_tile, TileIndex old_tile) +static Direction GetNewVehicleDirectionByTile(TileIndex new_tile, TileIndex old_tile) { uint offs = (TileY(new_tile) - TileY(old_tile) + 1) * 4 + TileX(new_tile) - TileX(old_tile) + 1; @@ -2504,7 +2505,7 @@ static int GetNewVehicleDirectionByTile(TileIndex new_tile, TileIndex old_tile) return _new_vehicle_direction_table[offs]; } -static int GetNewVehicleDirection(const Vehicle *v, int x, int y) +static Direction GetNewVehicleDirection(const Vehicle *v, int x, int y) { uint offs = (y - v->y_pos + 1) * 4 + (x - v->x_pos + 1); assert(offs < 11); @@ -2620,7 +2621,7 @@ static const byte _otherside_signal_directions[14] = { 5, 7, 7, 5, 7, 1, }; -static void TrainMovedChangeSignals(TileIndex tile, int dir) +static void TrainMovedChangeSignals(TileIndex tile, DiagDirection dir) { if (IsTileType(tile, MP_RAILWAY) && (_m[tile].m5 & 0xC0) == 0x40) { uint i = FindFirstBit2x64((_m[tile].m5 + (_m[tile].m5 << 8)) & _reachable_tracks[dir]); @@ -2751,7 +2752,10 @@ static void TrainController(Vehicle *v) Vehicle *prev; GetNewVehiclePosResult gp; uint32 r, tracks,ts; - int i, enterdir, newdir, dir; + int i; + DiagDirection enterdir; + Direction dir; + Direction newdir; byte chosen_dir; byte chosen_track; byte old_z; @@ -2795,7 +2799,7 @@ static void TrainController(Vehicle *v) byte bits; /* Determine what direction we're entering the new tile from */ dir = GetNewVehicleDirectionByTile(gp.new_tile, gp.old_tile); - enterdir = dir >> 1; + enterdir = DirToDiagDir(dir); assert(enterdir==0 || enterdir==1 || enterdir==2 || enterdir==3); /* Get the status of the tracks in the new tile and mask @@ -2871,7 +2875,7 @@ static void TrainController(Vehicle *v) /* Signals can only change when the first * (above) or the last vehicle moves. */ if (v->next == NULL) - TrainMovedChangeSignals(gp.old_tile, (enterdir) ^ 2); + TrainMovedChangeSignals(gp.old_tile, ReverseDiagDir(enterdir)); if (prev == NULL) AffectSpeedByDirChange(v, chosen_dir); @@ -3117,7 +3121,7 @@ static bool TrainCheckIfLineEnds(Vehicle *v) tile = v->tile; // tunnel entrance? - if (IsTunnelTile(tile) && GB(_m[tile].m5, 0, 2) * 2 + 1 == v->direction) + if (IsTunnelTile(tile) && DiagDirToDir(GB(_m[tile].m5, 0, 2)) == v->direction) return true; // depot? |