summaryrefslogtreecommitdiff
path: root/src/d/d_a_obj.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/d/d_a_obj.cpp')
-rw-r--r--src/d/d_a_obj.cpp49
1 files changed, 26 insertions, 23 deletions
diff --git a/src/d/d_a_obj.cpp b/src/d/d_a_obj.cpp
index 5f6f3e29..c2de2356 100644
--- a/src/d/d_a_obj.cpp
+++ b/src/d/d_a_obj.cpp
@@ -141,38 +141,41 @@ namespace daObj {
}
/* 80066D6C-8006700C .text posMoveF_grade__5daObjFP10fopAc_ac_cPC4cXyzPC4cXyzffPC4cXyzffPC4cXyz */
- void posMoveF_grade(fopAc_ac_c* pActor, const cXyz* pAddVel, const cXyz* stream_spd, f32 param_4, f32 param_5, const cXyz* pNorm, f32 friction, f32 no_grade_cos, const cXyz* pAddAccel) {
- /* Nonmatching */
- JUT_ASSERT(0x118, stream_spd != NULL)
+ void posMoveF_grade(fopAc_ac_c* i_actor, const cXyz* p_add_vel, const cXyz* stream_spd, f32 param_4,
+ f32 param_5, const cXyz* pNorm, f32 friction, f32 no_grade_cos, const cXyz* p_add_accel
+ ) {
+ JUT_ASSERT(280, stream_spd != NULL)
cXyz resist_accel;
- posMoveF_resist_acc(&resist_accel, pActor, stream_spd, param_4, param_5);
+ posMoveF_resist_acc(&resist_accel, i_actor, stream_spd, param_4, param_5);
- JUT_ASSERT(0x121, (friction >= 0.0f) && (friction < 1.0f) && (no_grade_cos >= 0.0f) && (no_grade_cos <= 1.0f))
+ JUT_ASSERT(289, (friction >= 0.0f) && (friction < 1.0f) && (no_grade_cos >= 0.0f) && (no_grade_cos <= 1.0f))
cXyz vel;
- posMoveF_grade_acc(&vel, pActor, pNorm, param_5, param_4, &resist_accel, pAddAccel);
-
- f32 spf = pActor->speedF;
- f32 grav = pActor->gravity;
-
- f32 x = spf * cM_ssin(pActor->current.angle.y) + resist_accel.x + vel.x;
- f32 y = pActor->speed.y + grav + resist_accel.y + vel.y;
- f32 z = spf * cM_scos(pActor->current.angle.y) + resist_accel.z + vel.z;
- if(pAddAccel) {
- x += pAddAccel->x;
- y += pAddAccel->y;
- z += pAddAccel->z;
+ posMoveF_grade_acc(&vel, i_actor, pNorm, friction, no_grade_cos, &resist_accel, p_add_accel);
+
+ f32 speedF = fopAcM_GetSpeedF(i_actor);
+ f32 gravity = fopAcM_GetGravity(i_actor);
+ cXyz* speed_p = fopAcM_GetSpeed_p(i_actor);
+
+ f32 speed_x = vel.x + (resist_accel.x + (speedF * cM_ssin(i_actor->current.angle.y)));
+ f32 speed_y = vel.y + (resist_accel.y + (speed_p->y + gravity));
+ f32 speed_z = vel.z + (resist_accel.z + (speedF * cM_scos(i_actor->current.angle.y)));
+
+ if(p_add_accel) {
+ speed_x += p_add_accel->x;
+ speed_y += p_add_accel->y;
+ speed_z += p_add_accel->z;
}
- if(y < pActor->maxFallSpeed) {
- y = pActor->maxFallSpeed;
+ if(speed_y < fopAcM_GetMaxFallSpeed(i_actor)) {
+ speed_y = fopAcM_GetMaxFallSpeed(i_actor);
}
- pActor->speed.set(x, y, z);
- pActor->speedF = std::sqrtf(x * x + z * z);
- pActor->current.angle.y = cM_atan2s(spf, grav);
- fopAcM_posMove(pActor, pAddVel);
+ fopAcM_SetSpeed(i_actor, speed_x, speed_y, speed_z);
+ i_actor->speedF = std::sqrtf(speed_x * speed_x + speed_z * speed_z);
+ i_actor->current.angle.y = cM_atan2s(speed_x, speed_z);
+ fopAcM_posMove(i_actor, p_add_vel);
}
/* 8006700C-800671D4 .text quat_rotBaseY__5daObjFP10QuaternionRC4cXyz */