Refactor to propagate MultiLevelInv_Count initial

All callers of MultiLevelInv_Count passed a constant value.  Factor
out the top level blocks of MultiLevelInv_Count into helper functions,
then create two new functions corresponding to MultiLevelInv_Count(0)
and MultiLevelInv_Count(1), implemented by calling the appropriate new
helper functions.
This commit is contained in:
Kp 2016-07-14 01:59:03 +00:00
parent 1d568fa56e
commit 5af44fa27a
3 changed files with 22 additions and 12 deletions

View file

@ -735,7 +735,8 @@ extern struct netgame_info Netgame;
void change_playernum_to(int new_pnum); void change_playernum_to(int new_pnum);
// Multiplayer powerup capping // Multiplayer powerup capping
extern void MultiLevelInv_Count(bool initial); void MultiLevelInv_InitializeCount();
void MultiLevelInv_Recount();
extern bool MultiLevelInv_AllowSpawn(powerup_type_t powerup_type); extern bool MultiLevelInv_AllowSpawn(powerup_type_t powerup_type);
extern void MultiLevelInv_Repopulate(fix frequency); extern void MultiLevelInv_Repopulate(fix frequency);
#ifdef dsx #ifdef dsx

View file

@ -610,7 +610,7 @@ void maybe_drop_net_powerup(powerup_type_t powerup_type, bool adjust_cap, bool r
if ((Game_mode & GM_MULTI) && !(Game_mode & GM_MULTI_COOP)) { if ((Game_mode & GM_MULTI) && !(Game_mode & GM_MULTI_COOP)) {
if ((Game_mode & GM_NETWORK) && adjust_cap) if ((Game_mode & GM_NETWORK) && adjust_cap)
{ {
MultiLevelInv_Count(0); // recount current items MultiLevelInv_Recount(); // recount current items
if (!MultiLevelInv_AllowSpawn(powerup_type)) if (!MultiLevelInv_AllowSpawn(powerup_type))
return; return;
} }

View file

@ -3316,7 +3316,7 @@ void multi_prep_level_objects()
} }
// After everything is done, count initial level inventory. // After everything is done, count initial level inventory.
MultiLevelInv_Count(1); MultiLevelInv_InitializeCount();
} }
void multi_prep_level_player(void) void multi_prep_level_player(void)
@ -4909,12 +4909,10 @@ static void multi_do_player_inventory(const playernum_t pnum, const ubyte *buf)
* In 'current', also consider player inventories (and the thief bot). * In 'current', also consider player inventories (and the thief bot).
* NOTE: We add actual ammo amount - we do not want to count in 'amount of powerups'. Makes it easier to keep track of overhead (proximities, vulcan ammo) * NOTE: We add actual ammo amount - we do not want to count in 'amount of powerups'. Makes it easier to keep track of overhead (proximities, vulcan ammo)
*/ */
void MultiLevelInv_Count(bool initial) static void MultiLevelInv_CountLevelPowerups()
{ {
if (!(Game_mode & GM_MULTI) || (Game_mode & GM_MULTI_COOP)) if (!(Game_mode & GM_MULTI) || (Game_mode & GM_MULTI_COOP))
return; return;
if (initial)
MultiLevelInv = {};
MultiLevelInv.Current = {}; MultiLevelInv.Current = {};
range_for (const auto &&objp, vobjptridx) range_for (const auto &&objp, vobjptridx)
@ -4992,11 +4990,10 @@ void MultiLevelInv_Count(bool initial)
break; // All other items either do not exist or we NEVER want to have them respawn. break; // All other items either do not exist or we NEVER want to have them respawn.
} }
} }
}
if (initial) // Copy current to initial static void MultiLevelInv_CountPlayerInventory()
MultiLevelInv.Initial = MultiLevelInv.Current; {
else // Add player inventories to current
{
for (playernum_t i = 0; i < MAX_PLAYERS; i++) for (playernum_t i = 0; i < MAX_PLAYERS; i++)
{ {
if (Players[i].connected != CONNECT_PLAYING) if (Players[i].connected != CONNECT_PLAYING)
@ -5096,7 +5093,19 @@ void MultiLevelInv_Count(bool initial)
} }
} }
#endif #endif
} }
void MultiLevelInv_InitializeCount()
{
MultiLevelInv = {};
MultiLevelInv_CountLevelPowerups();
MultiLevelInv.Initial = MultiLevelInv.Current;
}
void MultiLevelInv_Recount()
{
MultiLevelInv_CountLevelPowerups();
MultiLevelInv_CountPlayerInventory();
} }
// Takes a powerup type and checks if we are allowed to spawn it. // Takes a powerup type and checks if we are allowed to spawn it.
@ -5129,7 +5138,7 @@ void MultiLevelInv_Repopulate(fix frequency)
if (!multi_i_am_master() || (Game_mode & GM_MULTI_COOP) || Control_center_destroyed || (Network_status == NETSTAT_ENDLEVEL)) if (!multi_i_am_master() || (Game_mode & GM_MULTI_COOP) || Control_center_destroyed || (Network_status == NETSTAT_ENDLEVEL))
return; return;
MultiLevelInv_Count(0); // recount current items MultiLevelInv_Recount(); // recount current items
for (unsigned i = 0; i < MAX_POWERUP_TYPES; i++) for (unsigned i = 0; i < MAX_POWERUP_TYPES; i++)
{ {
if (MultiLevelInv_AllowSpawn((powerup_type_t)i)) if (MultiLevelInv_AllowSpawn((powerup_type_t)i))