static void flashSelectedTeam (MELEE_STATE *pMS) { #define FLASH_RATE (ONE_SECOND / 9) static TimeCount NextTime = 0; static int hilite = 0; TimeCount Now = GetTimeCounter (); if (Now >= NextTime) { CONTEXT OldContext; NextTime = Now + FLASH_RATE; hilite ^= 1; OldContext = SetContext (SpaceContext); SelectFileString (pMS, hilite); SetContext (OldContext); } }
BOOLEAN DoLoadTeam (MELEE_STATE *pMS) { DWORD TimeIn = GetTimeCounter (); /* Cancel any presses of the Pause key. */ GamePaused = FALSE; if (GLOBAL (CurrentActivity) & CHECK_ABORT) return FALSE; SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN | MENU_SOUND_PAGEUP | MENU_SOUND_PAGEDOWN, MENU_SOUND_SELECT); if (!pMS->Initialized) { LockMutex (GraphicsLock); DrawFileStrings (pMS); SelectFileString (pMS, true); pMS->Initialized = TRUE; pMS->InputFunc = DoLoadTeam; UnlockMutex (GraphicsLock); return TRUE; } if (PulsedInputState.menu[KEY_MENU_SELECT] || PulsedInputState.menu[KEY_MENU_CANCEL]) { if (PulsedInputState.menu[KEY_MENU_SELECT]) { // Copy the selected fleet to the player. Melee_LocalChange_team (pMS, pMS->side, pMS->load.view[pMS->load.cur - pMS->load.top]); } pMS->InputFunc = DoMelee; pMS->LastInputTime = GetTimeCounter (); { RECT r; GetFrameRect (SetAbsFrameIndex (MeleeFrame, 28), &r); LockMutex (GraphicsLock); RepairMeleeFrame (&r); UnlockMutex (GraphicsLock); } return TRUE; } { COUNT newTop = pMS->load.top; COUNT newIndex = pMS->load.cur; if (PulsedInputState.menu[KEY_MENU_UP]) { if (newIndex > 0) { newIndex--; if (newIndex < newTop) newTop = (newTop < LOAD_TEAM_VIEW_SIZE) ? 0 : newTop - LOAD_TEAM_VIEW_SIZE; } } else if (PulsedInputState.menu[KEY_MENU_DOWN]) { COUNT numEntries = pMS->load.numIndices + pMS->load.preBuiltCount; if (newIndex + 1 < numEntries) { newIndex++; if (newIndex >= pMS->load.bot) newTop = pMS->load.bot; } } else if (PulsedInputState.menu[KEY_MENU_PAGE_UP]) { newIndex = (newIndex < LOAD_TEAM_VIEW_SIZE) ? 0 : newIndex - LOAD_TEAM_VIEW_SIZE; newTop = (newTop < LOAD_TEAM_VIEW_SIZE) ? 0 : newTop - LOAD_TEAM_VIEW_SIZE; } else if (PulsedInputState.menu[KEY_MENU_PAGE_DOWN]) { COUNT numEntries = pMS->load.numIndices + pMS->load.preBuiltCount; if (newIndex + LOAD_TEAM_VIEW_SIZE < numEntries) { newIndex += LOAD_TEAM_VIEW_SIZE; newTop += LOAD_TEAM_VIEW_SIZE; } else { newIndex = numEntries - 1; if (newTop + LOAD_TEAM_VIEW_SIZE < numEntries && numEntries > LOAD_TEAM_VIEW_SIZE) newTop = numEntries - LOAD_TEAM_VIEW_SIZE; } } if (newIndex != pMS->load.cur) { // The cursor has been moved. LockMutex (GraphicsLock); if (newTop == pMS->load.top) { // The view itself hasn't changed. SelectFileString (pMS, false); } else { // The view is changed. pMS->load.top = newTop; DrawFileStrings (pMS); } pMS->load.cur = newIndex; UnlockMutex (GraphicsLock); } } flashSelectedTeam (pMS); SleepThreadUntil (TimeIn + ONE_SECOND / 30); return TRUE; }