Changeset - r6772:59235ded8522
[Not reviewed]
master
0 5 2
maedhros - 17 years ago 2007-06-01 11:41:02
maedhros@openttd.org
(svn r10008) -Codechange: Move a couple of functions related to articulated vehicles to a file of their own.
7 files changed with 113 insertions and 69 deletions:
0 comments (0 inline, 0 general)
projects/openttd.vcproj
Show inline comments
 
@@ -164,6 +164,9 @@
 
				RelativePath=".\..\src\airport.cpp">
 
			</File>
 
			<File
 
				RelativePath=".\..\src\articulated_vehicles.cpp">
 
			</File>
 
			<File
 
				RelativePath=".\..\src\autoreplace_cmd.cpp">
 
			</File>
 
			<File
 
@@ -387,6 +390,9 @@
 
				RelativePath=".\..\src\airport_movement.h">
 
			</File>
 
			<File
 
				RelativePath=".\..\src\autoreplace_cmd.h">
 
			</File>
 
			<File
 
				RelativePath=".\..\src\aystar.h">
 
			</File>
 
			<File
projects/openttd_vs80.vcproj
Show inline comments
 
@@ -448,6 +448,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\articulated_vehicles.cpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\autoreplace_cmd.cpp"
 
				>
 
			</File>
 
@@ -744,6 +748,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\autoreplace_cmd.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\aystar.h"
 
				>
 
			</File>
source.list
Show inline comments
 
# Source Files
 
airport.cpp
 
articulated_vehicles.cpp
 
autoreplace_cmd.cpp
 
aystar.cpp
 
bmp.cpp
 
@@ -96,6 +97,7 @@ window.cpp
 
aircraft.h
 
airport.h
 
airport_movement.h
 
autoreplace_cmd.h
 
aystar.h
 
bmp.h
 
cargotype.h
src/articulated_vehicles.cpp
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/** @file train_cmd.cpp */
 

	
 
#include "stdafx.h"
 
#include "openttd.h"
 
#include "debug.h"
 
#include "functions.h"
 
#include "command.h"
 
#include "vehicle.h"
 
#include "articulated_vehicles.h"
 
#include "engine.h"
 
#include "train.h"
 
#include "newgrf_callbacks.h"
 
#include "newgrf_engine.h"
 

	
 
uint CountArticulatedParts(EngineID engine_type)
 
