Пример #1
0
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;
	}
}
Пример #2
0
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;
	}
}