Simplify weapon sufficiency logic

This commit is contained in:
Kp 2013-09-21 21:29:58 +00:00
parent 8df7e8c6b4
commit 7aef24071c
2 changed files with 28 additions and 6 deletions

View file

@ -1048,6 +1048,16 @@ fix64 Last_laser_fired_time = 0;
extern int Player_fired_laser_this_frame;
static inline int sufficient_energy(int energy_used, fix energy)
{
return !energy_used || (energy >= energy_used);
}
static inline int sufficient_ammo(int ammo_used, int uses_vulcan_ammo, ushort vulcan_ammo)
{
return !ammo_used || (!uses_vulcan_ammo || vulcan_ammo >= ammo_used);
}
// --------------------------------------------------------------------------------------------------
// Assumption: This is only called by the actual console player, not for
// network players
@ -1073,8 +1083,10 @@ int do_laser_firing_player(void)
ammo_used = Weapon_info[weapon_index].ammo_usage;
int uses_vulcan_ammo = weapon_index_uses_vulcan_ammo(Primary_weapon);
while (Next_laser_fire_time <= GameTime64) {
if ((plp->energy >= energy_used) || (weapon_index_uses_vulcan_ammo(Primary_weapon) && (plp->vulcan_ammo >= ammo_used)) ) {
if (sufficient_energy(energy_used, plp->energy) && sufficient_ammo(ammo_used, uses_vulcan_ammo, plp->vulcan_ammo)) {
int laser_level, flags, fire_frame_overhead = 0;
if (GameTime64 - Next_laser_fire_time <= FrameTime) // if firing is prolonged by FrameTime overhead, let's try to fix that.

View file

@ -1500,6 +1500,16 @@ fix64 Last_laser_fired_time = 0;
extern int Player_fired_laser_this_frame;
static inline int sufficient_energy(int energy_used, fix energy)
{
return !energy_used || (energy >= energy_used);
}
static inline int sufficient_ammo(int ammo_used, int uses_vulcan_ammo, ushort vulcan_ammo)
{
return !ammo_used || (!uses_vulcan_ammo || vulcan_ammo >= ammo_used);
}
// --------------------------------------------------------------------------------------------------
// Assumption: This is only called by the actual console player, not for network players
@ -1507,7 +1517,7 @@ int do_laser_firing_player(void)
{
player *plp = &Players[Player_num];
fix energy_used;
int ammo_used,primary_ammo;
int ammo_used;
int weapon_index;
int rval = 0;
int nfires = 1;
@ -1531,13 +1541,13 @@ int do_laser_firing_player(void)
if (Game_mode & GM_MULTI)
energy_used *= 2;
primary_ammo = (weapon_index_uses_vulcan_ammo(Primary_weapon))?(plp->vulcan_ammo):0;
int uses_vulcan_ammo = weapon_index_uses_vulcan_ammo(Primary_weapon);
if (!((plp->energy >= energy_used) && (primary_ammo >= ammo_used)))
if (!(sufficient_energy(energy_used, plp->energy) && sufficient_ammo(ammo_used, uses_vulcan_ammo, plp->vulcan_ammo)))
auto_select_weapon(0); // Make sure the player can fire from this weapon.
while (Next_laser_fire_time <= GameTime64) {
if ((plp->energy >= energy_used) && (primary_ammo >= ammo_used)) {
if (sufficient_energy(energy_used, plp->energy) && sufficient_ammo(ammo_used, uses_vulcan_ammo, plp->vulcan_ammo)) {
int laser_level, flags, fire_frame_overhead = 0;
if (GameTime64 - Next_laser_fire_time <= FrameTime) // if firing is prolonged by FrameTime overhead, let's try to fix that.
@ -1574,7 +1584,7 @@ int do_laser_firing_player(void)
if (plp->energy < 0)
plp->energy = 0;
if (weapon_index_uses_vulcan_ammo(Primary_weapon)) {
if (uses_vulcan_ammo) {
if (ammo_used > plp->vulcan_ammo)
plp->vulcan_ammo = 0;
else