mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 22:28:56 +00:00
(svn r11910) -Fix: play 'ding-ding' crossing sound in more cases (except gameload and crossing construction)
-Fix: crossing sound is bound to tile, not to vehicle
This commit is contained in:
parent
ac0fa7f69f
commit
8d077b16d8
@ -2317,7 +2317,7 @@ bool AfterLoadGame()
|
||||
if (CheckSavegameVersion(86)) {
|
||||
/* Now all crossings should be in correct state */
|
||||
for (TileIndex t = 0; t < map_size; t++) {
|
||||
if (IsLevelCrossingTile(t)) UpdateLevelCrossing(t);
|
||||
if (IsLevelCrossingTile(t)) UpdateLevelCrossing(t, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -383,7 +383,7 @@ CommandCost CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p
|
||||
(track == TRACK_Y && road == ROAD_X)) {
|
||||
if (flags & DC_EXEC) {
|
||||
MakeRoadCrossing(tile, GetRoadOwner(tile, ROADTYPE_ROAD), GetRoadOwner(tile, ROADTYPE_TRAM), GetRoadOwner(tile, ROADTYPE_HWAY), _current_player, (track == TRACK_X ? AXIS_Y : AXIS_X), railtype, roadtypes, GetTownIndex(tile));
|
||||
UpdateLevelCrossing(tile);
|
||||
UpdateLevelCrossing(tile, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -487,7 +487,7 @@ CommandCost CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||
YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile)));
|
||||
/* Always add road to the roadtypes (can't draw without it) */
|
||||
MakeRoadCrossing(tile, _current_player, _current_player, _current_player, GetTileOwner(tile), roaddir, GetRailType(tile), RoadTypeToRoadTypes(rt) | ROADTYPES_ROAD, p2);
|
||||
UpdateLevelCrossing(tile);
|
||||
UpdateLevelCrossing(tile, false);
|
||||
MarkTileDirtyByTile(tile);
|
||||
}
|
||||
return CommandCost(EXPENSES_CONSTRUCTION, _price.build_road * (rt == ROADTYPE_ROAD ? 2 : 4));
|
||||
|
@ -136,6 +136,6 @@ bool ValParamRoadType(const RoadType rt);
|
||||
*/
|
||||
RoadTypes GetPlayerRoadtypes(const PlayerID p);
|
||||
|
||||
void UpdateLevelCrossing(TileIndex tile);
|
||||
void UpdateLevelCrossing(TileIndex tile, bool sound = true);
|
||||
|
||||
#endif /* ROAD_FUNC_H */
|
||||
|
@ -191,25 +191,28 @@ static inline TrackBits GetCrossingRailBits(TileIndex tile)
|
||||
return AxisToTrackBits(OtherAxis(GetCrossingRoadAxis(tile)));
|
||||
}
|
||||
|
||||
|
||||
static inline void UnbarCrossing(TileIndex t)
|
||||
{
|
||||
assert(GetRoadTileType(t) == ROAD_TILE_CROSSING);
|
||||
ClrBit(_m[t].m4, 5);
|
||||
}
|
||||
|
||||
static inline void BarCrossing(TileIndex t)
|
||||
{
|
||||
assert(GetRoadTileType(t) == ROAD_TILE_CROSSING);
|
||||
SetBit(_m[t].m4, 5);
|
||||
}
|
||||
|
||||
static inline bool IsCrossingBarred(TileIndex t)
|
||||
{
|
||||
assert(GetRoadTileType(t) == ROAD_TILE_CROSSING);
|
||||
return HasBit(_m[t].m4, 5);
|
||||
}
|
||||
|
||||
static inline void SetCrossingBarred(TileIndex t, bool barred)
|
||||
{
|
||||
assert(GetRoadTileType(t) == ROAD_TILE_CROSSING);
|
||||
SB(_m[t].m4, 5, 1, barred);
|
||||
}
|
||||
|
||||
static inline void UnbarCrossing(TileIndex t)
|
||||
{
|
||||
SetCrossingBarred(t, false);
|
||||
}
|
||||
|
||||
static inline void BarCrossing(TileIndex t)
|
||||
{
|
||||
SetCrossingBarred(t, true);
|
||||
}
|
||||
|
||||
#define IsOnDesert IsOnSnow
|
||||
static inline bool IsOnSnow(TileIndex t)
|
||||
{
|
||||
|
@ -1683,20 +1683,23 @@ static Vehicle *TrainApproachingCrossing(TileIndex tile)
|
||||
/**
|
||||
* Sets correct crossing state
|
||||
* @param tile tile to update
|
||||
* @param sound should we play sound?
|
||||
* @pre tile is a rail-road crossing
|
||||
*/
|
||||
void UpdateLevelCrossing(TileIndex tile)
|
||||
void UpdateLevelCrossing(TileIndex tile, bool sound)
|
||||
{
|
||||
assert(IsLevelCrossingTile(tile));
|
||||
|
||||
UnbarCrossing(tile);
|
||||
|
||||
/* train on crossing || train approaching crossing */
|
||||
if (VehicleFromPos(tile, NULL, &TrainOnTileEnum) || TrainApproachingCrossing(tile)) {
|
||||
BarCrossing(tile);
|
||||
}
|
||||
bool new_state = VehicleFromPos(tile, NULL, &TrainOnTileEnum) || TrainApproachingCrossing(tile);
|
||||
|
||||
MarkTileDirtyByTile(tile);
|
||||
if (new_state != IsCrossingBarred(tile)) {
|
||||
if (new_state && sound) {
|
||||
SndPlayTileFx(SND_0E_LEVEL_CROSSING, tile);
|
||||
}
|
||||
SetCrossingBarred(tile, new_state);
|
||||
MarkTileDirtyByTile(tile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -3458,7 +3461,7 @@ static bool TrainCheckIfLineEnds(Vehicle *v)
|
||||
/* approaching a rail/road crossing? then make it red */
|
||||
if (IsLevelCrossingTile(tile) && !IsCrossingBarred(tile)) {
|
||||
BarCrossing(tile);
|
||||
SndPlayVehicleFx(SND_0E_LEVEL_CROSSING, v);
|
||||
SndPlayTileFx(SND_0E_LEVEL_CROSSING, tile);
|
||||
MarkTileDirtyByTile(tile);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user