Changeset - r6594:cd6701cee0ee
[Not reviewed]
master
0 6 0
rubidium - 17 years ago 2007-05-07 16:21:34
rubidium@openttd.org
(svn r9808) -Codechange: unify the Handle<VehicleType>Loading functions.
6 files changed with 45 insertions and 109 deletions:
0 comments (0 inline, 0 general)
src/aircraft_cmd.cpp
Show inline comments
 
@@ -1413,38 +1413,12 @@ void Aircraft::MarkDirty()
 
{
 
		this->cur_image = GetAircraftImage(this, this->direction);
 
		if (this->subtype == AIR_HELICOPTER) this->next->next->cur_image = GetRotorImage(this);
 
		MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
 
}
 

	
 
static void HandleAircraftLoading(Vehicle *v, int mode)
 
{
 
	switch (v->current_order.type) {
 
		case OT_LOADING: {
 
			if (mode != 0) return;
 
			if (--v->load_unload_time_rem != 0) return;
 

	
 
			if (LoadUnloadVehicle(v)) return;
 

	
 
			Order b = v->current_order;
 
			v->LeaveStation();
 
			v->current_order.Free();
 
			v->MarkDirty();
 
			if (!(b.flags & OF_NON_STOP)) return;
 
			break;
 
		}
 

	
 
		case OT_DUMMY: break;
 

	
 
		default: return;
 
	}
 

	
 
	v->cur_order_index++;
 
	InvalidateVehicleOrder(v);
 
}
 

	
 
static void CrashAirplane(Vehicle *v)
 
{
 
	v->vehstatus |= VS_CRASHED;
 
	v->u.air.crashed_counter = 0;
 

	
 
	CreateEffectVehicleRel(v, 4, 4, 8, EV_EXPLOSION_LARGE);
 
@@ -2127,13 +2101,13 @@ static void AircraftEventHandler(Vehicle
 
			v->breakdown_ctr--;
 
		}
 
	}
 

	
 
	HandleAircraftSmoke(v);
 
	ProcessAircraftOrder(v);
 
	HandleAircraftLoading(v, loop);
 
	v->HandleLoading(loop != 0);
 

	
 
	if (v->current_order.type >= OT_LOADING) return;
 

	
 
	AirportGoToNextPosition(v);
 
}
 

	
src/roadveh_cmd.cpp
Show inline comments
 
@@ -750,37 +750,12 @@ static void ProcessRoadVehOrder(Vehicle 
 
			break;
 
	}
 

	
 
	InvalidateVehicleOrder(v);
 
}
 

	
 
static void HandleRoadVehLoading(Vehicle *v)
 
{
 
	switch (v->current_order.type) {
 
		case OT_LOADING: {
 
			Order b;
 

	
 
			if (--v->load_unload_time_rem != 0) return;
 

	
 
			if (LoadUnloadVehicle(v)) return;
 

	
 
			b = v->current_order;
 
			v->LeaveStation();
 
			if (!(b.flags & OF_NON_STOP)) return;
 
			break;
 
		}
 

	
 
		case OT_DUMMY: break;
 

	
 
		default: return;
 
	}
 

	
 
	v->cur_order_index++;
 
	InvalidateVehicleOrder(v);
 
}
 

	
 
static void StartRoadVehSound(const Vehicle* v)
 
