Skip to content

Commit 6583066

Browse files
committed
Don't reset lock rendering timers and switches unless we really need to.
1 parent d8ab39e commit 6583066

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

code/hud/hudlock.cpp

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,10 @@ void HudGaugeLock::initialize()
181181
Lock_gauge_draw_stamp = -1;
182182
Lock_gauge_draw = 0;
183183
Rotate_time_id = 1;
184+
Last_lock_status = false;
185+
186+
Lock_anim.time_elapsed = 0.0f;
187+
Lock_gauge.time_elapsed = 0.0f;
184188

185189
HudGauge::initialize();
186190
}
@@ -195,6 +199,16 @@ void HudGaugeLock::render(float frametime)
195199
object *targetp;
196200
vertex lock_point;
197201

202+
bool locked = Player_ai->current_target_is_locked ? true : false;
203+
bool reset_timers = false;
204+
205+
if ( locked != Last_lock_status ) {
206+
// check if player lock status has changed since the last frame.
207+
reset_timers = true;
208+
}
209+
210+
Last_lock_status = locked;
211+
198212
if (Player_ai->target_objnum == -1) {
199213
return;
200214
}
@@ -248,15 +262,21 @@ void HudGaugeLock::render(float frametime)
248262

249263
// show the rotating triangles if target is locked
250264
renderLockTriangles(sx, sy, frametime);
265+
266+
if ( reset_timers ) {
267+
Lock_gauge.time_elapsed = 0.0f;
268+
}
251269
} else {
252270
const float scaling_factor = (gr_screen.clip_center_x < gr_screen.clip_center_y) ? (gr_screen.clip_center_x / VIRTUAL_FRAME_HALF_WIDTH) : (gr_screen.clip_center_y / VIRTUAL_FRAME_HALF_HEIGHT);
253271
sx = fl2i(lock_point.screen.xyw.x) - fl2i(i2fl(Player->current_target_sx - Players[Player_num].lock_indicator_x) * scaling_factor);
254272
sy = fl2i(lock_point.screen.xyw.y) - fl2i(i2fl(Player->current_target_sy - Players[Player_num].lock_indicator_y) * scaling_factor);
255273
gr_unsize_screen_pos(&sx, &sy);
256274

257-
Lock_gauge_draw_stamp = -1;
258-
Lock_gauge_draw = 0;
259-
Lock_anim.time_elapsed = 0.0f;
275+
if ( reset_timers ) {
276+
Lock_gauge_draw_stamp = -1;
277+
Lock_gauge_draw = 0;
278+
Lock_anim.time_elapsed = 0.0f;
279+
}
260280
}
261281

262282
// show locked indicator
@@ -270,8 +290,7 @@ void HudGaugeLock::render(float frametime)
270290
*/
271291
Lock_gauge.sx = sx - Lock_gauge_half_w;
272292
Lock_gauge.sy = sy - Lock_gauge_half_h;
273-
if(Player_ai->current_target_is_locked){
274-
Lock_gauge.time_elapsed = 0.0f;
293+
if (Player_ai->current_target_is_locked) {
275294
hud_anim_render(&Lock_gauge, 0.0f, 1);
276295
} else {
277296
hud_anim_render(&Lock_gauge, frametime, 1);

code/hud/hudlock.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ class HudGaugeLock: public HudGauge
4343
int Rotate_time_id;
4444
int Lock_gauge_draw_stamp;
4545
int Lock_gauge_draw;
46+
47+
bool Last_lock_status;
4648
public:
4749
HudGaugeLock();
4850
void initBitmaps(char *lock_gauge_fname, char *lock_anim_fname);

0 commit comments

Comments
 (0)