Changeset - r9723:ed84b192ea1c
[Not reviewed]
master
0 1 0
frosch - 16 years ago 2008-07-27 12:35:14
frosch@openttd.org
(svn r13847) -Codechange: Add MAX_ARTICULATED_PARTS and set it to 100.
1 file changed with 5 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/articulated_vehicles.cpp
Show inline comments
 
@@ -8,24 +8,26 @@
 
#include "train.h"
 
#include "roadveh.h"
 
#include "newgrf_callbacks.h"
 
#include "newgrf_engine.h"
 
#include "vehicle_func.h"
 

	
 
static const uint MAX_ARTICULATED_PARTS = 100; ///< Maximum of articulated parts per vehicle, i.e. when to abort calling the articulated vehicle callback.
 

	
 
uint CountArticulatedParts(EngineID engine_type, bool purchase_window)
 
{
 
	if (!HasBit(EngInfo(engine_type)->callbackmask, CBM_VEHICLE_ARTIC_ENGINE)) return 0;
 

	
 
	Vehicle *v = NULL;;
 
	if (!purchase_window) {
 
		v = new InvalidVehicle();
 
		v->engine_type = engine_type;
 
	}
 

	
 
	uint i;
 
	for (i = 1; i < MAX_UVALUE(EngineID); i++) {
 
	for (i = 1; i < MAX_ARTICULATED_PARTS; i++) {
 
		uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, engine_type, v);
 
		if (callback == CALLBACK_FAILED || GB(callback, 0, 8) == 0xFF) break;
 
	}
 

	
 
	delete v;
 

	
 
@@ -46,13 +48,13 @@ uint16 *GetCapacityOfArticulatedParts(En
 
		const RoadVehicleInfo *rvi = RoadVehInfo(engine);
 
		capacity[rvi->cargo_type] = GetEngineProperty(engine, 0x0F, rvi->capacity);
 
	}
 

	
 
	if (!HasBit(EngInfo(engine)->callbackmask, CBM_VEHICLE_ARTIC_ENGINE)) return capacity;
 

	
 
	for (uint i = 1; i < MAX_UVALUE(EngineID); i++) {
 
	for (uint i = 1; i < MAX_ARTICULATED_PARTS; i++) {
 
		uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, engine, NULL);
 
		if (callback == CALLBACK_FAILED || GB(callback, 0, 8) == 0xFF) break;
 

	
 
		EngineID artic_engine = GetNewEngineID(GetEngineGRF(engine), type, GB(callback, 0, 7));
 

	
 
		if (type == VEH_TRAIN) {
 
@@ -72,13 +74,13 @@ void AddArticulatedParts(Vehicle **vl, V
 
{
 
	const Vehicle *v = vl[0];
 
	Vehicle *u = vl[0];
 

	
 
	if (!HasBit(EngInfo(v->engine_type)->callbackmask, CBM_VEHICLE_ARTIC_ENGINE)) return;
 

	
 
	for (uint i = 1; i < MAX_UVALUE(EngineID); i++) {
 
	for (uint i = 1; i < MAX_ARTICULATED_PARTS; i++) {
 
		uint16 callback = GetVehicleCallback(CBID_VEHICLE_ARTIC_ENGINE, i, 0, v->engine_type, v);
 
		if (callback == CALLBACK_FAILED || GB(callback, 0, 8) == 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->SetNext(vl[i]);
0 comments (0 inline, 0 general)