Use a macro for the common approach angle idiom

This commit is contained in:
Altimor 2023-10-12 20:44:24 -04:00
parent 9921382a68
commit 0eda58ca92
5 changed files with 10 additions and 13 deletions

View File

@ -32,6 +32,9 @@ extern f32 gCosineTable[];
#define sqr(x) ((x) * (x))
#define approach_angle(current, target, rate) \
((target) - approach_s32((s16)((target) - (current)), 0, (rate), (rate)))
void *vec3f_copy(Vec3f dest, Vec3f src);
void *vec3f_set(Vec3f dest, f32 x, f32 y, f32 z);
void *vec3f_add(Vec3f dest, Vec3f a);

View File

@ -210,7 +210,7 @@ s32 act_climbing_pole(struct MarioState *m) {
marioObj->oMarioPolePos += m->controller->stickY / 8.0f;
marioObj->oMarioPoleYawVel = 0;
m->faceAngle[1] = cameraAngle - approach_s32((s16)(cameraAngle - m->faceAngle[1]), 0, 0x400, 0x400);
m->faceAngle[1] = approach_angle(m->faceAngle[1], cameraAngle, 0x400);
if (set_pole_position(m, 0.0f) == POLE_NONE) {
sp24 = m->controller->stickY / 4.0f * 0x10000;
@ -350,8 +350,7 @@ s32 update_hang_moving(struct MarioState *m) {
m->forwardVel = maxSpeed;
}
m->faceAngle[1] =
m->intendedYaw - approach_s32((s16)(m->intendedYaw - m->faceAngle[1]), 0, 0x800, 0x800);
m->faceAngle[1] = approach_angle(m->faceAngle[1], m->intendedYaw, 0x800);
m->slideYaw = m->faceAngle[1];
m->slideVelX = m->forwardVel * sins(m->faceAngle[1]);

View File

@ -389,8 +389,7 @@ s32 act_reading_npc_dialog(struct MarioState *m) {
if (m->actionState < 8) {
// turn to NPC
angleToNPC = mario_obj_angle_to_object(m, m->usedObj);
m->faceAngle[1] =
angleToNPC - approach_s32((angleToNPC - m->faceAngle[1]) << 16 >> 16, 0, 2048, 2048);
m->faceAngle[1] = approach_angle(m->faceAngle[1], angleToNPC, 0x800);
// turn head to npc
m->actionTimer += headTurnAmount;
// set animation

View File

@ -384,8 +384,7 @@ void update_shell_speed(struct MarioState *m) {
m->forwardVel = 64.0f;
}
m->faceAngle[1] =
m->intendedYaw - approach_s32((s16)(m->intendedYaw - m->faceAngle[1]), 0, 0x800, 0x800);
m->faceAngle[1] = approach_angle(m->faceAngle[1], m->intendedYaw, 0x800);
apply_slope_accel(m);
}
@ -459,8 +458,7 @@ void update_walking_speed(struct MarioState *m) {
m->forwardVel = 48.0f;
}
m->faceAngle[1] =
m->intendedYaw - approach_s32((s16)(m->intendedYaw - m->faceAngle[1]), 0, 0x800, 0x800);
m->faceAngle[1] = approach_angle(m->faceAngle[1], m->intendedYaw, 0x800);
apply_slope_accel(m);
}
@ -1322,8 +1320,7 @@ s32 act_burning_ground(struct MarioState *m) {
m->forwardVel = approach_f32(m->forwardVel, 32.0f, 4.0f, 1.0f);
if (m->input & INPUT_NONZERO_ANALOG) {
m->faceAngle[1] =
m->intendedYaw - approach_s32((s16)(m->intendedYaw - m->faceAngle[1]), 0, 0x600, 0x600);
m->faceAngle[1] = approach_angle(m->faceAngle[1], m->intendedYaw, 0x600);
}
apply_slope_accel(m);

View File

@ -1128,8 +1128,7 @@ static void update_metal_water_walking_speed(struct MarioState *m) {
m->forwardVel = 32.0f;
}
m->faceAngle[1] =
m->intendedYaw - approach_s32((s16)(m->intendedYaw - m->faceAngle[1]), 0, 0x800, 0x800);
m->faceAngle[1] = approach_angle(m->faceAngle[1], m->intendedYaw, 0x800);
m->slideVelX = m->forwardVel * sins(m->faceAngle[1]);
m->slideVelZ = m->forwardVel * coss(m->faceAngle[1]);