Skip to content

Commit 5c2e5a2

Browse files
authored
Stop select model rendering destroyed subsystems (#7225)
1 parent f23d35c commit 5c2e5a2

6 files changed

Lines changed: 28 additions & 9 deletions

File tree

code/missionui/missionscreencommon.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1663,12 +1663,17 @@ void draw_model_icon(int model_id, uint64_t flags, float closeup_zoom, int x, in
16631663
gr_reset_clip();
16641664
}
16651665

1666-
void draw_model_rotating(model_render_params *render_info, int model_id, int x1, int y1, int x2, int y2, float *rotation_buffer, const vec3d *closeup_pos, float closeup_zoom, float rev_rate, uint64_t flags, int resize_mode, select_effect_params effect_params)
1666+
void draw_model_rotating(model_render_params *render_info, int ship_class, int model_id, int x1, int y1, int x2, int y2, float *rotation_buffer, const vec3d *closeup_pos, float closeup_zoom, float rev_rate, uint64_t flags, int resize_mode, select_effect_params effect_params)
16671667
{
16681668
//WMC - Can't draw a non-model
16691669
if (model_id < 0)
16701670
return;
16711671

1672+
int model_instance = model_create_instance(model_objnum_special::OBJNUM_NONE, model_id);
1673+
if (!(flags & MR_IS_MISSILE) && SCP_vector_inbounds(Ship_info, ship_class)) {
1674+
model_set_up_techroom_instance(&Ship_info[ship_class], model_instance);
1675+
}
1676+
16721677
float time = (timer_get_milliseconds()-anim_timer_start)/1000.0f;
16731678
angles rot_angles, view_angles;
16741679
matrix model_orient;
@@ -1822,7 +1827,7 @@ void draw_model_rotating(model_render_params *render_info, int model_id, int x1,
18221827
shadows_start_render(&Eye_matrix, &Eye_position, Proj_fov, gr_screen.clip_aspect, -closeup_pos->xyz.z + pm->rad, -closeup_pos->xyz.z + pm->rad + 200.0f, -closeup_pos->xyz.z + pm->rad + 2000.0f, -closeup_pos->xyz.z + pm->rad + 10000.0f);
18231828
}
18241829

1825-
model_render_immediate(&shadow_render_info, model_id, &model_orient, &vmd_zero_vector);
1830+
model_render_immediate(&shadow_render_info, model_id, model_instance, &model_orient, &vmd_zero_vector);
18261831
shadows_end_render();
18271832

18281833
gr_set_clip(x1, y1, x2, y2, resize_mode);
@@ -1842,14 +1847,14 @@ void draw_model_rotating(model_render_params *render_info, int model_id, int x1,
18421847

18431848
render_info->set_flags(flags | MR_SHOW_OUTLINE_HTL | MR_NO_POLYS | MR_NO_TEXTURING | MR_NO_LIGHTING);
18441849

1845-
model_render_immediate(render_info, model_id, &model_orient, &vmd_zero_vector);
1850+
model_render_immediate(render_info, model_id, model_instance, &model_orient, &vmd_zero_vector);
18461851
}
18471852

18481853
if (time >= 1.5f) { // Render the ship in Phase 2 onwards
18491854
render_info->set_clip_plane(plane_point,ship_normal);
18501855
render_info->set_flags(flags);
18511856

1852-
model_render_immediate(render_info, model_id, &model_orient, &vmd_zero_vector);
1857+
model_render_immediate(render_info, model_id, model_instance, &model_orient, &vmd_zero_vector);
18531858
}
18541859

18551860
if (time < 2.5f) { // Render the scanline in Phase 1 and 2
@@ -1919,7 +1924,7 @@ void draw_model_rotating(model_render_params *render_info, int model_id, int x1,
19191924
shadow_render_info.set_flags(flags | MR_NO_TEXTURING | MR_NO_LIGHTING);
19201925
shadow_render_info.set_detail_level_lock(0);
19211926

1922-
model_render_immediate(&shadow_render_info, model_id, &model_orient, &vmd_zero_vector);
1927+
model_render_immediate(&shadow_render_info, model_id, model_instance, &model_orient, &vmd_zero_vector);
19231928
shadows_end_render();
19241929
}
19251930

@@ -1937,7 +1942,7 @@ void draw_model_rotating(model_render_params *render_info, int model_id, int x1,
19371942
render_info->set_flags(flags);
19381943
}
19391944

1940-
model_render_immediate(render_info, model_id, &model_orient, &vmd_zero_vector);
1945+
model_render_immediate(render_info, model_id, model_instance, &model_orient, &vmd_zero_vector);
19411946

19421947
batching_render_all();
19431948

@@ -1948,6 +1953,9 @@ void draw_model_rotating(model_render_params *render_info, int model_id, int x1,
19481953
}
19491954

19501955
shadow_end_frame();
1956+
if (model_instance >= 0) {
1957+
model_delete_instance(model_instance);
1958+
}
19511959
}
19521960

19531961
/**

code/missionui/missionscreencommon.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ int restore_wss_data(ubyte *data);
235235

236236
class ship_info;
237237
void draw_model_icon(int model_id, uint64_t flags, float closeup_zoom, int x1, int x2, int y1, int y2, ship_info* sip = NULL, int resize_mode = GR_RESIZE_FULL, const vec3d *closeup_pos = &vmd_zero_vector);
238-
void draw_model_rotating(model_render_params *render_info, int model_id, int x1, int y1, int x2, int y2, float *rotation_buffer, const vec3d *closeup_pos=nullptr, float closeup_zoom = .65f, float rev_rate = REVOLUTION_RATE, uint64_t flags = MR_AUTOCENTER | MR_NO_FOGGING, int resize_mode=GR_RESIZE_FULL, select_effect_params effect_params = select_effect_params{});
238+
void draw_model_rotating(model_render_params *render_info, int ship_class, int model_id, int x1, int y1, int x2, int y2, float *rotation_buffer, const vec3d *closeup_pos=nullptr, float closeup_zoom = .65f, float rev_rate = REVOLUTION_RATE, uint64_t flags = MR_AUTOCENTER | MR_NO_FOGGING, int resize_mode=GR_RESIZE_FULL, select_effect_params effect_params = select_effect_params{});
239239

240240
void common_set_team_pointers(int team);
241241
void common_reset_team_pointers();

code/missionui/missionshipchoice.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,6 +1461,7 @@ void ship_select_do(float frametime)
14611461

14621462
draw_model_rotating(
14631463
&render_info,
1464+
Selected_ss_class,
14641465
ShipSelectModelNum,
14651466
Ship_anim_coords[gr_screen.res][0],
14661467
Ship_anim_coords[gr_screen.res][1],

code/missionui/missionweaponchoice.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -823,6 +823,10 @@ void draw_3d_overhead_view(int model_num,
823823
Glowpoint_use_depth_buffer = false;
824824

825825
model_clear_instance(model_num);
826+
int model_instance = model_create_instance(model_objnum_special::OBJNUM_NONE, model_num);
827+
if (model_instance >= 0) {
828+
model_set_up_techroom_instance(sip, model_instance);
829+
}
826830
polymodel* pm = model_get(model_num);
827831

828832
if (sip->replacement_textures.size() > 0) {
@@ -842,7 +846,7 @@ void draw_3d_overhead_view(int model_num,
842846

843847
render_info.set_flags(MR_NO_TEXTURING | MR_NO_LIGHTING | MR_AUTOCENTER);
844848

845-
model_render_immediate(&render_info, model_num, &object_orient, &vmd_zero_vector);
849+
model_render_immediate(&render_info, model_num, model_instance, &object_orient, &vmd_zero_vector);
846850
shadows_end_render();
847851
gr_set_clip(x1, y1, x2, y2, resize_mode);
848852
}
@@ -857,13 +861,16 @@ void draw_3d_overhead_view(int model_num,
857861
render_info.set_team_color(tc, "none", 0, 0);
858862
}
859863

860-
model_render_immediate(&render_info, model_num, &object_orient, &vmd_zero_vector);
864+
model_render_immediate(&render_info, model_num, model_instance, &object_orient, &vmd_zero_vector);
861865

862866
Glowpoint_use_depth_buffer = true;
863867

864868
batching_render_all();
865869

866870
shadow_end_frame();
871+
if (model_instance >= 0) {
872+
model_delete_instance(model_instance);
873+
}
867874

868875
// NOW render the lines for weapons
869876
gr_reset_clip();
@@ -2832,6 +2839,7 @@ void weapon_select_do(float frametime)
28322839

28332840
model_render_params render_info;
28342841
draw_model_rotating(&render_info,
2842+
-1,
28352843
modelIdx,
28362844
weapon_ani_coords[0],
28372845
weapon_ani_coords[1],

code/scripting/api/objs/shipclass.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,6 +1270,7 @@ ADE_FUNC(renderSelectModel,
12701270
params.fs2_wireframe_color = sip->fs2_effect_wireframe_color;
12711271

12721272
draw_model_rotating(&render_info,
1273+
idx,
12731274
modelNum,
12741275
x1,
12751276
y1,

code/scripting/api/objs/weaponclass.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,6 +1163,7 @@ ADE_FUNC(renderSelectModel,
11631163
params.fs2_wireframe_color = wip->fs2_effect_wireframe_color;
11641164

11651165
draw_model_rotating(&render_info,
1166+
-1,
11661167
modelNum,
11671168
x1,
11681169
y1,

0 commit comments

Comments
 (0)