@@ -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 );
0 commit comments