Files @ r9583:b6e25a00b908
Branch filter:

Location: cpp/openttd-patchpack/source/src/roadveh.h - annotation

rubidium
(svn r13621) -Fix: building roadbits in the wrong direction on bridges or building roadbits from underneath the bridge to the bridgehead is impossible, so don't silently ignore that error when building over houses and industries is not ignored.
r5475:3f5cd13d1b63
r5475:3f5cd13d1b63
r6417:89329fa8ac80
r6393:f9322fdf4c2c
r5475:3f5cd13d1b63
r5475:3f5cd13d1b63
r5475:3f5cd13d1b63
r8144:1432edd15267
r8786:f24a6d1fba34
r9070:e059c65164f3
r8116:df67d3c5e4fd
r5475:3f5cd13d1b63
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r7492:75510449064b
r6857:1e07df806ef1
r6857:1e07df806ef1
r6857:1e07df806ef1
r5786:21dd6ba13f91
r5475:3f5cd13d1b63
r8890:02179c54681e
r8890:02179c54681e
r8890:02179c54681e
r8890:02179c54681e
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r6552:7cade7798fcb
r7412:e5f07529a093
r6552:7cade7798fcb
r6563:67c636a8e3d4
r6553:04028e73a0f7
r6558:469828caa298
r6563:67c636a8e3d4
r6857:1e07df806ef1
r9022:5be8b7703ae9
r7477:f74673aa99bf
r7484:76081b2ff48c
r8626:f6fe0bba0fc2
r7490:4e86e893fa7f
r7135:3964060426dc
r8467:0ea88f22d4aa
r8827:6ee5217ef94b
r8890:02179c54681e
r6552:7cade7798fcb
r6552:7cade7798fcb
r5475:3f5cd13d1b63
/* $Id$ */

/** @file src/roadveh.h Road vehicle states */

#ifndef ROADVEH_H
#define ROADVEH_H

#include "vehicle_base.h"
#include "engine_func.h"
#include "engine_base.h"
#include "economy_func.h"

enum RoadVehicleSubType {
	RVST_FRONT,
	RVST_ARTIC_PART,
};

static inline bool IsRoadVehFront(const Vehicle *v)
{
	assert(v->type == VEH_ROAD);
	return v->subtype == RVST_FRONT;
}

static inline void SetRoadVehFront(Vehicle *v)
{
	assert(v->type == VEH_ROAD);
	v->subtype = RVST_FRONT;
}

static inline bool IsRoadVehArticPart(const Vehicle *v)
{
	assert(v->type == VEH_ROAD);
	return v->subtype == RVST_ARTIC_PART;
}

static inline void SetRoadVehArticPart(Vehicle *v)
{
	assert(v->type == VEH_ROAD);
	v->subtype = RVST_ARTIC_PART;
}

static inline bool RoadVehHasArticPart(const Vehicle *v)
{
	assert(v->type == VEH_ROAD);
	return v->Next() != NULL && IsRoadVehArticPart(v->Next());
}


void CcBuildRoadVeh(bool success, TileIndex tile, uint32 p1, uint32 p2);

byte GetRoadVehLength(const Vehicle *v);

void RoadVehUpdateCache(Vehicle *v);


/**
 * 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) RoadVehicle();
 *
 * As side-effect the vehicle type is set correctly.
 */
struct RoadVehicle : public Vehicle {
	/** Initializes the Vehicle to a road vehicle */
	RoadVehicle() { this->type = VEH_ROAD; }

	/** We want to 'destruct' the right class. */
	virtual ~RoadVehicle() { this->PreDestructor(); }

	const char *GetTypeString() const { return "road vehicle"; }
	void MarkDirty();
	void UpdateDeltaXY(Direction direction);
	ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_ROADVEH_INC : EXPENSES_ROADVEH_RUN; }
	bool IsPrimaryVehicle() const { return IsRoadVehFront(this); }
	SpriteID GetImage(Direction direction) const;
	int GetDisplaySpeed() const { return this->cur_speed * 10 / 32; }
	int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 32; }
	Money GetRunningCost() const { return RoadVehInfo(this->engine_type)->running_cost * GetPriceByIndex(RoadVehInfo(this->engine_type)->running_cost_class); }
	bool IsInDepot() const { return this->u.road.state == RVSB_IN_DEPOT; }
	void Tick();
	void OnNewDay();
	TileIndex GetOrderStationLocation(StationID station);
	bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
};

#endif /* ROADVEH_H */