Changeset - r3007:480ed0629d74
[Not reviewed]
master
0 2 0
peter1138 - 19 years ago 2006-02-11 09:17:16
peter1138@openttd.org
(svn r3587) - NewGRF: Rename Callback IDs to include their "class"
2 files changed with 31 insertions and 20 deletions:
0 comments (0 inline, 0 general)
newgrf_callbacks.h
Show inline comments
 
@@ -3,38 +3,49 @@
 
#ifndef NEWGRF_CALLBACKS_H
 
#define NEWGRF_CALLBACKS_H
 

	
 
/** @file newgrf_callbacks.h
 
 */
 

	
 
// This enum lists the implemented callbacks
 
// Use as argument for the GetCallBackResult function (see comments there)
 
/**
 
 * List of implemented NewGRF callbacks.
 
 * Names are formatted as CBID_<CLASS>_<CALLBACK>
 
 */
 
enum CallbackID {
 
	// Powered wagons, if the result is lower as 0x40 then the wagon is powered
 
	// TODO: interpret the rest of the result, aka "visual effects"
 
	CBID_WAGON_POWER = 0x10,
 
	CBID_TRAIN_WAGON_POWER          = 0x10,
 

	
 
	// Vehicle length, returns the amount of 1/8's the vehicle is shorter
 
	// only for train vehicles
 
	CBID_VEH_LENGTH = 0x11,
 
	CBID_TRAIN_VEHICLE_LENGTH       = 0x11,
 

	
 
	// Refit capacity, the passed vehicle needs to have its ->cargo_type set to
 
	// the cargo we are refitting to, returns the new cargo capacity
 
	CBID_REFIT_CAP = 0x15,
 
	CBID_VEHICLE_REFIT_CAPACITY     = 0x15,
 

	
 
	CBID_ARTIC_ENGINE = 0x16,
 
	CBID_TRAIN_ARTIC_ENGINE         = 0x16,
 
};
 

	
 
// bit positions for rvi->callbackmask, indicates which callbacks are used by an engine
 
// (some callbacks are always used, and dont appear here)
 
enum CallbackMask {
 
	CBM_WAGON_POWER = 0,
 
	CBM_VEH_LENGTH = 1,
 
	CBM_REFIT_CAP = 3,
 
	CBM_ARTIC_ENGINE = 4,
 
/**
 
 * Callback masks for vehicles, indicates which callbacks are used by a vehicle.
 
 * Some callbacks are always used and don't have a mask.
 
 */
 
enum VehicleCallbackMask {
 
	CBM_WAGON_POWER    = 0, ///< Powered wagons (trains only)
 
	CBM_VEHICLE_LENGTH = 1, ///< Vehicle length (trains only)
 
	CBM_LOAD_AMOUNT    = 2, ///< Load amount
 
	CBM_REFIT_CAPACITY = 3, ///< Cargo capacity after refit
 
	CBM_ARTIC_ENGINE   = 4, ///< Add articulated engines (trains only)
 
	CBM_CARGO_SUFFIX   = 5, ///< Show suffix after cargo name
 
	CBM_COLOUR_REMAP   = 6, ///< Change colour mapping of vehicle
 
	CBM_SOUND_EFFECT   = 7, ///< Vehicle uses custom sound effects
 
};
 

	
 
/**
 
 * Result of a failed callback.
 
 */
 
enum {
 
	CALLBACK_FAILED = 0xFFFF
 
};
 

	
 
#endif /* NEWGRF_CALLBACKS_H */
train_cmd.c
Show inline comments
 
@@ -119,13 +119,13 @@ void TrainConsistChanged(Vehicle* v)
 
			power += rvi_u->power;
 

	
 
			// check if its a powered wagon
 
			CLRBIT(u->u.rail.flags, VRF_POWEREDWAGON);
 