{
 
	if (!PlayVehicleSound(v, VSE_START)) {
 
		SoundFx s = RoadVehInfo(v->engine_type)->sfx;
 
		if (s == SND_19_BUS_START_PULL_AWAY && (v->tick_counter & 3) == 0)
 
			s = SND_1A_BUS_START_PULL_AWAY_WITH_HORN;
 
@@ -1301,13 +1276,13 @@ static void RoadVehController(Vehicle *v
 
		v->breakdown_ctr--;
 
	}
 

	
 
	if (v->vehstatus & VS_STOPPED) return;
 

	
 
	ProcessRoadVehOrder(v);
 
	HandleRoadVehLoading(v);
 
	v->HandleLoading();
 

	
 
	if (v->current_order.type == OT_LOADING) return;
 

	
 
	if (IsRoadVehInDepot(v)) {
 
		/* Vehicle is about to leave a depot */
 
		DiagDirection dir;
src/ship_cmd.cpp
Show inline comments
 
@@ -302,37 +302,12 @@ static void ProcessShipOrder(Vehicle *v)
 

	
 
	InvalidateVehicleOrder(v);
 

	
 
	InvalidateWindowClasses(WC_SHIPS_LIST);
 
}
 

	
 
static void HandleShipLoading(Vehicle *v)
 
{
 
	switch (v->current_order.type) {
 
		case OT_LOADING: {
 
			if (--v->load_unload_time_rem != 0) return;
 

	
 
			if (LoadUnloadVehicle(v)) return;
 

	
 
			v->PlayLeaveStationSound();
 

	
 
			Order b = v->current_order;
 
			v->LeaveStation();
 
			if (!(b.flags & OF_NON_STOP)) return;
 
			break;
 
		}
 

	
 
		case OT_DUMMY: break;
 

	
 
		default: return;
 
	}
 

	
 
	v->cur_order_index++;
 
	InvalidateVehicleOrder(v);
 
}
 

	
 
void Ship::UpdateDeltaXY(Direction direction)
 
{
 
#define MKIT(a, b, c, d) ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0)
 
	static const uint32 _delta_xy_table[8] = {
 
		MKIT( 6,  6,  -3,  -3),
 
		MKIT( 6, 32,  -3, -16),
 
@@ -678,13 +653,13 @@ static void ShipController(Vehicle *v)
 
		v->breakdown_ctr--;
 
	}
 

	
 
	if (v->vehstatus & VS_STOPPED) return;
 

	
 
	ProcessShipOrder(v);
 
	HandleShipLoading(v);
 
	v->HandleLoading();
 

	
 
	if (v->current_order.type == OT_LOADING) return;
 

	
 
	CheckShipLeaveDepot(v);
 

	
 
	if (!ShipAccelerate(v)) return;
src/train_cmd.cpp
Show inline comments
 
@@ -2523,41 +2523,12 @@ void Train::MarkDirty()
 

	
 
	/* need to update acceleration and cached values since the goods on the train changed. */
 
	TrainCargoChanged(this);
 
	UpdateTrainAcceleration(this);
 
}
 

	
 
static void HandleTrainLoading(Vehicle *v, bool mode)
 
{
 
	switch (v->current_order.type) {
 
		case OT_LOADING: {
 
			if (mode) return;
 

	
 
			if (--v->load_unload_time_rem) return;
 

	
 
			if (LoadUnloadVehicle(v)) return;
 

	
 
			v->PlayLeaveStationSound();
 

	
 
			Order b = v->current_order;
 
			v->LeaveStation();
 

	
 
			/* If this was not the final order, don't remove it from the list. */
 
			if (!(b.flags & OF_NON_STOP)) return;
 
			break;
 
		}
 

	
 
		case OT_DUMMY: break;
 

	
 
		default: return;
 
	}
 

	
 
	v->cur_order_index++;
 
	InvalidateVehicleOrder(v);
 
}
 

	
 
static int UpdateTrainSpeed(Vehicle *v)
 
{
 
	uint accel;
 

	
 
	if (v->vehstatus & VS_STOPPED || HASBIT(v->u.rail.flags, VRF_REVERSING)) {
 
		if (_patches.realistic_acceleration) {
 
@@ -3330,13 +3301,13 @@ static void TrainLocoHandler(Vehicle *v,
 
		v->cur_speed = 0;
 
		v->subspeed = 0;
 
		ReverseTrainDirection(v);
 
		return;
 
	}
 

	
 
	HandleTrainLoading(v, mode);
 
	v->HandleLoading(mode);
 

	
 
	if (v->current_order.type == OT_LOADING) return;
 

	
 
	if (CheckTrainStayInDepot(v)) return;
 

	
 
	if (!mode) HandleLocomotiveSmokeCloud(v);
src/vehicle.cpp
Show inline comments
 
@@ -2926,12 +2926,46 @@ void Vehicle::LeaveStation()
 
	current_order.type = OT_LEAVESTATION;
 
	current_order.flags = 0;
 
	GetStation(this->last_station_visited)->loading_vehicles.remove(this);
 
}
 

	
 

	
 
void Vehicle::HandleLoading(bool mode)
 
{
 
	switch (this->current_order.type) {
 
		case OT_LOADING: {
 
			/* Not the first call for this tick */
 
			if (mode) return;
 

	
 
			/* We have not waited enough time till the next round of loading/unloading */
 
			if (--this->load_unload_time_rem) return;
 

	
 
			/* Load/unload the vehicle; when it actually did something
 
			 * we do not leave the station. */
 
			if (LoadUnloadVehicle(this)) return;
 

	
 
			this->PlayLeaveStationSound();
 

	
 
			Order b = this->current_order;
 
			this->LeaveStation();
 

	
 
			/* If this was not the final order, don't remove it from the list. */
 
			if (!(b.flags & OF_NON_STOP)) return;
 
			break;
 
		}
 

	
 
		case OT_DUMMY: break;
 

	
 
		default: return;
 
	}
 

	
 
	this->cur_order_index++;
 
	InvalidateVehicleOrder(this);
 
}
 

	
 

	
 
void SpecialVehicle::UpdateDeltaXY(Direction direction)
 
{
 
	this->x_offs        = 0;
 
	this->y_offs        = 0;
 
	this->sprite_width  = 1;
 
	this->sprite_height = 1;
src/vehicle.h
Show inline comments
 
@@ -314,12 +314,19 @@ struct Vehicle {
 
	} u;
 

	
 
	void BeginLoading();
 
	void LeaveStation();
 

	
 
	/**
 
	 * Handle the loading of the vehicle; when not it skips through dummy
 
	 * orders and does nothing in all other cases.
 
	 * @param mode is the non-first call for this vehicle in this tick?
 
	 */
 
	void HandleLoading(bool mode = false);
 

	
 
	/**
 
	 * An overriden version of new, so you can use the vehicle instance
 
	 * instead of a newly allocated piece of memory.
 
	 * @param size the size of the variable (unused)
 
	 * @param v    the vehicle to use as 'storage' backend
 
	 * @return the memory that is 'allocated'
 
	 */
0 comments (0 inline, 0 general)