53 lines
1.0 KiB
C
53 lines
1.0 KiB
C
/**
|
|
* Copyright (c) 2025 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#include "direction.h"
|
|
#include "assert/assert.h"
|
|
|
|
float_t directionToAngle(const direction_t dir) {
|
|
switch(dir) {
|
|
case DIRECTION_NORTH: return (M_PI_2);
|
|
case DIRECTION_SOUTH: return -(M_PI_2);
|
|
case DIRECTION_EAST: return 0;
|
|
case DIRECTION_WEST: return (M_PI);
|
|
default: return 0; // Should never happen
|
|
}
|
|
}
|
|
|
|
void directionGetCoordinates(
|
|
const direction_t dir,
|
|
int8_t *x, int8_t *y
|
|
) {
|
|
assertNotNull(x, "X coordinate pointer cannot be NULL");
|
|
assertNotNull(y, "Y coordinate pointer cannot be NULL");
|
|
|
|
switch(dir) {
|
|
case DIRECTION_NORTH:
|
|
*x = 0;
|
|
*y = -1;
|
|
break;
|
|
|
|
case DIRECTION_SOUTH:
|
|
*x = 0;
|
|
*y = 1;
|
|
break;
|
|
|
|
case DIRECTION_EAST:
|
|
*x = 1;
|
|
*y = 0;
|
|
break;
|
|
|
|
case DIRECTION_WEST:
|
|
*x = -1;
|
|
*y = 0;
|
|
break;
|
|
|
|
default:
|
|
assertUnreachable("Invalid direction");
|
|
break;
|
|
}
|
|
} |