// called when a shield quadrant is struct, so we can update the timer that will draw the quadrant // as flashing // // input: // objp => object pointer for ship that has been hit // quadrant => quadrant of shield getting hit (-1 if no shield is present) void hud_shield_quadrant_hit(object* objp, int quadrant) { shield_hit_info* shi; int num; if (objp->type != OBJ_SHIP) return; hud_escort_ship_hit(objp, quadrant); hud_gauge_popup_start(HUD_TARGET_MINI_ICON); if (OBJ_INDEX(objp) == Player_ai->target_objnum) { shi = &Shield_hit_data[SHIELD_HIT_TARGET]; } else if (objp == Player_obj) { shi = &Shield_hit_data[SHIELD_HIT_PLAYER]; } else { return; } if (quadrant >= 0) { num = Quadrant_xlate[quadrant]; shi->shield_hit_timers[num] = timestamp(300); } else { shi->shield_hit_timers[HULL_HIT_OFFSET] = timestamp(SHIELD_HIT_DURATION_SHORT); hud_targetbox_start_flash(TBOX_FLASH_HULL); } }
// called when a shield quadrant is struct, so we can update the timer that will draw the quadrant // as flashing // // input: // objp => object pointer for ship that has been hit // quadrant => quadrant of shield getting hit (-1 if no shield is present) void hud_shield_quadrant_hit(object *objp, int quadrant) { shield_hit_info *shi; int num; if (Game_mode & GM_STANDALONE_SERVER) return; Assertion(objp != NULL, "hud_shield_quadrant_hit() called with a NULL objp; get a coder!\n"); if ( objp->type != OBJ_SHIP ) return; hud_escort_ship_hit(objp, quadrant); hud_gauge_popup_start(HUD_TARGET_MINI_ICON); if ( OBJ_INDEX(objp) == Player_ai->target_objnum ) { shi = &Shield_hit_data[SHIELD_HIT_TARGET]; } else if ( objp == Player_obj ) { shi = &Shield_hit_data[SHIELD_HIT_PLAYER]; } else { return; } Assertion(!shi->shield_hit_timers.empty(), "Shield hit info object for object '%s' has a size " SIZE_T_ARG " shield_hit_timers; get a coder!\n", Ships[objp->instance].ship_name, shi->shield_hit_timers.size()); Assertion(shi->hull_hit_index < (int) shi->shield_hit_timers.size(), "Shield hit info object for object '%s' has a hull_hit_index of %d (should be between 0 and " SIZE_T_ARG "); get a coder!\n", Ships[objp->instance].ship_name, shi->hull_hit_index, shi->shield_hit_timers.size() - 1); if ( quadrant >= 0 ) { if ( !(Ship_info[Ships[objp->instance].ship_info_index].flags[Ship::Info_Flags::Model_point_shields]) ) num = Quadrant_xlate[quadrant]; else num = quadrant; Assertion(num < shi->hull_hit_index, "Shield hit info object for object '%s' hit on quadrant #%d, despite having a hull_hit_index of %d; get a coder!\n", Ships[objp->instance].ship_name, num, shi->hull_hit_index); shi->shield_hit_timers[num] = timestamp(SHIELD_HIT_DURATION_SHORT); } else { shi->shield_hit_timers[shi->hull_hit_index] = timestamp(SHIELD_HIT_DURATION_SHORT); hud_targetbox_start_flash(TBOX_FLASH_HULL); } }