diff options
| author | fig02 <fig02srl@gmail.com> | 2020-03-28 02:41:49 -0400 |
|---|---|---|
| committer | fig02 <fig02srl@gmail.com> | 2020-03-28 02:41:49 -0400 |
| commit | fde5369eae2cda52a07d2c46a4e7157cefef0ca4 (patch) | |
| tree | 97e19dea480736f0b99c3ead5a60e0396b72c0e5 /src/code/z_path.c | |
| parent | 3c9fe35311506f3f1769b04d8b3f53cc22db4a52 (diff) | |
| parent | ada905a754e7650819383bf53303796d30ea4bac (diff) | |
fire arrow almost done, draw func regalloc
Diffstat (limited to 'src/code/z_path.c')
| -rw-r--r-- | src/code/z_path.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/code/z_path.c b/src/code/z_path.c new file mode 100644 index 000000000..03dc6d6f6 --- /dev/null +++ b/src/code/z_path.c @@ -0,0 +1,46 @@ +#include <ultra64.h> +#include <global.h> + +Path* Path_GetByIndex(GlobalContext* globalCtx, s16 index, s16 max) { + Path* path; + + if (index != max) { + path = &globalCtx->setupPathList[index]; + } else { + path = NULL; + } + + return path; +} + +f32 Path_OrientAndGetDistSq(Actor* actor, Path* path, s16 waypoint, s16* yaw) { + f32 dx; + f32 dz; + Vec3s* pointPos; + + if (path == NULL) { + return -1.0; + } + + pointPos = SEGMENTED_TO_VIRTUAL(path->points); + pointPos = &pointPos[waypoint]; + + dx = pointPos->x - actor->posRot.pos.x; + dz = pointPos->z - actor->posRot.pos.z; + + *yaw = Math_atan2f(dx, dz) * (32768 / M_PI); + + return SQ(dx) + SQ(dz); +} + +void Path_CopyLastPoint(Path* path, Vec3f* dest) { + Vec3s* pointPos; + + if (path != NULL) { + pointPos = &((Vec3s*)SEGMENTED_TO_VIRTUAL(path->points))[path->count - 1]; + + dest->x = pointPos->x; + dest->y = pointPos->y; + dest->z = pointPos->z; + } +} |