{
 
	if (!HASBIT(EngInfo(engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return 0;
 

	
 
	uint i;
 
	for (i = 1; i < 10; i++) {
 
		uint16 callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, engine_type, NULL);
 
		if (callback == CALLBACK_FAILED || callback == 0xFF) break;
 
	}
 

	
 
	return i - 1;
 
}
 

	
 
void AddArticulatedParts(Vehicle **vl)
 
{
 
	const Vehicle *v = vl[0];
 
	Vehicle *u = vl[0];
 

	
 
	if (!HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return;
 

	
 
	for (uint i = 1; i < 10; i++) {
 
		uint16 callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, v->engine_type, v);
 
		if (callback == CALLBACK_FAILED || callback == 0xFF) return;
 

	
 
		/* Attempt to use pre-allocated vehicles until they run out. This can happen
 
		 * if the callback returns different values depending on the cargo type. */
 
		u->next = vl[i];
 
		if (u->next == NULL) u->next = AllocateVehicle();
 
		if (u->next == NULL) return;
 

	
 
		u = u->next;
 

	
 
		EngineID engine_type = GB(callback, 0, 7);
 
		bool flip_image = HASBIT(callback, 7);
 
		const RailVehicleInfo *rvi_artic = RailVehInfo(engine_type);
 

	
 
		/* get common values from first engine */
 
		u->direction = v->direction;
 
		u->owner = v->owner;
 
		u->tile = v->tile;
 
		u->x_pos = v->x_pos;
 
		u->y_pos = v->y_pos;
 
		u->z_pos = v->z_pos;
 
		u->u.rail.track = v->u.rail.track;
 
		u->u.rail.railtype = v->u.rail.railtype;
 
		u->build_year = v->build_year;
 
		u->vehstatus = v->vehstatus & ~VS_STOPPED;
 
		u->u.rail.first_engine = v->engine_type;
 

	
 
		/* get more settings from rail vehicle info */
 
		u->spritenum = rvi_artic->image_index;
 
		if (flip_image) u->spritenum++;
 
		u->cargo_type = rvi_artic->cargo_type;
 
		u->cargo_subtype = 0;
 
		u->cargo_cap = rvi_artic->capacity;
 
		u->max_speed = 0;
 
		u->max_age = 0;
 
		u->engine_type = engine_type;
 
		u->value = 0;
 
		u = new (u) Train();
 
		u->subtype = 0;
 
		SetArticulatedPart(u);
 
		u->cur_image = 0xAC2;
 
		u->random_bits = VehicleRandomBits();
 

	
 
		VehiclePositionChanged(u);
 
	}
 
}
src/articulated_vehicles.h
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/** @file articulated_vehicles.h */
 

	
 
#ifndef ARTICULATED_VEHICLES_H
 
#define ARTICULATED_VEHICLES_H
 

	
 
uint CountArticulatedParts(EngineID engine_type);
 
void AddArticulatedParts(Vehicle **vl);
 

	
 
#endif /* ARTICULATED_VEHICLES_H */
src/build_vehicle_gui.cpp
Show inline comments
 
@@ -15,6 +15,7 @@
 
#include "window.h"
 
#include "gui.h"
 
#include "vehicle.h"
 
#include "articulated_vehicles.h"
 
#include "gfx.h"
 
#include "station.h"
 
#include "command.h"
src/train_cmd.cpp
Show inline comments
 
@@ -15,6 +15,7 @@
 
#include "tile.h"
 
#include "tunnel_map.h"
 
#include "vehicle.h"
 
#include "articulated_vehicles.h"
 
#include "command.h"
 
#include "pathfind.h"
 
#include "npf.h"
 
@@ -501,75 +502,6 @@ void DrawTrainEngine(int x, int y, Engin
 
	DrawSprite(image, pal, x, y);
 
}
 

	
 
uint CountArticulatedParts(EngineID engine_type)
 
{
 
	if (!HASBIT(EngInfo(engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return 0;
 

	
 
	uint i;
 
	for (i = 1; i < 10; i++) {
 
		uint16 callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, engine_type, NULL);
 
		if (callback == CALLBACK_FAILED || callback == 0xFF) break;
 
	}
 

	
 
	return i - 1;
 
}
 

	
 
static void AddArticulatedParts(Vehicle **vl)
 
{
 
	const Vehicle *v = vl[0];
 
	Vehicle *u = vl[0];
 

	
 
	if (!HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_ARTIC_ENGINE)) return;
 

	
 
	for (uint i = 1; i < 10; i++) {
 
		uint16 callback = GetVehicleCallback(CBID_TRAIN_ARTIC_ENGINE, i, 0, v->engine_type, v);
 
		if (callback == CALLBACK_FAILED || callback == 0xFF) return;
 

	
 
		/* Attempt to use pre-allocated vehicles until they run out. This can happen
 
		 * if the callback returns different values depending on the cargo type. */
 
		u->next = vl[i];
 
		if (u->next == NULL) u->next = AllocateVehicle();
 
		if (u->next == NULL) return;
 

	
 
		u = u->next;
 

	
 
		EngineID engine_type = GB(callback, 0, 7);
 
		bool flip_image = HASBIT(callback, 7);
 
		const RailVehicleInfo *rvi_artic = RailVehInfo(engine_type);
 

	
 
		/* get common values from first engine */
 
		u->direction = v->direction;
 
		u->owner = v->owner;
 
		u->tile = v->tile;
 
		u->x_pos = v->x_pos;
 
		u->y_pos = v->y_pos;
 
		u->z_pos = v->z_pos;
 
		u->u.rail.track = v->u.rail.track;
 
		u->u.rail.railtype = v->u.rail.railtype;
 
		u->build_year = v->build_year;
 
		u->vehstatus = v->vehstatus & ~VS_STOPPED;
 
		u->u.rail.first_engine = v->engine_type;
 

	
 
		/* get more settings from rail vehicle info */
 
		u->spritenum = rvi_artic->image_index;
 
		if (flip_image) u->spritenum++;
 
		u->cargo_type = rvi_artic->cargo_type;
 
		u->cargo_subtype = 0;
 
		u->cargo_cap = rvi_artic->capacity;
 
		u->max_speed = 0;
 
		u->max_age = 0;
 
		u->engine_type = engine_type;
 
		u->value = 0;
 
		u = new (u) Train();
 
		u->subtype = 0;
 
		SetArticulatedPart(u);
 
		u->cur_image = 0xAC2;
 
		u->random_bits = VehicleRandomBits();
 

	
 
		VehiclePositionChanged(u);
 
	}
 
}
 

	
 
static int32 CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags)
 
{
 
	SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
0 comments (0 inline, 0 general)