/* $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 <http://www.gnu.org/licenses/>. *//** @file ship.h Base for ships. */#ifndef SHIP_H#define SHIP_H#include<deque>#include"vehicle_base.h"#include"water_map.h"voidGetShipSpriteSize(EngineIDengine,uint&width,uint&height,int&xoffs,int&yoffs,EngineImageTypeimage_type);WaterClassGetEffectiveWaterClass(TileIndextile);typedefstd::deque<TrackdirByte>ShipPathCache;/** * All ships have this type. */structShipFINAL:publicSpecializedVehicle<Ship,VEH_SHIP>{TrackBitsBytestate;///< The "track" the ship is following.ShipPathCachepath;///< Cached path.DirectionByterotation;///< Visible direction.int16rotation_x_pos;///< NOSAVE: X Position before rotation.int16rotation_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();voidUpdateDeltaXY();ExpensesTypeGetExpenseType(boolincome)const{returnincome?EXPENSES_SHIP_INC:EXPENSES_SHIP_RUN;}voidPlayLeaveStationSound()const;boolIsPrimaryVehicle()const{returntrue;}voidGetImage(Directiondirection,EngineImageTypeimage_type,VehicleSpriteSeq*result)const;intGetDisplaySpeed()const{returnthis->cur_speed/2;}intGetDisplayMaxSpeed()const{returnthis->vcache.cached_max_speed/2;}intGetCurrentMaxSpeed()const{returnmin(this->vcache.cached_max_speed,this->current_order.GetMaxSpeed()*2);}MoneyGetRunningCost()const;boolIsInDepot()const{returnthis->state==TRACK_BIT_DEPOT;}boolTick();voidOnNewDay();TrackdirGetVehicleTrackdir()const;TileIndexGetOrderStationLocation(StationIDstation);boolFindClosestDepot(TileIndex*location,DestinationID*destination,bool*reverse);voidUpdateCache();voidSetDestTile(TileIndextile);};staticconstuintSHIP_MAX_ORDER_DISTANCE=130;/** * Iterate over all ships. * @param var The variable used for iteration. */#define FOR_ALL_SHIPS(var) FOR_ALL_VEHICLES_OF_TYPE(Ship, var)#endif /* SHIP_H */