Starbase rotation task retired; minor context fix

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3293 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
avolkov
2009-11-08 06:44:30 +00:00
parent 8f932f7589
commit fd8df23e0f
+40 -46
View File
@@ -254,35 +254,36 @@ DrawShipPiece (MENU_STATE *pMS, COUNT which_piece, COUNT which_slot,
} }
} }
static int static void
rotate_starbase(void *data) rotateStarbase (MENU_STATE *pMS, FRAME AniFrame)
{ {
DWORD TimeIn; static TimeCount NextTime = 0;
STAMP s; TimeCount Now = GetTimeCounter ();
Task task = (Task) data;
//s.origin.x = s.origin.y = 0;
s.origin.x = SAFE_X;
s.origin.y = SAFE_Y + 4;
s.frame = IncFrameIndex (pMenuState->CurFrame);
TimeIn = GetTimeCounter ();
while (!Task_ReadState (task, TASK_EXIT))
{
//CONTEXT OldContext;
LockMutex (GraphicsLock);
DrawStamp (&s);
s.frame = IncFrameIndex (s.frame);
if (s.frame == pMenuState->CurFrame)
s.frame = IncFrameIndex (s.frame);
UnlockMutex (GraphicsLock);
SleepThreadUntil (TimeIn + (ONE_SECOND / 20));
TimeIn = GetTimeCounter ();
}
FinishTask (task); if (AniFrame)
return(0); { // Setup the animation
pMS->flash_frame0 = AniFrame;
pMS->flash_rect0.corner.x = SAFE_X;
pMS->flash_rect0.corner.y = SAFE_Y + 4;
}
if (Now >= NextTime || AniFrame)
{
STAMP s;
NextTime = Now + (ONE_SECOND / 20);
s.origin = pMS->flash_rect0.corner;
s.frame = pMS->flash_frame0;
DrawStamp (&s);
s.frame = IncFrameIndex (s.frame);
if (GetFrameIndex (s.frame) == 0)
{ // Do not redraw the base frame, animation loops to frame 1
s.frame = IncFrameIndex (s.frame);
}
pMS->flash_frame0 = s.frame;
}
} }
BOOLEAN BOOLEAN
@@ -297,8 +298,6 @@ DoStarBase (MENU_STATE *pMS)
if (!pMS->Initialized) if (!pMS->Initialized)
{ {
STAMP s;
LastActivity &= ~CHECK_LOAD; LastActivity &= ~CHECK_LOAD;
pMS->InputFunc = DoStarBase; pMS->InputFunc = DoStarBase;
@@ -319,23 +318,18 @@ DoStarBase (MENU_STATE *pMS)
} }
pMS->Initialized = TRUE; pMS->Initialized = TRUE;
SetContext (ScreenContext);
UnlockMutex (GraphicsLock); UnlockMutex (GraphicsLock);
//s.origin.x = s.origin.y = 0; pMS->CurFrame = CaptureDrawable (LoadGraphic (STARBASE_ANIM));
s.origin.x = SAFE_X;
s.origin.y = SAFE_Y + 4;
s.frame = CaptureDrawable (LoadGraphic (STARBASE_ANIM));
pMS->CurFrame = s.frame;
pMS->hMusic = LoadMusic (STARBASE_MUSIC); pMS->hMusic = LoadMusic (STARBASE_MUSIC);
LockMutex (GraphicsLock); LockMutex (GraphicsLock);
SetContext (ScreenContext);
SetTransitionSource (NULL); SetTransitionSource (NULL);
BatchGraphics (); BatchGraphics ();
SetContextBackGroundColor (BLACK_COLOR); SetContextBackGroundColor (BLACK_COLOR);
ClearDrawable (); ClearDrawable ();
DrawStamp (&s); rotateStarbase (pMS, pMS->CurFrame);
DrawBaseStateStrings ((STARBASE_STATE)~0, pMS->CurState); DrawBaseStateStrings ((STARBASE_STATE)~0, pMS->CurState);
{ {
RECT r; RECT r;
@@ -348,8 +342,6 @@ DoStarBase (MENU_STATE *pMS)
} }
PlayMusic (pMS->hMusic, TRUE, 1); PlayMusic (pMS->hMusic, TRUE, 1);
UnbatchGraphics (); UnbatchGraphics ();
pMS->flash_task = AssignTask (rotate_starbase, 4096,
"rotate starbase");
UnlockMutex (GraphicsLock); UnlockMutex (GraphicsLock);
} }
else if (PulsedInputState.menu[KEY_MENU_SELECT] else if (PulsedInputState.menu[KEY_MENU_SELECT]
@@ -357,11 +349,6 @@ DoStarBase (MENU_STATE *pMS)
|| GET_GAME_STATE (CHMMR_BOMB_STATE) == 2) || GET_GAME_STATE (CHMMR_BOMB_STATE) == 2)
{ {
ExitStarBase: ExitStarBase:
if (pMS->flash_task)
{
ConcludeTask (pMS->flash_task);
pMS->flash_task = 0;
}
DestroyDrawable (ReleaseDrawable (pMS->CurFrame)); DestroyDrawable (ReleaseDrawable (pMS->CurFrame));
pMS->CurFrame = 0; pMS->CurFrame = 0;
StopMusic (); StopMusic ();
@@ -425,14 +412,21 @@ ExitStarBase:
NewState = TALK_COMMANDER; NewState = TALK_COMMANDER;
} }
LockMutex (GraphicsLock);
BatchGraphics ();
SetContext (ScreenContext);
if (NewState != pMS->CurState) if (NewState != pMS->CurState)
{ {
LockMutex (GraphicsLock);
DrawBaseStateStrings (pMS->CurState, NewState); DrawBaseStateStrings (pMS->CurState, NewState);
UnlockMutex (GraphicsLock);
pMS->CurState = NewState; pMS->CurState = NewState;
} }
rotateStarbase (pMS, NULL);
UnbatchGraphics ();
UnlockMutex (GraphicsLock);
SleepThread (ONE_SECOND / 30); SleepThread (ONE_SECOND / 30);
} }