void HUDAddUpdate( HUD *hud, const HUDNumUpdateType type, const int idx, const int amount) { HUDNumUpdate s; memset(&s, 0, sizeof s); // Index int localPlayerIdx = -1; switch (type) { case NUMBER_UPDATE_SCORE: case NUMBER_UPDATE_HEALTH: // fallthrough case NUMBER_UPDATE_AMMO: // fallthrough localPlayerIdx = FindLocalPlayerIndex(idx); if (localPlayerIdx) { // This update was for a non-local player; abort return; } s.u.PlayerUID = idx; break; case NUMBER_UPDATE_OBJECTIVE: s.u.ObjectiveIndex = idx; break; default: CASSERT(false, "unknown HUD update type"); break; } s.Amount = amount; // Timers switch (type) { case NUMBER_UPDATE_SCORE: case NUMBER_UPDATE_HEALTH: // fallthrough case NUMBER_UPDATE_AMMO: // fallthrough s.Timer = NUM_UPDATE_TIMER_MS; s.TimerMax = NUM_UPDATE_TIMER_MS; break; case NUMBER_UPDATE_OBJECTIVE: s.Timer = NUM_UPDATE_TIMER_OBJECTIVE_MS; s.TimerMax = NUM_UPDATE_TIMER_OBJECTIVE_MS; break; default: CASSERT(false, "unknown HUD update type"); break; } // Merge with existing updates switch (type) { case NUMBER_UPDATE_SCORE: MergeUpdates(&hud->scoreUpdates[localPlayerIdx], s); break; case NUMBER_UPDATE_HEALTH: MergeUpdates(&hud->healthUpdates[localPlayerIdx], s); break; case NUMBER_UPDATE_AMMO: MergeUpdates(&hud->ammoUpdates[localPlayerIdx], s); break; case NUMBER_UPDATE_OBJECTIVE: MergeUpdates(CArrayGet(&hud->objectiveUpdates, s.u.ObjectiveIndex), s); break; default: CASSERT(false, "unknown HUD update type"); break; } }
void HUDNumPopupsAdd( HUDNumPopups *popups, const HUDNumPopupType type, const int idxOrUID, const int amount) { HUDNumPopup s; memset(&s, 0, sizeof s); // Index int localPlayerIdx = -1; switch (type) { case NUMBER_POPUP_SCORE: case NUMBER_POPUP_HEALTH: // fallthrough case NUMBER_POPUP_AMMO: // fallthrough localPlayerIdx = FindLocalPlayerIndex(idxOrUID); if (localPlayerIdx) { // This popup was for a non-local player; abort return; } s.u.PlayerUID = idxOrUID; break; case NUMBER_POPUP_OBJECTIVE: s.u.ObjectiveIndex = idxOrUID; break; default: CASSERT(false, "unknown HUD popup type"); break; } s.Amount = amount; // Timers switch (type) { case NUMBER_POPUP_SCORE: case NUMBER_POPUP_HEALTH: // fallthrough case NUMBER_POPUP_AMMO: // fallthrough s.Timer = TIMER_MS; s.TimerMax = TIMER_MS; break; case NUMBER_POPUP_OBJECTIVE: s.Timer = TIMER_OBJECTIVE_MS; s.TimerMax = TIMER_OBJECTIVE_MS; break; default: CASSERT(false, "unknown HUD popup type"); break; } // Merge with existing popups switch (type) { case NUMBER_POPUP_SCORE: MergePopups(&popups->score[localPlayerIdx], s); break; case NUMBER_POPUP_HEALTH: MergePopups(&popups->health[localPlayerIdx], s); break; case NUMBER_POPUP_AMMO: MergePopups(&popups->ammo[localPlayerIdx], s); break; case NUMBER_POPUP_OBJECTIVE: MergePopups(CArrayGet(&popups->objective, s.u.ObjectiveIndex), s); break; default: CASSERT(false, "unknown HUD popup type"); break; } }