src/vehicle.cpp
branchnoai
changeset 9718 f82a4facea8b
parent 9704 197cb8c6ae17
child 9722 ebf0ece7d8f6
equal deleted inserted replaced
9717:2c27f9be3fb9 9718:f82a4facea8b
   115 		case VEH_AIRCRAFT: return STR_A015_AIRCRAFT_IN_THE_WAY;
   115 		case VEH_AIRCRAFT: return STR_A015_AIRCRAFT_IN_THE_WAY;
   116 		default:           return STR_980E_SHIP_IN_THE_WAY;
   116 		default:           return STR_980E_SHIP_IN_THE_WAY;
   117 	}
   117 	}
   118 }
   118 }
   119 
   119 
   120 static void *EnsureNoVehicleProc(Vehicle *v, void *data)
       
   121 {
       
   122 	if (v->tile != *(const TileIndex*)data || v->type == VEH_DISASTER)
       
   123 		return NULL;
       
   124 
       
   125 	_error_message = VehicleInTheWayErrMsg(v);
       
   126 	return v;
       
   127 }
       
   128 
       
   129 bool EnsureNoVehicle(TileIndex tile)
       
   130 {
       
   131 	return VehicleFromPos(tile, &tile, EnsureNoVehicleProc) == NULL;
       
   132 }
       
   133 
       
   134 static void *EnsureNoVehicleProcZ(Vehicle *v, void *data)
   120 static void *EnsureNoVehicleProcZ(Vehicle *v, void *data)
   135 {
   121 {
   136 	const TileInfo *ti = (const TileInfo*)data;
   122 	const TileInfo *ti = (const TileInfo*)data;
   137 
   123 
   138 	if (v->tile != ti->tile || v->type == VEH_DISASTER) return NULL;
   124 	if (v->tile != ti->tile || v->type == VEH_DISASTER || (v->type == VEH_AIRCRAFT && v->subtype == AIR_SHADOW)) return NULL;
   139 	if (v->z_pos > ti->z) return NULL;
   125 	if (v->z_pos > ti->z) return NULL;
   140 
   126 
   141 	_error_message = VehicleInTheWayErrMsg(v);
   127 	_error_message = VehicleInTheWayErrMsg(v);
   142 	return v;
   128 	return v;
   143 }
   129 }
   562 }
   548 }
   563 
   549 
   564 /**
   550 /**
   565  * Deletes all vehicles in a chain.
   551  * Deletes all vehicles in a chain.
   566  * @param v The first vehicle in the chain.
   552  * @param v The first vehicle in the chain.
   567  *
       
   568  * @warning This function is not valid for any vehicle containing articulated
       
   569  * parts.
       
   570  */
   553  */
   571 void DeleteVehicleChain(Vehicle *v)
   554 void DeleteVehicleChain(Vehicle *v)
   572 {
   555 {
   573 	assert(v->type != VEH_TRAIN && v->type != VEH_ROAD);
   556 	assert(v->First() == v);
   574 
   557 
   575 	do {
   558 	do {
   576 		Vehicle *u = v;
   559 		Vehicle *u = v;
   577 		v = v->Next();
   560 		v = v->Next();
   578 		delete u;
   561 		delete u;