Pass object_base &to do_physics_align_object
This commit is contained in:
parent
d31f05d89c
commit
99b7c3cf8b
|
@ -70,7 +70,7 @@ void check_and_fix_matrix(vms_matrix &m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void do_physics_align_object(const vobjptr_t obj)
|
static void do_physics_align_object(object_base &obj)
|
||||||
{
|
{
|
||||||
vms_vector desired_upvec;
|
vms_vector desired_upvec;
|
||||||
fixang delta_ang,roll_ang;
|
fixang delta_ang,roll_ang;
|
||||||
|
@ -81,9 +81,9 @@ static void do_physics_align_object(const vobjptr_t obj)
|
||||||
|
|
||||||
//find side of segment that player is most alligned with
|
//find side of segment that player is most alligned with
|
||||||
|
|
||||||
range_for (auto &i, Segments[obj->segnum].sides)
|
range_for (auto &i, vcsegptr(obj.segnum)->sides)
|
||||||
{
|
{
|
||||||
const auto d = vm_vec_dot(i.normals[0], obj->orient.uvec);
|
const auto d = vm_vec_dot(i.normals[0], obj.orient.uvec);
|
||||||
|
|
||||||
if (largest_d < d)
|
if (largest_d < d)
|
||||||
{
|
{
|
||||||
|
@ -101,14 +101,15 @@ static void do_physics_align_object(const vobjptr_t obj)
|
||||||
else
|
else
|
||||||
desired_upvec = best_side->normals[0];
|
desired_upvec = best_side->normals[0];
|
||||||
|
|
||||||
if (labs(vm_vec_dot(desired_upvec,obj->orient.fvec)) < f1_0/2) {
|
if (labs(vm_vec_dot(desired_upvec, obj.orient.fvec)) < f1_0 / 2)
|
||||||
|
{
|
||||||
vms_angvec tangles;
|
vms_angvec tangles;
|
||||||
|
|
||||||
const auto temp_matrix = vm_vector_2_matrix(obj->orient.fvec,&desired_upvec,nullptr);
|
const auto temp_matrix = vm_vector_2_matrix(obj.orient.fvec, &desired_upvec, nullptr);
|
||||||
|
|
||||||
delta_ang = vm_vec_delta_ang(obj->orient.uvec,temp_matrix.uvec,obj->orient.fvec);
|
delta_ang = vm_vec_delta_ang(obj.orient.uvec, temp_matrix.uvec, obj.orient.fvec);
|
||||||
|
|
||||||
delta_ang += obj->mtype.phys_info.turnroll;
|
delta_ang += obj.mtype.phys_info.turnroll;
|
||||||
|
|
||||||
if (abs(delta_ang) > DAMP_ANG) {
|
if (abs(delta_ang) > DAMP_ANG) {
|
||||||
roll_ang = fixmul(FrameTime,ROLL_RATE);
|
roll_ang = fixmul(FrameTime,ROLL_RATE);
|
||||||
|
@ -118,7 +119,7 @@ static void do_physics_align_object(const vobjptr_t obj)
|
||||||
|
|
||||||
tangles.p = tangles.h = 0; tangles.b = roll_ang;
|
tangles.p = tangles.h = 0; tangles.b = roll_ang;
|
||||||
const auto &&rotmat = vm_angles_2_matrix(tangles);
|
const auto &&rotmat = vm_angles_2_matrix(tangles);
|
||||||
obj->orient = vm_matrix_x_matrix(obj->orient,rotmat);
|
obj.orient = vm_matrix_x_matrix(obj.orient, rotmat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue