/* * 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 <http://www.gnu.org/licenses/>. *//** @file ship.h Base for ships. */#ifndef SHIP_H#define SHIP_H#include"vehicle_base.h"#include"water_map.h"voidGetShipSpriteSize(EngineIDengine,uint&width,uint&height,int&xoffs,int&yoffs,EngineImageTypeimage_type);WaterClassGetEffectiveWaterClass(TileIndextile);typedefstd::deque<Trackdir>ShipPathCache;/** * All ships have this type. */structShipFINAL:publicSpecializedVehicle<Ship,VEH_SHIP>{TrackBitsstate;///< The "track" the ship is following.ShipPathCachepath;///< Cached path.Directionrotation;///< Visible direction.int16_trotation_x_pos;///< NOSAVE: X Position before rotation.int16_trotation_y_pos;///< NOSAVE: Y Position before rotation./** We don't want GCC to zero our struct! It already is zeroed and has an index! */Ship():SpecializedVehicleBase(){}/** We want to 'destruct' the right class. */virtual~Ship(){this->PreDestructor();}voidMarkDirty()override;voidUpdateDeltaXY()override;ExpensesTypeGetExpenseType(boolincome)constoverride{returnincome?EXPENSES_SHIP_REVENUE:EXPENSES_SHIP_RUN;}voidPlayLeaveStationSound(boolforce=false)constoverride;boolIsPrimaryVehicle()constoverride{returntrue;}voidGetImage(Directiondirection,EngineImageTypeimage_type,VehicleSpriteSeq*result)constoverride;intGetDisplaySpeed()constoverride{returnthis->cur_speed/2;}intGetDisplayMaxSpeed()constoverride{returnthis->vcache.cached_max_speed/2;}intGetCurrentMaxSpeed()constoverride{returnstd::min<int>(this->vcache.cached_max_speed,this->current_order.GetMaxSpeed()*2);}MoneyGetRunningCost()constoverride;boolIsInDepot()constoverride{returnthis->state==TRACK_BIT_DEPOT;}boolTick()override;voidOnNewDay()override;TrackdirGetVehicleTrackdir()constoverride;TileIndexGetOrderStationLocation(StationIDstation)override;ClosestDepotFindClosestDepot()override;voidUpdateCache();voidSetDestTile(TileIndextile)override;};boolIsShipDestinationTile(TileIndextile,StationIDstation);#endif /* SHIP_H */