00001 /* $Id$ */ 00002 00003 /* 00004 * This file is part of OpenTTD. 00005 * 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. 00006 * 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. 00007 * 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/>. 00008 */ 00009 00012 #ifndef SHIP_H 00013 #define SHIP_H 00014 00015 #include "vehicle_base.h" 00016 00017 void GetShipSpriteSize(EngineID engine, uint &width, uint &height); 00018 00022 struct Ship: public SpecializedVehicle<Ship, VEH_SHIP> { 00023 TrackBitsByte state; 00024 00026 Ship() : SpecializedVehicleBase() {} 00028 virtual ~Ship() { this->PreDestructor(); } 00029 00030 void MarkDirty(); 00031 void UpdateDeltaXY(Direction direction); 00032 ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_SHIP_INC : EXPENSES_SHIP_RUN; } 00033 void PlayLeaveStationSound() const; 00034 bool IsPrimaryVehicle() const { return true; } 00035 SpriteID GetImage(Direction direction) const; 00036 int GetDisplaySpeed() const { return this->cur_speed / 2; } 00037 int GetDisplayMaxSpeed() const { return this->vcache.cached_max_speed / 2; } 00038 Money GetRunningCost() const; 00039 bool IsInDepot() const { return this->state == TRACK_BIT_DEPOT; } 00040 bool Tick(); 00041 void OnNewDay(); 00042 Trackdir GetVehicleTrackdir() const; 00043 TileIndex GetOrderStationLocation(StationID station); 00044 bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse); 00045 void UpdateCache(); 00046 }; 00047 00052 #define FOR_ALL_SHIPS(var) FOR_ALL_VEHICLES_OF_TYPE(Ship, var) 00053 00054 #endif /* SHIP_H */