From d877ed58f13fadf18edb4d62cb6dba3eeda80648 Mon Sep 17 00:00:00 2001 From: avolkov Date: Wed, 1 Jul 2009 00:25:39 +0000 Subject: [PATCH] Added missing sleeps in DoInput() functions; bug #893. Random minor cleanups git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3164 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/ChangeLog | 1 + sc2/src/sc2code/comm.c | 3 ++ sc2/src/sc2code/gameopt.c | 3 ++ sc2/src/sc2code/getchar.c | 2 + sc2/src/sc2code/libs/video/vidplayer.c | 4 ++ sc2/src/sc2code/loadmele.c | 4 ++ sc2/src/sc2code/melee.c | 62 ++++++++++++++++---------- sc2/src/sc2code/menu.c | 1 + sc2/src/sc2code/outfit.c | 3 ++ sc2/src/sc2code/pickship.c | 2 + sc2/src/sc2code/planets/cargo.c | 13 ++++-- sc2/src/sc2code/planets/devices.c | 12 +++-- sc2/src/sc2code/planets/pstarmap.c | 5 +++ sc2/src/sc2code/planets/roster.c | 2 + sc2/src/sc2code/planets/scan.c | 7 ++- sc2/src/sc2code/restart.c | 25 ++++++----- sc2/src/sc2code/shipyard.c | 2 + sc2/src/sc2code/starbase.c | 2 + 18 files changed, 107 insertions(+), 46 deletions(-) diff --git a/sc2/ChangeLog b/sc2/ChangeLog index d22ebc289..49a866fe3 100644 --- a/sc2/ChangeLog +++ b/sc2/ChangeLog @@ -1,4 +1,5 @@ Changes towards version 0.7: +- Added missing sleeps in DoInput() functions (bug #893) - Alex - Starmap unit conversion corrections; fixes bug #970 - Alex - Rounding-error correction in log(x|y)ToUniverse (bug #1046), from Nic - Change hardcoded Starbase and Sa-Matra values to pretty enum values diff --git a/sc2/src/sc2code/comm.c b/sc2/src/sc2code/comm.c index c92931a17..aab24d644 100644 --- a/sc2/src/sc2code/comm.c +++ b/sc2/src/sc2code/comm.c @@ -1077,6 +1077,7 @@ static void PlayerResponseInput (ENCOUNTER_STATE *pES) { BYTE response; + DWORD TimeIn = GetTimeCounter (); if (pES->top_response == (BYTE)~0) { @@ -1152,6 +1153,8 @@ PlayerResponseInput (ENCOUNTER_STATE *pES) UnbatchGraphics (); UnlockMutex (GraphicsLock); } + + SleepThreadUntil (TimeIn + ONE_SECOND / 20); } } diff --git a/sc2/src/sc2code/gameopt.c b/sc2/src/sc2code/gameopt.c index 36ece99c2..fb4338a42 100644 --- a/sc2/src/sc2code/gameopt.c +++ b/sc2/src/sc2code/gameopt.c @@ -915,6 +915,7 @@ DoPickGame (MENU_STATE *pMS) BYTE NewState; SUMMARY_DESC *pSD; BOOLEAN first_time; + DWORD TimeIn = GetTimeCounter (); if (GLOBAL (CurrentActivity) & CHECK_ABORT) { @@ -1185,6 +1186,8 @@ ChangeGameSelection: SetFlashRect (NULL, (FRAME)0); UnlockMutex (GraphicsLock); } + + SleepThreadUntil (TimeIn + ONE_SECOND / 30); } return (TRUE); diff --git a/sc2/src/sc2code/getchar.c b/sc2/src/sc2code/getchar.c index c8bc0d414..9ad64d542 100644 --- a/sc2/src/sc2code/getchar.c +++ b/sc2/src/sc2code/getchar.c @@ -419,6 +419,8 @@ DoTextEntry (TEXTENTRY_STATE *pTES) if (pTES->FrameCallback) return pTES->FrameCallback (pTES); + else + SleepThread (ONE_SECOND / 30); return TRUE; } diff --git a/sc2/src/sc2code/libs/video/vidplayer.c b/sc2/src/sc2code/libs/video/vidplayer.c index b60eb3755..f9f936e83 100644 --- a/sc2/src/sc2code/libs/video/vidplayer.c +++ b/sc2/src/sc2code/libs/video/vidplayer.c @@ -453,6 +453,10 @@ TFB_DoVideoInput (void *pIS) } // non a/s decoder seeking is not supported yet } + else + { + SleepThread (ONE_SECOND / 30); + } return TRUE; } diff --git a/sc2/src/sc2code/loadmele.c b/sc2/src/sc2code/loadmele.c index 3c04e4899..5b4cef519 100644 --- a/sc2/src/sc2code/loadmele.c +++ b/sc2/src/sc2code/loadmele.c @@ -328,6 +328,8 @@ RefocusView (MELEE_STATE *pMS, COUNT index) BOOLEAN DoLoadTeam (MELEE_STATE *pMS) { + DWORD TimeIn = GetTimeCounter (); + if (GLOBAL (CurrentActivity) & CHECK_ABORT) return FALSE; @@ -434,6 +436,8 @@ DoLoadTeam (MELEE_STATE *pMS) } } + SleepThreadUntil (TimeIn + ONE_SECOND / 30); + return TRUE; } diff --git a/sc2/src/sc2code/melee.c b/sc2/src/sc2code/melee.c index 9a7390ef5..57ae43c72 100644 --- a/sc2/src/sc2code/melee.c +++ b/sc2/src/sc2code/melee.c @@ -188,7 +188,7 @@ FRAME MeleeFrame; // Loaded from melee/melebkgd.ani static FRAME BuildPickFrame; // Constructed. -DWORD InTime; +DWORD LastInputTime; MELEE_STATE *pMeleeState; BOOLEAN DoMelee (MELEE_STATE *pMS); @@ -1014,9 +1014,11 @@ DeleteCurrentShip (MELEE_STATE *pMS) static void AdvanceCursor (MELEE_STATE *pMS) { - if (++pMS->col == NUM_MELEE_COLUMNS) + ++pMS->col; + if (pMS->col == NUM_MELEE_COLUMNS) { - if (++pMS->row < NUM_MELEE_ROWS) + ++pMS->row; + if (pMS->row < NUM_MELEE_ROWS) pMS->col = 0; else { @@ -1047,8 +1049,11 @@ OnTeamNameChange (TEXTENTRY_STATE *pTES) static BOOLEAN DoEdit (MELEE_STATE *pMS) { + DWORD TimeIn = GetTimeCounter (); + if (GLOBAL (CurrentActivity) & CHECK_ABORT) return (FALSE); + SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT | MENU_SOUND_DELETE); if (!pMS->Initialized) { @@ -1078,7 +1083,7 @@ DoEdit (MELEE_STATE *pMS) pMS->MeleeOption = START_MELEE; pMS->InputFunc = DoMelee; UnlockMutex (GraphicsLock); - InTime = GetTimeCounter (); + LastInputTime = GetTimeCounter (); } else if (pMS->row < NUM_MELEE_ROWS && (PulsedInputState.menu[KEY_MENU_SELECT] || @@ -1151,13 +1156,13 @@ DoEdit (MELEE_STATE *pMS) { if (PulsedInputState.menu[KEY_MENU_LEFT]) { - if (col-- == 0) - col = 0; + if (col > 0) + --col; } else if (PulsedInputState.menu[KEY_MENU_RIGHT]) { - if (++col == NUM_MELEE_COLUMNS) - col = NUM_MELEE_COLUMNS - 1; + if (col < NUM_MELEE_COLUMNS - 1) + ++col; } if (PulsedInputState.menu[KEY_MENU_UP]) @@ -1205,6 +1210,8 @@ DoEdit (MELEE_STATE *pMS) flushPacketQueues (); #endif + SleepThreadUntil (TimeIn + ONE_SECOND / 30); + return (TRUE); } @@ -1212,6 +1219,8 @@ DoEdit (MELEE_STATE *pMS) static BOOLEAN DoPickShip (MELEE_STATE *pMS) { + DWORD TimeIn = GetTimeCounter (); + if (GLOBAL (CurrentActivity) & CHECK_ABORT) return (FALSE); @@ -1302,12 +1311,14 @@ DoPickShip (MELEE_STATE *pMS) if (PulsedInputState.menu[KEY_MENU_LEFT]) { - if (NewStarShip-- % NUM_PICK_COLS == 0) + if (NewStarShip % NUM_PICK_COLS == 0) NewStarShip += NUM_PICK_COLS; + --NewStarShip; } else if (PulsedInputState.menu[KEY_MENU_RIGHT]) { - if (++NewStarShip % NUM_PICK_COLS == 0) + ++NewStarShip; + if (NewStarShip % NUM_PICK_COLS == 0) NewStarShip -= NUM_PICK_COLS; } @@ -1336,6 +1347,8 @@ DoPickShip (MELEE_STATE *pMS) } } + SleepThreadUntil (TimeIn + ONE_SECOND / 30); + return (TRUE); } @@ -1836,6 +1849,7 @@ StartMeleeButtonPressed (MELEE_STATE *pMS) static BOOLEAN DoConnectingDialog (MELEE_STATE *pMS) { + DWORD TimeIn = GetTimeCounter (); COUNT which_side = (pMS->MeleeOption == NET_TOP) ? 1 : 0; NetConnection *conn; @@ -1947,7 +1961,7 @@ DoConnectingDialog (MELEE_STATE *pMS) flushPacketQueues (); - SleepThread (30); + SleepThreadUntil (TimeIn + ONE_SECOND / 30); return TRUE; } @@ -2021,6 +2035,8 @@ nextControlType (COUNT which_side) BOOLEAN DoMelee (MELEE_STATE *pMS) { + DWORD TimeIn = GetTimeCounter (); + BOOLEAN force_select = FALSE; if (GLOBAL (CurrentActivity) & CHECK_ABORT) return (FALSE); @@ -2047,7 +2063,7 @@ DoMelee (MELEE_STATE *pMS) XFormColorMap ((COLORMAPPTR)clut_buf, ONE_SECOND / 2); } - InTime = GetTimeCounter (); + LastInputTime = GetTimeCounter (); return TRUE; } @@ -2060,7 +2076,7 @@ DoMelee (MELEE_STATE *pMS) { // Start editing the teams. LockMutex (GraphicsLock); - InTime = GetTimeCounter (); + LastInputTime = GetTimeCounter (); Deselect (pMS->MeleeOption); UnlockMutex (GraphicsLock); pMS->MeleeOption = EDIT_MELEE; @@ -2086,19 +2102,19 @@ DoMelee (MELEE_STATE *pMS) NewMeleeOption = pMS->MeleeOption; if (PulsedInputState.menu[KEY_MENU_UP]) { - InTime = GetTimeCounter (); - if (NewMeleeOption-- == TOP_ENTRY) - NewMeleeOption = TOP_ENTRY; + LastInputTime = GetTimeCounter (); + if (NewMeleeOption != TOP_ENTRY) + --NewMeleeOption; } else if (PulsedInputState.menu[KEY_MENU_DOWN]) { - InTime = GetTimeCounter (); - if (NewMeleeOption++ == QUIT_BOT) - NewMeleeOption = QUIT_BOT; + LastInputTime = GetTimeCounter (); + if (NewMeleeOption != QUIT_BOT) + ++NewMeleeOption; } if ((PlayerControl[0] & PlayerControl[1] & PSYTRON_CONTROL) - && GetTimeCounter () - InTime > ONE_SECOND * 10) + && GetTimeCounter () - LastInputTime > ONE_SECOND * 10) { force_select = TRUE; NewMeleeOption = START_MELEE; @@ -2143,7 +2159,7 @@ DoMelee (MELEE_STATE *pMS) pMS->Initialized = FALSE; pMS->side = pMS->MeleeOption == LOAD_TOP ? 0 : 1; DoLoadTeam (pMS); - InTime = GetTimeCounter (); + LastInputTime = GetTimeCounter (); break; case SAVE_TOP: case SAVE_BOT: @@ -2208,6 +2224,8 @@ DoMelee (MELEE_STATE *pMS) check_for_disconnections (pMS); #endif + SleepThreadUntil (TimeIn + ONE_SECOND / 30); + return (TRUE); } @@ -2695,5 +2713,3 @@ closeFeedback (NetConnection *conn) #endif /* NETPLAY */ - - diff --git a/sc2/src/sc2code/menu.c b/sc2/src/sc2code/menu.c index d34865494..d8fa37336 100644 --- a/sc2/src/sc2code/menu.c +++ b/sc2/src/sc2code/menu.c @@ -446,6 +446,7 @@ DoMenuChooser (MENU_STATE *pMS, BYTE BaseState) if (useAltMenu) NewState = ConvertAlternateMenu (BaseState, NewState); pMS->CurState = NewState; + SleepThread (ONE_SECOND / 20); return (TRUE); } } diff --git a/sc2/src/sc2code/outfit.c b/sc2/src/sc2code/outfit.c index ddb961fe4..fc664ff26 100644 --- a/sc2/src/sc2code/outfit.c +++ b/sc2/src/sc2code/outfit.c @@ -801,7 +801,10 @@ ExitOutfit: } if (pMS->CurState == OUTFIT_DOFUEL) + { ChangeFuelQuantity (); + SleepThread (ONE_SECOND / 30); + } else DoMenuChooser (pMS, PM_FUEL); } diff --git a/sc2/src/sc2code/pickship.c b/sc2/src/sc2code/pickship.c index ca2a5357e..3824acd72 100644 --- a/sc2/src/sc2code/pickship.c +++ b/sc2/src/sc2code/pickship.c @@ -239,6 +239,8 @@ ChangeSelection: } } + SleepThread (ONE_SECOND / 30); + return (TRUE); } diff --git a/sc2/src/sc2code/planets/cargo.c b/sc2/src/sc2code/planets/cargo.c index a37a08e92..dedf700b3 100644 --- a/sc2/src/sc2code/planets/cargo.c +++ b/sc2/src/sc2code/planets/cargo.c @@ -340,16 +340,19 @@ DoDiscardCargo (MENU_STATE *pMS) NewState = pMS->CurState - 1; if (back) { - if (NewState-- == 0) - NewState = NUM_ELEMENT_CATEGORIES - 1; + if (NewState == 0) + NewState += NUM_ELEMENT_CATEGORIES; + --NewState; } else if (forward) { - if (++NewState == NUM_ELEMENT_CATEGORIES) + ++NewState; + if (NewState == NUM_ELEMENT_CATEGORIES) NewState = 0; } - if (++NewState != pMS->CurState) + ++NewState; + if (NewState != pMS->CurState) { SelectCargo: DrawCargoStrings ((BYTE)(pMS->CurState - 1), (BYTE)(NewState - 1)); @@ -361,6 +364,8 @@ SelectCargo: } } + SleepThread (ONE_SECOND / 30); + return (TRUE); } diff --git a/sc2/src/sc2code/planets/devices.c b/sc2/src/sc2code/planets/devices.c index 72169276b..8a826ad4e 100644 --- a/sc2/src/sc2code/planets/devices.c +++ b/sc2/src/sc2code/planets/devices.c @@ -496,22 +496,24 @@ DoManipulateDevices (MENU_STATE *pMS) NewState = pMS->CurState - 1; if (back) { - if (NewState-- == 0) - NewState = 0; + if (NewState > 0) + --NewState; if ((SIZE)NewState < NewTop && (NewTop -= MAX_VIS_DEVICES) < 0) NewTop = 0; } else if (forward) { - if (++NewState == (BYTE)pMS->first_item.x) + ++NewState; + if (NewState == (BYTE)pMS->first_item.x) NewState = (BYTE)(pMS->first_item.x - 1); if (NewState >= NewTop + MAX_VIS_DEVICES) NewTop = NewState; } - if (++NewState != pMS->CurState) + ++NewState; + if (NewState != pMS->CurState) { if (NewTop != pMS->first_item.y) { @@ -522,6 +524,8 @@ SelectDevice: DrawDevices (pMS, (BYTE)(pMS->CurState - 1), (BYTE)(NewState - 1)); pMS->CurState = NewState; } + + SleepThread (ONE_SECOND / 30); } return (TRUE); diff --git a/sc2/src/sc2code/planets/pstarmap.c b/sc2/src/sc2code/planets/pstarmap.c index ebe75b92a..ece53a227 100644 --- a/sc2/src/sc2code/planets/pstarmap.c +++ b/sc2/src/sc2code/planets/pstarmap.c @@ -1174,6 +1174,8 @@ OnStarNameFrame (TEXTENTRY_STATE *pTES) DrawMatchedStarName (pTES); UpdateFuelRequirement (pMS); } + + SleepThread (ONE_SECOND / 30); return TRUE; } @@ -1229,6 +1231,7 @@ DoMoveCursor (MENU_STATE *pMS) #define MAX_ACCEL_DELAY (ONE_SECOND / 8) #define STEP_ACCEL_DELAY (ONE_SECOND / 120) static UNICODE last_buf[CURSOR_INFO_BUFSIZE]; + DWORD TimeIn = GetTimeCounter (); pMS->MenuRepeatDelay = (COUNT)pMS->CurState; if (!pMS->Initialized) @@ -1339,6 +1342,8 @@ DoMoveCursor (MENU_STATE *pMS) UpdateCursorInfo (pMS, last_buf); UpdateFuelRequirement (pMS); } + + SleepThreadUntil (TimeIn + MIN_ACCEL_DELAY); } { diff --git a/sc2/src/sc2code/planets/roster.c b/sc2/src/sc2code/planets/roster.c index 96ecc7f41..42772631f 100644 --- a/sc2/src/sc2code/planets/roster.c +++ b/sc2/src/sc2code/planets/roster.c @@ -362,6 +362,8 @@ SelectSupport: "flash roster menu"); } + SleepThread (ONE_SECOND / 30); + return TRUE; } diff --git a/sc2/src/sc2code/planets/scan.c b/sc2/src/sc2code/planets/scan.c index cefbaa4b8..c3dca93b4 100644 --- a/sc2/src/sc2code/planets/scan.c +++ b/sc2/src/sc2code/planets/scan.c @@ -668,6 +668,7 @@ static BOOLEAN DoScan (MENU_STATE *pMS); static BOOLEAN PickPlanetSide (MENU_STATE *pMS) { + DWORD TimeIn = GetTimeCounter (); BOOLEAN select, cancel; select = PulsedInputState.menu[KEY_MENU_SELECT]; cancel = PulsedInputState.menu[KEY_MENU_CANCEL]; @@ -844,12 +845,10 @@ ExitPlanetSide: if (new_pt.x != pSolarSysState->MenuState.first_item.x || new_pt.y != pSolarSysState->MenuState.first_item.y) { - DWORD TimeIn; - - TimeIn = GetTimeCounter (); SetPlanetLoc (new_pt); - SleepThreadUntil (TimeIn + ONE_SECOND / 40); } + + SleepThreadUntil (TimeIn + ONE_SECOND / 40); } return (TRUE); diff --git a/sc2/src/sc2code/restart.c b/sc2/src/sc2code/restart.c index c1b6a8659..e81de6b83 100644 --- a/sc2/src/sc2code/restart.c +++ b/sc2/src/sc2code/restart.c @@ -114,8 +114,9 @@ DrawRestartMenu (BYTE OldState, BYTE NewState, FRAME f) static BOOLEAN DoRestart (MENU_STATE *pMS) { - static DWORD InTime; + static DWORD LastInputTime; static DWORD InactTimeOut; + DWORD TimeIn = GetTimeCounter (); /* Cancel any presses of the Pause key. */ GamePaused = FALSE; @@ -158,15 +159,15 @@ DoRestart (MENU_STATE *pMS) PulsedInputState.menu[KEY_MENU_SELECT] || MouseButtonDown)) { - if (GetTimeCounter () - InTime < InactTimeOut) - return (TRUE); + if (GetTimeCounter () - LastInputTime > InactTimeOut) + { + SleepThreadUntil (FadeMusic (0, ONE_SECOND)); + StopMusic (); + FadeMusic (NORMAL_VOLUME, 0); - SleepThreadUntil (FadeMusic (0, ONE_SECOND)); - StopMusic (); - FadeMusic (NORMAL_VOLUME, 0); - - GLOBAL (CurrentActivity) = (ACTIVITY)~0; - return (FALSE); + GLOBAL (CurrentActivity) = (ACTIVITY)~0; + return (FALSE); + } } else if (PulsedInputState.menu[KEY_MENU_SELECT]) { @@ -192,7 +193,7 @@ DoRestart (MENU_STATE *pMS) SetupMenu (); SetMenuSounds (MENU_SOUND_UP | MENU_SOUND_DOWN, MENU_SOUND_SELECT); - InTime = GetTimeCounter (); + LastInputTime = GetTimeCounter (); SetTransitionSource (NULL); BatchGraphics (); DrawRestartMenuGraphic (pMS); @@ -255,7 +256,9 @@ DoRestart (MENU_STATE *pMS) UnbatchGraphics (); } - InTime = GetTimeCounter (); + LastInputTime = GetTimeCounter (); + SleepThreadUntil (TimeIn + ONE_SECOND / 30); + return (TRUE); } diff --git a/sc2/src/sc2code/shipyard.c b/sc2/src/sc2code/shipyard.c index b6f9d5a16..20bbd4b0a 100644 --- a/sc2/src/sc2code/shipyard.c +++ b/sc2/src/sc2code/shipyard.c @@ -1064,6 +1064,8 @@ ChangeFlashRect: } } + SleepThread (ONE_SECOND / 30); + return TRUE; } diff --git a/sc2/src/sc2code/starbase.c b/sc2/src/sc2code/starbase.c index a279448b9..e5bd63bef 100644 --- a/sc2/src/sc2code/starbase.c +++ b/sc2/src/sc2code/starbase.c @@ -433,6 +433,8 @@ ExitStarBase: UnlockMutex (GraphicsLock); pMS->CurState = NewState; } + + SleepThread (ONE_SECOND / 30); } return (TRUE);