Files @ r7377:722cd70012ed
Branch filter:

Location: cpp/openttd-patchpack/source/src/ship.h

rubidium
(svn r10746) -Codechange: add a generic superclass for almost all pool items so we do not have to duplicate code for each of the pool item classes and use it for the station and roadstop classes.
/* $Id$ */

/** @file ship.h */

#ifndef SHIP_H
#define SHIP_H

#include "vehicle.h"

void CcBuildShip(bool success, TileIndex tile, uint32 p1, uint32 p2);
void CcCloneShip(bool success, TileIndex tile, uint32 p1, uint32 p2);
void RecalcShipStuff(Vehicle *v);
void GetShipSpriteSize(EngineID engine, uint &width, uint &height);

static inline bool IsShipInDepot(const Vehicle *v)
{
	assert(v->type == VEH_SHIP);
	return v->u.ship.state == 0x80;
}

static inline bool IsShipInDepotStopped(const Vehicle *v)
{
	return IsShipInDepot(v) && v->vehstatus & VS_STOPPED;
}


/**
 * This class 'wraps' Vehicle; you do not actually instantiate this class.
 * You create a Vehicle using AllocateVehicle, so it is added to the pool
 * and you reinitialize that to a Train using:
 *   v = new (v) Ship();
 *
 * As side-effect the vehicle type is set correctly.
 */
struct Ship: public Vehicle {
	/** Initializes the Vehicle to a ship */
	Ship() { this->type = VEH_SHIP; }

	/** We want to 'destruct' the right class. */
	virtual ~Ship() {}

	const char *GetTypeString() const { return "ship"; }
	void MarkDirty();
	void UpdateDeltaXY(Direction direction);
	ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_SHIP_INC : EXPENSES_SHIP_RUN; }
	WindowClass GetVehicleListWindowClass() const { return WC_SHIPS_LIST; }
	void PlayLeaveStationSound() const;
	bool IsPrimaryVehicle() const { return true; }
	int GetImage(Direction direction) const;
	void Tick();
};

#endif /* SHIP_H */