vehicle.c
changeset 3794 f72053a38797
parent 3679 252b4ab2aad4
child 3815 b91a1d73a857
equal deleted inserted replaced
3793:7fe24e10ea63 3794:f72053a38797
   129 static void *EnsureNoVehicleProcZ(Vehicle *v, void *data)
   129 static void *EnsureNoVehicleProcZ(Vehicle *v, void *data)
   130 {
   130 {
   131 	const TileInfo *ti = data;
   131 	const TileInfo *ti = data;
   132 
   132 
   133 	if (v->tile != ti->tile || v->type == VEH_Disaster) return NULL;
   133 	if (v->tile != ti->tile || v->type == VEH_Disaster) return NULL;
   134 	if (!IS_INT_INSIDE(ti->z - v->z_pos, 0, TILE_HEIGHT + 1)) return NULL;
   134 	if (v->z_pos > ti->z) return NULL;
   135 
   135 
   136 	VehicleInTheWayErrMsg(v);
   136 	VehicleInTheWayErrMsg(v);
   137 	return v;
   137 	return v;
   138 }
   138 }
   139 
   139 
   140 static inline uint Correct_Z(Slope tileh)
   140 
   141 {
   141 bool EnsureNoVehicleOnGround(TileIndex tile)
   142 	// needs z correction for slope-type graphics that have the NORTHERN tile lowered
       
   143 	return CorrectZ(tileh) ? TILE_HEIGHT : 0;
       
   144 }
       
   145 
       
   146 uint GetCorrectTileHeight(TileIndex tile)
       
   147 {
       
   148 	return Correct_Z(GetTileSlope(tile, NULL));
       
   149 }
       
   150 
       
   151 bool EnsureNoVehicleZ(TileIndex tile, byte z)
       
   152 {
   142 {
   153 	TileInfo ti;
   143 	TileInfo ti;
   154 
   144 
   155 	ti.tile = tile;
   145 	ti.tile = tile;
   156 	ti.z = z + GetCorrectTileHeight(tile);
   146 	ti.z = GetTileMaxZ(tile);
   157 
       
   158 	return VehicleFromPos(tile, &ti, EnsureNoVehicleProcZ) == NULL;
   147 	return VehicleFromPos(tile, &ti, EnsureNoVehicleProcZ) == NULL;
   159 }
   148 }
   160 
   149 
   161 Vehicle *FindVehicleOnTileZ(TileIndex tile, byte z)
   150 Vehicle *FindVehicleOnTileZ(TileIndex tile, byte z)
   162 {
   151 {