mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r27422) -Fix [FS#6341]: Aircraft picked the wrong airport entry point, if airports were rotated by 180 degree. (marcole)
This commit is contained in:
parent
2c9117fbdd
commit
05ed2001d4
|
@ -809,7 +809,7 @@ static byte AircraftGetEntryPoint(const Aircraft *v, const AirportFTAClass *apc,
|
||||||
/* We are northwest or southeast of the airport */
|
/* We are northwest or southeast of the airport */
|
||||||
dir = delta_y < 0 ? DIAGDIR_NW : DIAGDIR_SE;
|
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];
|
return apc->entry_points[dir];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,11 +61,11 @@ static inline Direction ReverseDir(Direction d)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate the difference between to directions
|
* Calculate the difference between two directions
|
||||||
*
|
*
|
||||||
* @param d0 The first direction as the base
|
* @param d0 The first direction as the base
|
||||||
* @param d1 The second direction as the offset from 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)
|
static inline DirDiff DirDifference(Direction d0, Direction d1)
|
||||||
{
|
{
|
||||||
|
@ -79,7 +79,7 @@ static inline DirDiff DirDifference(Direction d0, Direction d1)
|
||||||
/**
|
/**
|
||||||
* Applies two differences together
|
* 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
|
* difference. So adding two DIRDIFF_REVERSE together results in the
|
||||||
* DIRDIFF_SAME difference.
|
* DIRDIFF_SAME difference.
|
||||||
*
|
*
|
||||||
|
@ -123,6 +123,20 @@ static inline DiagDirection ReverseDiagDir(DiagDirection d)
|
||||||
return (DiagDirection)(2 ^ d);
|
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
|
* Applies a difference on a DiagDirection
|
||||||
|
|
Loading…
Reference in New Issue