Add direction func: DirToDiagDirAlongAxis
This commit is contained in:
@@ -278,4 +278,27 @@ static inline bool IsDiagonalDirection(Direction dir)
|
|||||||
return (dir & 1) != 0;
|
return (dir & 1) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert a Direction to a DiagDirection, along an Axis.
|
||||||
|
*
|
||||||
|
* This function can be used to convert the 8-way Direction to
|
||||||
|
* the 2-way DiagDirection along an axis. If the direction cannot be
|
||||||
|
* mapped INVALID_DIAGDIR is returned.
|
||||||
|
*
|
||||||
|
* @param dir The direction to convert
|
||||||
|
* @param axis axis to convert
|
||||||
|
* @return The resulting DiagDirection, may be INVALID_DIAGDIR
|
||||||
|
*/
|
||||||
|
static inline DiagDirection DirToDiagDirAlongAxis(Direction dir, Axis axis)
|
||||||
|
{
|
||||||
|
assert(IsValidDirection(dir));
|
||||||
|
assert(IsValidAxis(axis));
|
||||||
|
if ((dir & 3) == (3 ^ (axis << 1))) return INVALID_DIAGDIR;
|
||||||
|
/* Mapping:
|
||||||
|
* X 4, 5, 6 -> 2 0, 1, 2 -> 0
|
||||||
|
* Y 2, 3, 4 -> 1 0, 6, 7 -> 3
|
||||||
|
*/
|
||||||
|
return (DiagDirection)((((dir - axis) & 4) >> 1) | axis);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* DIRECTION_FUNC_H */
|
#endif /* DIRECTION_FUNC_H */
|
||||||
|
Reference in New Issue
Block a user