Changeset - r22240:6d8570a35ab0
[Not reviewed]
master
0 2 0
frosch - 9 years ago 2015-10-30 16:20:00
frosch@openttd.org
(svn r27422) -Fix [FS#6341]: Aircraft picked the wrong airport entry point, if airports were rotated by 180 degree. (marcole)
2 files changed with 18 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/aircraft_cmd.cpp
Show inline comments
 
@@ -809,7 +809,7 @@ static byte AircraftGetEntryPoint(const 
 
		/* We are northwest or southeast of the airport */
 
		dir = delta_y < 0 ? DIAGDIR_NW : DIAGDIR_SE;
 
	}
 
	dir = ChangeDiagDir(dir, (DiagDirDiff)ReverseDiagDir(DirToDiagDir(rotation)));
 
	dir = ChangeDiagDir(dir, DiagDirDifference(DIAGDIR_NE, DirToDiagDir(rotation)));
 
	return apc->entry_points[dir];
 
}
 

	
src/direction_func.h
Show inline comments
 
@@ -61,11 +61,11 @@ static inline Direction ReverseDir(Direc
 

	
 

	
 
/**
 
 * Calculate the difference between to directions
 
 * Calculate the difference between two directions
 
 *
 
 * @param d0 The first direction as the base
 
 * @param d1 The second direction as the offset from the base
 
 * @return The difference how the second directions drifts of the first one.
 
 * @return The difference how the second direction drifts of the first one.
 
 */
 
static inline DirDiff DirDifference(Direction d0, Direction d1)
 
{
 
@@ -79,7 +79,7 @@ static inline DirDiff DirDifference(Dire
 
/**
 
 * Applies two differences together
 
 *
 
 * This function adds two differences together and return the resulting
 
 * This function adds two differences together and returns the resulting
 
 * difference. So adding two DIRDIFF_REVERSE together results in the
 
 * DIRDIFF_SAME difference.
 
 *
 
@@ -123,6 +123,20 @@ static inline DiagDirection ReverseDiagD
 
	return (DiagDirection)(2 ^ d);
 
}
 

	
 
/**
 
 * Calculate the difference between two DiagDirection values
 
 *
 
 * @param d0 The first direction as the base
 
 * @param d1 The second direction as the offset from the base
 
 * @return The difference how the second direction drifts of the first one.
 
 */
 
static inline DiagDirDiff DiagDirDifference(DiagDirection d0, DiagDirection d1)
 
{
 
	assert(IsValidDiagDirection(d0));
 
	assert(IsValidDiagDirection(d1));
 
	/* Cast to uint so compiler can use bitmask. Result can never be negative. */
 
	return (DiagDirDiff)((uint)(d0 - d1) % 4);
 
}
 

	
 
/**
 
 * Applies a difference on a DiagDirection
0 comments (0 inline, 0 general)