mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-16 00:12:51 +00:00
(svn r1936) End some void-pointer-as-int-abuse; this also fixes a latent bug where a TileIndex was only 24bit wide (on 32bit architectures)
This commit is contained in:
parent
42520c1cc3
commit
505ecdc6b4
26
train_cmd.c
26
train_cmd.c
@ -2368,16 +2368,23 @@ static void CheckTrainCollision(Vehicle *v)
|
|||||||
SndPlayVehicleFx(SND_13_BIG_CRASH, v);
|
SndPlayVehicleFx(SND_13_BIG_CRASH, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct VehicleAtSignalData {
|
||||||
|
TileIndex tile;
|
||||||
|
byte direction;
|
||||||
|
} VehicleAtSignalData;
|
||||||
|
|
||||||
static void *CheckVehicleAtSignal(Vehicle *v, void *data)
|
static void *CheckVehicleAtSignal(Vehicle *v, void *data)
|
||||||
{
|
{
|
||||||
uint32 d = (uint32)data;
|
const VehicleAtSignalData* vasd = data;
|
||||||
|
|
||||||
|
if (v->type == VEH_Train && v->subtype == TS_Front_Engine &&
|
||||||
|
v->tile == vasd->tile) {
|
||||||
|
byte diff = (v->direction - vasd->direction + 2) & 7;
|
||||||
|
|
||||||
if (v->type == VEH_Train && v->subtype == TS_Front_Engine && v->tile == (TileIndex)(d >> 8)) {
|
|
||||||
byte diff = (v->direction - (byte)d + 2) & 7;
|
|
||||||
if (diff == 2 || (v->cur_speed <= 5 && diff <= 4))
|
if (diff == 2 || (v->cur_speed <= 5 && diff <= 4))
|
||||||
return (void*)1;
|
return v;
|
||||||
}
|
}
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TrainController(Vehicle *v)
|
static void TrainController(Vehicle *v)
|
||||||
@ -2581,9 +2588,14 @@ red_light: {
|
|||||||
v->subspeed = 0;
|
v->subspeed = 0;
|
||||||
v->progress = 255-10;
|
v->progress = 255-10;
|
||||||
if (++v->load_unload_time_rem < _patches.wait_twoway_signal * 73) {
|
if (++v->load_unload_time_rem < _patches.wait_twoway_signal * 73) {
|
||||||
uint o_tile = gp.new_tile + TileOffsByDir(enterdir);
|
TileIndex o_tile = gp.new_tile + TileOffsByDir(enterdir);
|
||||||
|
VehicleAtSignalData vasd = {
|
||||||
|
o_tile,
|
||||||
|
dir ^ 4
|
||||||
|
};
|
||||||
|
|
||||||
/* check if a train is waiting on the other side */
|
/* check if a train is waiting on the other side */
|
||||||
if (VehicleFromPos(o_tile, (void*)( (o_tile<<8) | (dir^4)), (VehicleFromPosProc*)CheckVehicleAtSignal) == NULL)
|
if (VehicleFromPos(o_tile, &vasd, CheckVehicleAtSignal) == NULL)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user