			if ((rvi_v->pow_wag_power != 0) && (rvi_u->flags & RVI_WAGON) && UsesWagonOverride(u)) {
 
				if (HASBIT(rvi_u->callbackmask, CBM_WAGON_POWER)) {
 
					uint16 callback = GetCallBackResult(CBID_WAGON_POWER,  u->engine_type, u);
 
					uint16 callback = GetCallBackResult(CBID_TRAIN_WAGON_POWER,  u->engine_type, u);
 

	
 
					if (callback != CALLBACK_FAILED)
 
						u->u.rail.cached_vis_effect = callback;
 
				}
 

	
 
				if (u->u.rail.cached_vis_effect < 0x40) {
 
@@ -140,14 +140,14 @@ void TrainConsistChanged(Vehicle* v)
 
				if (rvi_u->max_speed != 0 && !UsesWagonOverride(u))
 
					max_speed = min(rvi_u->max_speed, max_speed);
 
		}
 

	
 
		// check the vehicle length (callback)
 
		veh_len = CALLBACK_FAILED;
 
		if (HASBIT(rvi_u->callbackmask, CBM_VEH_LENGTH))
 
			veh_len = GetCallBackResult(CBID_VEH_LENGTH,  u->engine_type, u);
 
		if (HASBIT(rvi_u->callbackmask, CBM_VEHICLE_LENGTH))
 
			veh_len = GetCallBackResult(CBID_TRAIN_VEHICLE_LENGTH,  u->engine_type, u);
 
		if (veh_len == CALLBACK_FAILED)
 
			veh_len = rvi_u->shorten_factor;
 
		veh_len = clamp(veh_len, 0, u->next == NULL ? 7 : 5); // the clamp on vehicles not the last in chain is stricter, as too short wagons can break the 'follow next vehicle' code
 
		u->u.rail.cached_veh_length = 8 - veh_len;
 
		v->u.rail.cached_total_length += u->u.rail.cached_veh_length;
 

	
 
@@ -432,13 +432,13 @@ static uint CountArticulatedParts(const 
 
	uint16 callback;
 
	uint i;
 

	
 
	if (!HASBIT(rvi->callbackmask, CBM_ARTIC_ENGINE)) return 0;
 

	
 
	for (i = 1; i < 10; i++) {
 
		callback = GetCallBackResult(CBID_ARTIC_ENGINE + (i << 8), engine_type, NULL);
 
		callback = GetCallBackResult(CBID_TRAIN_ARTIC_ENGINE + (i << 8), engine_type, NULL);
 
		if (callback == CALLBACK_FAILED || callback == 0xFF) break;
 
	}
 

	
 
	return i - 1;
 
}
 

	
 
@@ -453,13 +453,13 @@ static void AddArticulatedParts(const Ra
 
	uint i;
 

	
 
	if (!HASBIT(rvi->callbackmask, CBM_ARTIC_ENGINE))
 
		return;
 

	
 
	for (i = 1; i < 10; i++) {
 
		callback = GetCallBackResult(CBID_ARTIC_ENGINE + (i << 8), v->engine_type, NULL);
 
		callback = GetCallBackResult(CBID_TRAIN_ARTIC_ENGINE + (i << 8), v->engine_type, NULL);
 
		if (callback == CALLBACK_FAILED || callback == 0xFF)
 
			return;
 

	
 
		u->next = vl[i];
 
		u = u->next;
 

	
 
@@ -1689,17 +1689,17 @@ int32 CmdRefitRailVehicle(int x, int y, 
 
		if (!CanRefitTo(v->engine_type, new_cid)) continue;
 

	
 
		if (v->cargo_cap != 0) {
 
			const RailVehicleInfo *rvi = RailVehInfo(v->engine_type);
 
			uint16 amount = CALLBACK_FAILED;
 

	
 
			if (HASBIT(rvi->callbackmask, CBM_REFIT_CAP)) {
 
			if (HASBIT(rvi->callbackmask, CBM_REFIT_CAPACITY)) {
 
				/* Check the 'refit capacity' callback */
 
				CargoID temp_cid = v->cargo_type;
 
				v->cargo_type = new_cid;
 
				amount = GetCallBackResult(CBID_REFIT_CAP, v->engine_type, v);
 
				amount = GetCallBackResult(CBID_VEHICLE_REFIT_CAPACITY, v->engine_type, v);
 
				v->cargo_type = temp_cid;
 
			}
 

	
 
			if (amount == CALLBACK_FAILED) { // callback failed or not used, use default
 
				CargoID old_cid = rvi->cargo_type;
 
				/* normally, the capacity depends on the cargo type, a rail vehicle
0 comments (0 inline, 0 general)