diff --git a/src/disaster_vehicle.h b/src/disaster_vehicle.h new file mode 100644 --- /dev/null +++ b/src/disaster_vehicle.h @@ -0,0 +1,61 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file disaster_vehicle.h All disaster vehicles. */ + +#ifndef DISASTER_VEHICLE_H +#define DISASTER_VEHICLE_H + +#include "vehicle_base.h" + +/** Different sub types of disaster vehicles. */ +enum DisasterSubType { + ST_ZEPPELINER, ///< Zeppelin, crashes at airports. + ST_ZEPPELINER_SHADOW, ///< Shadow of the zeppelin. + ST_SMALL_UFO, ///< Small UFO, tries to find a road vehicle to destroy. + ST_SMALL_UFO_SHADOW, ///< Shadow of small UFO + ST_AIRPLANE, ///< Airplane destroying an oil refinery + ST_AIRPLANE_SHADOW, ///< Shadow of airplane + ST_HELICOPTER, ///< Helicopter destroying a factory. + ST_HELICOPTER_SHADOW, ///< Shadow of helicopter. + ST_HELICOPTER_ROTORS, ///< Rotors of helicopter. + ST_BIG_UFO, ///< Big UFO, finds a piece of railroad to "park" on + ST_BIG_UFO_SHADOW, ///< Shadow of the big UFO + ST_BIG_UFO_DESTROYER, ///< Aircraft the will bomb the big UFO + ST_BIG_UFO_DESTROYER_SHADOW, ///< Shadow of the aircraft. + ST_SMALL_SUBMARINE, ///< Small submarine, pops up in the oceans but doesn't do anything + ST_BIG_SUBMARINE, ///< Big submarine, pops up in the oceans but doesn't do anything +}; + +/** + * Disasters, like submarines, skyrangers and their shadows, belong to this class. + */ +struct DisasterVehicle FINAL : public SpecializedVehicle { + SpriteID image_override; ///< Override for the default disaster vehicle sprite. + VehicleID big_ufo_destroyer_target; ///< The big UFO that this destroyer is supposed to bomb. + + /** For use by saveload. */ + DisasterVehicle() : SpecializedVehicleBase() {} + DisasterVehicle(int x, int y, Direction direction, DisasterSubType subtype, VehicleID big_ufo_destroyer_target = VEH_INVALID); + /** We want to 'destruct' the right class. */ + virtual ~DisasterVehicle() {} + + void UpdatePosition(int x, int y, int z); + void UpdateDeltaXY(Direction direction); + void UpdateImage(); + bool Tick(); +}; + +/** + * Iterate over disaster vehicles. + * @param var The variable used to iterate over. + */ +#define FOR_ALL_DISASTERVEHICLES(var) FOR_ALL_VEHICLES_OF_TYPE(DisasterVehicle, var) + +#endif /* DISASTER_VEHICLE_H */