File diff r12295:bb9023f54628 → r12296:564aa4953d26
src/train_cmd.cpp
Show inline comments
 
@@ -968,7 +968,7 @@ static Train *UnlinkWagon(Train *v, Trai
 
{
 
	/* unlinking the first vehicle of the chain? */
 
	if (v == first) {
 
		v = GetNextVehicle(v);
 
		v = v->GetNextVehicle();
 
		if (v == NULL) return NULL;
 

	
 
		if (v->IsWagon()) v->SetFreeWagon();
 
@@ -982,8 +982,8 @@ static Train *UnlinkWagon(Train *v, Trai
 
	}
 

	
 
	Train *u;
 
	for (u = first; GetNextVehicle(u) != v; u = GetNextVehicle(u)) {}
 
	GetLastEnginePart(u)->SetNext(GetNextVehicle(v));
 
	for (u = first; u->GetNextVehicle() != v; u = u->GetNextVehicle()) {}
 
	u->GetLastEnginePart()->SetNext(v->GetNextVehicle());
 
	return first;
 
}
 

	
 
@@ -1034,7 +1034,7 @@ static void NormaliseTrainConsist(Train 
 

	
 
	assert(v->IsFrontEngine());
 

	
 
	for (; v != NULL; v = GetNextVehicle(v)) {
 
	for (; v != NULL; v = v->GetNextVehicle()) {
 
		if (!v->IsMultiheaded() || !v->IsEngine()) continue;
 

	
 
		/* make sure that there are no free cars before next engine */
 
@@ -1094,7 +1094,7 @@ CommandCost CmdMoveRailVehicle(TileIndex
 
		dst_head = dst->First();
 
		if (dst_head->tile != src_head->tile) return CMD_ERROR;
 
		/* Now deal with articulated part of destination wagon */
 
		dst = GetLastEnginePart(dst);
 
		dst = dst->GetLastEnginePart();
 
	} else {
 
		dst_head = NULL;
 
	}
 
@@ -1126,8 +1126,9 @@ CommandCost CmdMoveRailVehicle(TileIndex
 
			 * row that are being moved. */
 
			if (HasBit(p2, 0)) {
 
				const Train *u;
 
				for (u = src_head; u != src && u != NULL; u = GetNextVehicle(u))
 
				for (u = src_head; u != src && u != NULL; u = u->GetNextVehicle()) {
 
					src_len--;
 
				}
 
			} else {
 
				/* If moving only one vehicle, just count that. */
 
				src_len = 1;
 
@@ -1141,8 +1142,9 @@ CommandCost CmdMoveRailVehicle(TileIndex
 
			}
 
		} else {
 
			/* Abort if we're creating a new train on an existing row. */
 
			if (src_len > max_len && src == src_head && GetNextVehicle(src_head)->IsEngine())
 
			if (src_len > max_len && src == src_head && src_head->GetNextVehicle()->IsEngine()) {
 
				return_cmd_error(STR_ERROR_TRAIN_TOO_LONG);
 
			}
 
		}
 
	}
 

	
 
@@ -1157,7 +1159,7 @@ CommandCost CmdMoveRailVehicle(TileIndex
 

	
 
	/* When we move the front vehicle, the second vehicle might need a unitnumber */
 
	if (!HasBit(p2, 0) && (src->IsFreeWagon() || (src->IsFrontEngine() && dst == NULL)) && (flags & DC_AUTOREPLACE) == 0) {
 
		Train *second = GetNextUnit(src);
 
		Train *second = src->GetNextUnit();
 
		if (second != NULL && second->IsEngine() && GetFreeUnitNumber(VEH_TRAIN) > _settings_game.vehicle.max_trains) {
 
			return_cmd_error(STR_ERROR_TOO_MANY_VEHICLES_IN_GAME);
 
		}
 
@@ -1268,7 +1270,7 @@ CommandCost CmdMoveRailVehicle(TileIndex
 
		/* If we move the front Engine and if the second vehicle is not an engine
 
		   add the whole vehicle to the DEFAULT_GROUP */
 
		if (src->IsFrontEngine() && !IsDefaultGroupID(src->group_id)) {
 
			Train *v = GetNextVehicle(src);
 
			Train *v = src->GetNextVehicle();
 

	
 
			if (v != NULL && v->IsEngine()) {
 
				v->group_id   = src->group_id;
 
@@ -1280,8 +1282,8 @@ CommandCost CmdMoveRailVehicle(TileIndex
 
			/* unlink ALL wagons */
 
			if (src != src_head) {
 
				Train *v = src_head;
 
				while (GetNextVehicle(v) != src) v = GetNextVehicle(v);
 
				GetLastEnginePart(v)->SetNext(NULL);
 
				while (v->GetNextVehicle() != src) v = v->GetNextVehicle();
 
				v->GetLastEnginePart()->SetNext(NULL);
 
			} else {
 
				InvalidateWindowData(WC_VEHICLE_DEPOT, src_head->tile); // We removed a line
 
				src_head = NULL;
 
@@ -1291,7 +1293,7 @@ CommandCost CmdMoveRailVehicle(TileIndex
 
			if (src_head == dst_head) dst_head = NULL;
 
			/* unlink single wagon from linked list */
 
			src_head = UnlinkWagon(src, src_head);
 
			GetLastEnginePart(src)->SetNext(NULL);
 
			src->GetLastEnginePart()->SetNext(NULL);
 
		}
 

	
 
		if (dst == NULL) {
 
@@ -1340,8 +1342,8 @@ CommandCost CmdMoveRailVehicle(TileIndex
 
			{
 
				Train *v;
 

	
 
				for (v = src; GetNextVehicle(v) != NULL; v = GetNextVehicle(v)) {}
 
				GetLastEnginePart(v)->SetNext(dst->Next());
 
				for (v = src; v->GetNextVehicle() != NULL; v = v->GetNextVehicle()) {}
 
				v->GetLastEnginePart()->SetNext(dst->Next());
 
			}
 
			dst->SetNext(src);
 
		}
 
@@ -1460,7 +1462,7 @@ CommandCost CmdSellRailWagon(TileIndex t
 
			/* 2. We are selling the front vehicle, some special action might be required
 
			 * here, so take attention */
 
			if (v == first) {
 
				Train *new_f = GetNextVehicle(first);
 
				Train *new_f = first->GetNextVehicle();
 

	
 
				/* 2.2 If there are wagons present after the deleted front engine, check
 
				 * if the second wagon (which will be first) is an engine. If it is one,
 
@@ -1521,7 +1523,7 @@ CommandCost CmdSellRailWagon(TileIndex t
 
			 * If we encounter a matching rear-engine to a front-engine
 
			 * earlier in the chain (before deletion), leave it alone */
 
			for (Train *tmp; v != NULL; v = tmp) {
 
				tmp = GetNextVehicle(v);
 
				tmp = v->GetNextVehicle();
 

	
 
				if (v->IsMultiheaded()) {
 
					if (v->IsEngine()) {
 
@@ -1537,7 +1539,7 @@ CommandCost CmdSellRailWagon(TileIndex t
 
							 * deleted here. However, because tmp has already
 
							 * been set it needs to be updated now so that the
 
							 * loop never sees the rear part. */
 
							if (tmp == rear) tmp = GetNextVehicle(tmp);
 
							if (tmp == rear) tmp = tmp->GetNextVehicle();
 

	
 
							if (flags & DC_EXEC) {
 
								first = UnlinkWagon(rear, first);
 
@@ -4439,7 +4441,7 @@ Money Train::GetRunningCost() const
 
		if (v->IsMultiheaded()) cost_factor /= 2;
 

	
 
		cost += cost_factor * GetPriceByIndex(rvi->running_cost_class);
 
	} while ((v = GetNextVehicle(v)) != NULL);
 
	} while ((v = v->GetNextVehicle()) != NULL);
 

	
 
	return cost;
 
}