diff options
-rw-r--r-- | src/rail_cmd.cpp | 41 | ||||
-rw-r--r-- | src/road_cmd.cpp | 2 | ||||
-rw-r--r-- | src/roadveh_cmd.cpp | 2 | ||||
-rw-r--r-- | src/station_cmd.cpp | 2 | ||||
-rw-r--r-- | src/train_cmd.cpp | 23 | ||||
-rw-r--r-- | src/tunnelbridge_cmd.cpp | 8 | ||||
-rw-r--r-- | src/vehicle.cpp | 30 |
7 files changed, 32 insertions, 76 deletions
diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 8596bc8be..b29f63538 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -82,21 +82,14 @@ const byte _track_sloped_sprites[14] = { * 11uuuudd => rail depot */ -/** Struct used in EnsureNoTrainOnTrack() */ -struct TrainOnTrackData { - TileIndex tile; ///< tile to check - uint z; ///< tile max Z - TrackBits rail_bits; ///< trackbits of interest -}; static void *EnsureNoTrainOnTrackProc(Vehicle *v, void *data) { - const TrainOnTrackData *info = (const TrainOnTrackData *)data; + TrackBits rail_bits = *(TrackBits *)data; - if (v->tile != info->tile || v->type != VEH_TRAIN) return NULL; - if (v->z_pos > info->z) return NULL; + if (v->type != VEH_TRAIN) return NULL; - if ((v->u.rail.track != info->rail_bits) && !TracksOverlap(v->u.rail.track | info->rail_bits)) return NULL; + if ((v->u.rail.track != rail_bits) && !TracksOverlap(v->u.rail.track | rail_bits)) return NULL; _error_message = VehicleInTheWayErrMsg(v); return v; @@ -111,13 +104,9 @@ static void *EnsureNoTrainOnTrackProc(Vehicle *v, void *data) */ static bool EnsureNoTrainOnTrack(TileIndex tile, Track track) { - TrainOnTrackData info; - - info.tile = tile; - info.z = GetTileMaxZ(tile); - info.rail_bits = TrackToTrackBits(track); + TrackBits rail_bits = TrackToTrackBits(track); - return VehicleFromPos(tile, &info, EnsureNoTrainOnTrackProc) == NULL; + return VehicleFromPos(tile, &rail_bits, &EnsureNoTrainOnTrackProc) == NULL; } static bool CheckTrackCombination(TileIndex tile, TrackBits to_build, uint flags) @@ -1160,7 +1149,7 @@ void *UpdateTrainPowerProc(Vehicle *v, void *data) { /* Similiar checks as in TrainPowerChanged() */ - if (v->type == VEH_TRAIN && v->tile == *(TileIndex*)data && !IsArticulatedPart(v)) { + if (v->type == VEH_TRAIN && !IsArticulatedPart(v)) { const RailVehicleInfo *rvi = RailVehInfo(v->engine_type); if (GetVehicleProperty(v, 0x0B, rvi->power) != 0) TrainPowerChanged(v->First()); } @@ -1198,7 +1187,7 @@ static CommandCost DoConvertRail(TileIndex tile, RailType totype, bool exec) } /* update power of train engines on this tile */ - VehicleFromPos(tile, &tile, UpdateTrainPowerProc); + VehicleFromPos(tile, NULL, &UpdateTrainPowerProc); } return CommandCost(RailConvertCost(GetRailType(tile), totype) * CountBits(GetTrackBits(tile))); @@ -1893,23 +1882,14 @@ static bool SetSignalsEnumProc(TileIndex tile, void* data, Trackdir trackdir, ui return false; } -/* Struct to parse data from VehicleFromPos to SignalVehicleCheckProc */ -struct SignalVehicleCheckStruct { - TileIndex tile; - uint track; -}; - static void *SignalVehicleCheckProc(Vehicle *v, void *data) { - const SignalVehicleCheckStruct* dest = (SignalVehicleCheckStruct*)data; + uint track = *(uint*)data; if (v->type != VEH_TRAIN) return NULL; - /* Wrong tile, or no train? Not a match */ - if (v->tile != dest->tile) return NULL; - /* Are we on the same piece of track? */ - if (dest->track & v->u.rail.track * 0x101) return v; + if (track & v->u.rail.track * 0x101) return v; return NULL; } @@ -1922,8 +1902,7 @@ static bool SignalVehicleCheck(TileIndex tile, uint track) TileIndex endtile = IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile); return GetVehicleTunnelBridge(tile, endtile) != NULL; } else { - SignalVehicleCheckStruct dest = {tile, track}; - return VehicleFromPos(tile, &dest, &SignalVehicleCheckProc) != NULL; + return VehicleFromPos(tile, &track, &SignalVehicleCheckProc) != NULL; } } diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index f527a970e..b3b38e02c 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -619,7 +619,7 @@ CommandCost DoConvertStreetRail(TileIndex tile, RailType totype, bool exec) SetRailType(tile, totype); MarkTileDirtyByTile(tile); YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetCrossingRailBits(tile))); - VehicleFromPos(tile, &tile, UpdateTrainPowerProc); + VehicleFromPos(tile, NULL, &UpdateTrainPowerProc); } return CommandCost(RailConvertCost(GetRailType(tile), totype)); diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 78ca24de9..7ce4a9c7a 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1015,7 +1015,7 @@ static void* EnumFindVehToOvertake(Vehicle* v, void* data) const OvertakeData* od = (OvertakeData*)data; return - v->tile == od->tile && v->type == VEH_ROAD && v->First() == v && v != od->u && v != od->v ? + v->type == VEH_ROAD && v->First() == v && v != od->u && v != od->v ? v : NULL; } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index dabb64646..0e189bd05 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1306,7 +1306,7 @@ CommandCost DoConvertStationRail(TileIndex tile, RailType totype, bool exec) SetRailType(tile, totype); MarkTileDirtyByTile(tile); YapfNotifyTrackLayoutChange(tile, GetRailStationTrack(tile)); - VehicleFromPos(tile, &tile, UpdateTrainPowerProc); + VehicleFromPos(tile, NULL, &UpdateTrainPowerProc); } return CommandCost(RailConvertCost(GetRailType(tile), totype)); diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 7c1f488cd..8264b0fa3 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1528,15 +1528,15 @@ static void ReverseTrainSwapVeh(Vehicle *v, int l, int r) /* Check if the vehicle is a train and is on the tile we are testing */ static void *TestTrainOnCrossing(Vehicle *v, void *data) { - if (v->tile != *(const TileIndex*)data || v->type != VEH_TRAIN) return NULL; + if (v->type != VEH_TRAIN) return NULL; return v; } static void DisableTrainCrossing(TileIndex tile) { if (IsLevelCrossingTile(tile) && - VehicleFromPos(tile, &tile, TestTrainOnCrossing) == NULL && // empty? - IsCrossingBarred(tile)) { + IsCrossingBarred(tile) && + VehicleFromPos(tile, NULL, &TestTrainOnCrossing) == NULL) { // empty? UnbarCrossing(tile); MarkTileDirtyByTile(tile); } @@ -2798,17 +2798,12 @@ static void CheckTrainCollision(Vehicle *v) SndPlayVehicleFx(SND_13_BIG_CRASH, v); } -struct VehicleAtSignalData { - TileIndex tile; - Direction direction; -}; - static void *CheckVehicleAtSignal(Vehicle *v, void *data) { - const VehicleAtSignalData* vasd = (VehicleAtSignalData*)data; + Direction dir = *(Direction*)data; - if (v->type == VEH_TRAIN && IsFrontEngine(v) && v->tile == vasd->tile) { - DirDiff diff = ChangeDirDiff(DirDifference(v->direction, vasd->direction), DIRDIFF_90RIGHT); + if (v->type == VEH_TRAIN && IsFrontEngine(v)) { + DirDiff diff = ChangeDirDiff(DirDifference(v->direction, dir), DIRDIFF_90RIGHT); if (diff == DIRDIFF_90RIGHT || (v->cur_speed <= 5 && diff <= DIRDIFF_REVERSE)) return v; } @@ -2907,12 +2902,10 @@ static void TrainController(Vehicle *v, bool update_image) v->progress = 255 - 10; if (++v->load_unload_time_rem < _patches.wait_twoway_signal * 73) { TileIndex o_tile = gp.new_tile + TileOffsByDiagDir(enterdir); - VehicleAtSignalData vasd; - vasd.tile = o_tile; - vasd.direction = ReverseDir(dir); + Direction rdir = ReverseDir(dir); /* check if a train is waiting on the other side */ - if (VehicleFromPos(o_tile, &vasd, CheckVehicleAtSignal) == NULL) return; + if (VehicleFromPos(o_tile, &rdir, &CheckVehicleAtSignal) == NULL) return; } } goto reverse_train_direction; diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 008f8a1fa..272d1bca6 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -721,8 +721,8 @@ CommandCost DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec YapfNotifyTrackLayoutChange(tile, track); YapfNotifyTrackLayoutChange(endtile, track); - VehicleFromPos(tile, &tile, UpdateTrainPowerProc); - VehicleFromPos(endtile, &endtile, UpdateTrainPowerProc); + VehicleFromPos(tile, NULL, &UpdateTrainPowerProc); + VehicleFromPos(endtile, NULL, &UpdateTrainPowerProc); } return CommandCost((DistanceManhattan(tile, endtile) + 1) * RailConvertCost(GetRailType(tile), totype)); @@ -746,8 +746,8 @@ CommandCost DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec YapfNotifyTrackLayoutChange(tile, track); YapfNotifyTrackLayoutChange(endtile, track); - VehicleFromPos(tile, &tile, UpdateTrainPowerProc); - VehicleFromPos(endtile, &endtile, UpdateTrainPowerProc); + VehicleFromPos(tile, NULL, &UpdateTrainPowerProc); + VehicleFromPos(endtile, NULL, &UpdateTrainPowerProc); for (tile += delta; tile != endtile; tile += delta) { MarkTileDirtyByTile(tile); // TODO encapsulate this into a function diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 8074a08b4..7b9c8bc9c 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -120,10 +120,10 @@ StringID VehicleInTheWayErrMsg(const Vehicle* v) static void *EnsureNoVehicleProcZ(Vehicle *v, void *data) { - const TileInfo *ti = (const TileInfo*)data; + byte z = *(byte*)data; - if (v->tile != ti->tile || v->type == VEH_DISASTER || (v->type == VEH_AIRCRAFT && v->subtype == AIR_SHADOW)) return NULL; - if (v->z_pos > ti->z) return NULL; + if (v->type == VEH_DISASTER || (v->type == VEH_AIRCRAFT && v->subtype == AIR_SHADOW)) return NULL; + if (v->z_pos > z) return NULL; _error_message = VehicleInTheWayErrMsg(v); return v; @@ -131,12 +131,7 @@ static void *EnsureNoVehicleProcZ(Vehicle *v, void *data) Vehicle *FindVehicleOnTileZ(TileIndex tile, byte z) { - TileInfo ti; - - ti.tile = tile; - ti.z = z; - - return (Vehicle*)VehicleFromPos(tile, &ti, EnsureNoVehicleProcZ); + return (Vehicle*)VehicleFromPos(tile, &z, &EnsureNoVehicleProcZ); } bool EnsureNoVehicleOnGround(TileIndex tile) @@ -170,17 +165,10 @@ Vehicle *FindVehicleBetween(TileIndex from, TileIndex to, byte z, bool without_c } -/** Struct used for GetVehicleTunnelBridge() */ -struct TunnelBridgeInfo { - TileIndex tile; ///< tile -}; - /** Procedure called for every vehicle found in tunnel/bridge in the hash map */ static void *GetVehicleTunnelBridgeProc(Vehicle *v, void *data) { - TunnelBridgeInfo *tbi = (TunnelBridgeInfo*)data; - - if (v->tile != tbi->tile || (v->type != VEH_TRAIN && v->type != VEH_ROAD)) return NULL; + if (v->type != VEH_TRAIN && v->type != VEH_ROAD) return NULL; _error_message = VehicleInTheWayErrMsg(v); return v; @@ -194,14 +182,10 @@ static void *GetVehicleTunnelBridgeProc(Vehicle *v, void *data) */ Vehicle *GetVehicleTunnelBridge(TileIndex tile, TileIndex endtile) { - TunnelBridgeInfo tbi = {tile}; - - Vehicle *v = (Vehicle*)VehicleFromPos(tile, &tbi, &GetVehicleTunnelBridgeProc); + Vehicle *v = (Vehicle*)VehicleFromPos(tile, NULL, &GetVehicleTunnelBridgeProc); if (v != NULL) return v; - tbi.tile = endtile; - - return (Vehicle*)VehicleFromPos(endtile, &tbi, &GetVehicleTunnelBridgeProc); + return (Vehicle*)VehicleFromPos(endtile, NULL, &GetVehicleTunnelBridgeProc); } |