Skip to content

Commit e302f0e

Browse files
author
Goober5000
committed
convert the rest of the model instance functions to have model_instance_num parameters instead of object parameters
1 parent da812f9 commit e302f0e

File tree

14 files changed

+95
-134
lines changed

14 files changed

+95
-134
lines changed

code/ai/aicode.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9043,7 +9043,7 @@ void find_adjusted_dockpoint_info(vec3d *global_p0, vec3d *global_p1, vec3d *glo
90439043
model_instance_find_world_point(global_p1, &local_p1, shipp->model_instance_num, submodel, &objp->orient, &objp->pos);
90449044

90459045
// find the normal of the first dockpoint
9046-
model_instance_find_world_dir(global_p0_norm, &pm->docking_bays[dock_index].norm[0], shipp->model_instance_num, submodel, &objp->orient, &objp->pos);
9046+
model_instance_find_world_dir(global_p0_norm, &pm->docking_bays[dock_index].norm[0], shipp->model_instance_num, submodel, &objp->orient);
90479047
}
90489048
// use the static dockpoints
90499049
else

code/ai/aiturret.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,7 +1335,7 @@ void ship_get_global_turret_gun_info(object *objp, ship_subsys *ssp, vec3d *gpos
13351335
model_instance_find_world_point(gpos, gun_pos, Ships[objp->instance].model_instance_num, tp->turret_gun_sobj, &objp->orient, &objp->pos);
13361336

13371337
if (use_angles) {
1338-
model_instance_find_world_dir(gvec, &tp->turret_norm, Ships[objp->instance].model_instance_num, tp->turret_gun_sobj, &objp->orient, &objp->pos);
1338+
model_instance_find_world_dir(gvec, &tp->turret_norm, Ships[objp->instance].model_instance_num, tp->turret_gun_sobj, &objp->orient);
13391339
} else if (tp->flags2 & MSS_FLAG2_SHARE_FIRE_DIRECTION) {
13401340
vec3d shared_dir, avg, tmp_pos, tmp_target, enemy_point;
13411341
vm_vec_avg_n(&avg, tp->turret_num_firing_points, tp->turret_firing_point);
@@ -1382,7 +1382,7 @@ void ship_get_global_turret_gun_info(object *objp, ship_subsys *ssp, vec3d *gpos
13821382

13831383
vm_vec_normalized_dir(&shared_dir, &tmp_target, &tmp_pos);
13841384

1385-
model_instance_find_world_dir(gvec, &shared_dir, Ships[objp->instance].model_instance_num, tp->turret_gun_sobj, &objp->orient, &objp->pos);
1385+
model_instance_find_world_dir(gvec, &shared_dir, Ships[objp->instance].model_instance_num, tp->turret_gun_sobj, &objp->orient);
13861386
} else {
13871387
//vector gun_pos2;
13881388
//vm_vec_add(&gun_pos2, gpos, gun_pos);

code/asteroid/asteroid.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,8 +1026,8 @@ int asteroid_check_collision(object *pasteroid, object *other_obj, vec3d *hitpos
10261026
model_get_rotating_submodel_list(&submodel_vector, heavy_obj);
10271027

10281028
// Get polymodel and turn off all rotating submodels, collide against only 1 at a time.
1029-
pm = model_get(Ship_info[Ships[heavy_obj->instance].ship_info_index].model_num);
1030-
pmi = model_get_instance(Ships[pship_obj->instance].model_instance_num);
1029+
pmi = model_get_instance(Ships[heavy_obj->instance].model_instance_num);
1030+
pm = model_get(pmi->model_num);
10311031

10321032
// turn off all rotating submodels and test for collision
10331033
for (size_t j=0; j<submodel_vector.size(); j++) {
@@ -1048,10 +1048,10 @@ int asteroid_check_collision(object *pasteroid, object *other_obj, vec3d *hitpos
10481048

10491049
// find the start and end positions of the sphere in submodel RF
10501050
pmi->submodel[submodel_vector[i]].angs = pmi->submodel[submodel_vector[i]].prev_angs;
1051-
world_find_model_instance_point(&p0, &light_obj->last_pos, pm, pmi, submodel_vector[i], &heavy_obj->last_orient, &heavy_obj->last_pos);
1051+
world_find_model_instance_point(&p0, &light_obj->last_pos, pmi, submodel_vector[i], &heavy_obj->last_orient, &heavy_obj->last_pos);
10521052

10531053
pmi->submodel[submodel_vector[i]].angs = copy_angles;
1054-
world_find_model_instance_point(&p1, &light_obj->pos, pm, pmi, submodel_vector[i], &heavy_obj->orient, &heavy_obj->pos);
1054+
world_find_model_instance_point(&p1, &light_obj->pos, pmi, submodel_vector[i], &heavy_obj->orient, &heavy_obj->pos);
10551055

10561056
mc.p0 = &p0;
10571057
mc.p1 = &p1;
@@ -1068,7 +1068,7 @@ int asteroid_check_collision(object *pasteroid, object *other_obj, vec3d *hitpos
10681068

10691069
// set up asteroid_hit_info for rotating submodel
10701070
if (asteroid_hit_info->edge_hit == 0) {
1071-
model_instance_find_obj_dir(&asteroid_hit_info->collision_normal, &mc.hit_normal, heavy_obj, mc.hit_submodel);
1071+
model_instance_find_obj_dir(&asteroid_hit_info->collision_normal, &mc.hit_normal, Ships[heavy_obj->instance].model_instance_num, mc.hit_submodel, &heavy_obj->orient);
10721072
}
10731073

10741074
// find position in submodel RF of light object at collison
@@ -1100,7 +1100,7 @@ int asteroid_check_collision(object *pasteroid, object *other_obj, vec3d *hitpos
11001100

11011101
// get collision normal if not edge hit
11021102
if (asteroid_hit_info->edge_hit == 0) {
1103-
model_instance_find_obj_dir(&asteroid_hit_info->collision_normal, &mc.hit_normal, heavy_obj, mc.hit_submodel);
1103+
model_instance_find_obj_dir(&asteroid_hit_info->collision_normal, &mc.hit_normal, Ships[heavy_obj->instance].model_instance_num, mc.hit_submodel, &heavy_obj->orient);
11041104
}
11051105

11061106
// find position in submodel RF of light object at collison

code/camera/camera.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,8 +330,10 @@ void camera::get_info(vec3d *position, matrix *orientation)
330330
eyep = get_submodel_eye(pm, object_host_submodel);
331331
if(eyep)
332332
{
333+
Assertion(objp->type == OBJ_SHIP, "This part of the code expects the object to be a ship");
334+
333335
vec3d c_pos_in;
334-
find_submodel_instance_point_normal( &c_pos_in, &host_normal, objp, eyep->parent, &eyep->pnt, &eyep->norm);
336+
find_submodel_instance_point_normal(&c_pos_in, &host_normal, Ships[objp->instance].model_instance_num, eyep->parent, &eyep->pnt, &eyep->norm);
335337
vm_vec_unrotate(&c_pos, &c_pos_in, &objp->orient);
336338
vm_vec_add2(&c_pos, &objp->pos);
337339
}

code/debris/debris.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -939,10 +939,10 @@ int debris_check_collision(object *pdebris, object *other_obj, vec3d *hitpos, co
939939

940940
// find the start and end positions of the sphere in submodel RF
941941
pmi->submodel[*smv].angs = pmi->submodel[*smv].prev_angs;
942-
world_find_model_instance_point(&p0, &light_obj->last_pos, pm, pmi, *smv, &heavy_obj->last_orient, &heavy_obj->last_pos);
942+
world_find_model_instance_point(&p0, &light_obj->last_pos, pmi, *smv, &heavy_obj->last_orient, &heavy_obj->last_pos);
943943

944944
pmi->submodel[*smv].angs = copy_angles;
945-
world_find_model_instance_point(&p1, &light_obj->pos, pm, pmi, *smv, &heavy_obj->orient, &heavy_obj->pos);
945+
world_find_model_instance_point(&p1, &light_obj->pos, pmi, *smv, &heavy_obj->orient, &heavy_obj->pos);
946946

947947
mc.p0 = &p0;
948948
mc.p1 = &p1;
@@ -960,7 +960,7 @@ int debris_check_collision(object *pdebris, object *other_obj, vec3d *hitpos, co
960960

961961
// set up debris_hit_info for rotating submodel
962962
if (debris_hit_info->edge_hit == 0) {
963-
model_instance_find_obj_dir(&debris_hit_info->collision_normal, &mc.hit_normal, heavy_obj, mc.hit_submodel);
963+
model_instance_find_obj_dir(&debris_hit_info->collision_normal, &mc.hit_normal, mc.model_instance_num, mc.hit_submodel, &heavy_obj->orient);
964964
}
965965

966966
// find position in submodel RF of light object at collison
@@ -991,7 +991,7 @@ int debris_check_collision(object *pdebris, object *other_obj, vec3d *hitpos, co
991991

992992
// get collision normal if not edge hit
993993
if (debris_hit_info->edge_hit == 0) {
994-
model_instance_find_obj_dir(&debris_hit_info->collision_normal, &mc.hit_normal, heavy_obj, mc.hit_submodel);
994+
model_instance_find_obj_dir(&debris_hit_info->collision_normal, &mc.hit_normal, Ships[heavy_obj->instance].model_instance_num, mc.hit_submodel, &heavy_obj->orient);
995995
}
996996

997997
// find position in submodel RF of light object at collison

code/model/model.h

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,20 +1011,19 @@ extern void model_find_submodel_offset(vec3d *outpnt, int model_num, int sub_mod
10111011
// Given a point (pnt) that is in sub_model_num's frame of
10121012
// reference, and given the object's orient and position,
10131013
// return the point in 3-space in outpnt.
1014-
extern void model_find_world_point(vec3d *outpnt, vec3d *mpnt, int model_num, int submodel_num, matrix *objorient, vec3d *objpos);
1015-
extern void model_instance_find_world_point(vec3d *outpnt, vec3d *mpnt, int model_instance_num, int submodel_num, matrix *objorient, vec3d *objpos);
1014+
extern void model_find_world_point(vec3d *outpnt, vec3d *mpnt, int model_num, int submodel_num, const matrix *objorient, const vec3d *objpos);
1015+
extern void model_instance_find_world_point(vec3d *outpnt, vec3d *mpnt, int model_instance_num, int submodel_num, const matrix *objorient, const vec3d *objpos);
10161016

10171017
// Given a point in the world RF, find the corresponding point in the model RF.
10181018
// This is special purpose code, specific for model collision.
10191019
// NOTE - this code ASSUMES submodel is 1 level down from hull (detail[0])
1020-
void world_find_model_point(vec3d *out, vec3d *world_pt, polymodel *pm, int submodel_num, matrix *orient, vec3d *pos);
1020+
void world_find_model_point(vec3d *out, vec3d *world_pt, const polymodel *pm, int submodel_num, const matrix *orient, const vec3d *pos);
1021+
void world_find_model_instance_point(vec3d *out, vec3d *world_pt, const polymodel_instance *pmi, int submodel_num, const matrix *orient, const vec3d *pos);
10211022

1022-
void world_find_model_instance_point(vec3d *out, vec3d *world_pt, polymodel *pm, polymodel_instance *pmi, int submodel_num, matrix *orient, vec3d *pos);
1023-
1024-
extern void find_submodel_instance_point(vec3d *outpnt, object *pship_obj, int submodel_num);
1025-
extern void find_submodel_instance_point_normal(vec3d *outpnt, vec3d *outnorm, object *pship_obj, int submodel_num, vec3d *submodel_pnt, vec3d *submodel_norm);
1026-
extern void find_submodel_instance_point_orient(vec3d *outpnt, matrix *outorient, object *pship_obj, int submodel_num, vec3d *submodel_pnt, matrix *submodel_orient);
1027-
extern void find_submodel_instance_world_point(vec3d *outpnt, object *pship_obj, int submodel_num);
1023+
extern void find_submodel_instance_point(vec3d *outpnt, int model_instance_num, int submodel_num);
1024+
extern void find_submodel_instance_point_normal(vec3d *outpnt, vec3d *outnorm, int model_instance_num, int submodel_num, const vec3d *submodel_pnt, const vec3d *submodel_norm);
1025+
extern void find_submodel_instance_point_orient(vec3d *outpnt, matrix *outorient, int model_instance_num, int submodel_num, const vec3d *submodel_pnt, const matrix *submodel_orient);
1026+
extern void find_submodel_instance_world_point(vec3d *outpnt, int model_instance_num, int submodel_num, const matrix *objorient, const vec3d *objpos);
10281027

10291028
// Given a polygon model index, find a list of rotating submodels to be used for collision
10301029
void model_get_rotating_submodel_list(SCP_vector<int> *submodel_vector, object *objp);
@@ -1038,8 +1037,8 @@ void model_init_submodel_axis_pt(submodel_instance_info *sii, int model_num, int
10381037
// Given a direction (pnt) that is in sub_model_num's frame of
10391038
// reference, and given the object's orient and position,
10401039
// return the point in 3-space in outpnt.
1041-
extern void model_find_world_dir(vec3d *out_dir, vec3d *in_dir, int model_num, int submodel_num, matrix *objorient, vec3d *objpos);
1042-
extern void model_instance_find_world_dir(vec3d *out_dir, vec3d *in_dir, int model_instance_num, int submodel_num, matrix *objorient, vec3d *objpos);
1040+
extern void model_find_world_dir(vec3d *out_dir, vec3d *in_dir, int model_num, int submodel_num, const matrix *objorient);
1041+
extern void model_instance_find_world_dir(vec3d *out_dir, vec3d *in_dir, int model_instance_num, int submodel_num, const matrix *objorient);
10431042

10441043
// Clears all the submodel instances stored in a model to their defaults.
10451044
extern void model_clear_instance(int model_num);
@@ -1098,8 +1097,8 @@ int submodel_get_num_polys(int model_num, int submodel_num);
10981097
// Given a vector that is in sub_model_num's frame of
10991098
// reference, and given the object's orient and position,
11001099
// return the vector in the model's frame of reference.
1101-
void model_find_obj_dir(vec3d *w_vec, vec3d *m_vec, object *pship_obj, int sub_model_num);
1102-
void model_instance_find_obj_dir(vec3d *w_vec, vec3d *m_vec, object *pship_obj, int sub_model_num);
1100+
void model_find_obj_dir(vec3d *w_vec, vec3d *m_vec, int model_instance_num, int submodel_num, matrix *objorient);
1101+
void model_instance_find_obj_dir(vec3d *w_vec, vec3d *m_vec, int model_instance_num, int submodel_num, matrix *objorient);
11031102

11041103

11051104
// This is the interface to model_check_collision. Rather than passing all these

code/model/modelinterp.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2347,7 +2347,7 @@ void model_render_thrusters(polymodel *pm, int objnum, ship *shipp, matrix *orie
23472347
vm_vec_sub(&loc_offset, &gpt->pnt, &submodel_static_offset);
23482348

23492349
tempv = loc_offset;
2350-
find_submodel_instance_point_normal(&loc_offset, &loc_norm, &Objects[objnum], bank->submodel_num, &tempv, &loc_norm);
2350+
find_submodel_instance_point_normal(&loc_offset, &loc_norm, shipp->model_instance_num, bank->submodel_num, &tempv, &loc_norm);
23512351
}
23522352

23532353
vm_vec_unrotate(&world_pnt, &loc_offset, orient);
@@ -2657,7 +2657,7 @@ void model_render_glow_points_DEPRECATED(polymodel *pm, ship *shipp, matrix *ori
26572657
vm_vec_sub(&loc_offset, &gpt->pnt, &submodel_static_offset);
26582658

26592659
tempv = loc_offset;
2660-
find_submodel_instance_point_normal(&loc_offset, &loc_norm, &Objects[shipp->objnum], bank->submodel_parent, &tempv, &loc_norm);
2660+
find_submodel_instance_point_normal(&loc_offset, &loc_norm, shipp->model_instance_num, bank->submodel_parent, &tempv, &loc_norm);
26612661
}
26622662

26632663
vm_vec_unrotate(&world_pnt, &loc_offset, orient);
@@ -2815,7 +2815,7 @@ void model_render_glow_points_DEPRECATED(polymodel *pm, ship *shipp, matrix *ori
28152815
} else {
28162816
cone_dir_rot = gpo->cone_direction;
28172817
}
2818-
find_submodel_instance_point_normal(&unused, &cone_dir_model, &Objects[shipp->objnum], bank->submodel_parent, &unused, &cone_dir_rot);
2818+
find_submodel_instance_point_normal(&unused, &cone_dir_model, shipp->model_instance_num, bank->submodel_parent, &unused, &cone_dir_rot);
28192819
vm_vec_unrotate(&cone_dir_world, &cone_dir_model, orient);
28202820
vm_vec_rotate(&cone_dir_screen, &cone_dir_world, &Eye_matrix);
28212821
cone_dir_screen.xyz.z = -cone_dir_screen.xyz.z;

0 commit comments

Comments
 (0)