Roster flash ship task retired; some roster cleanups
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3292 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
@@ -39,49 +39,62 @@ static const POINT ship_pos[MAX_COMBAT_SHIPS] =
|
|||||||
// escort positions.
|
// escort positions.
|
||||||
static POINT sorted_ship_pos[MAX_COMBAT_SHIPS];
|
static POINT sorted_ship_pos[MAX_COMBAT_SHIPS];
|
||||||
|
|
||||||
|
static SHIP_FRAGMENT* LockSupportShip (MENU_STATE *pMS, HSHIPFRAG *phFrag);
|
||||||
|
|
||||||
static int
|
static void
|
||||||
flash_ship_task (void *data)
|
drawSupportShip (MENU_STATE *pMS, BOOLEAN filled)
|
||||||
{
|
{
|
||||||
DWORD TimeIn;
|
|
||||||
COLOR c;
|
|
||||||
Task task = (Task) data;
|
|
||||||
|
|
||||||
c = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x00, 0x00), 0x24);
|
|
||||||
TimeIn = GetTimeCounter ();
|
|
||||||
while (!Task_ReadState (task, TASK_EXIT))
|
|
||||||
{
|
|
||||||
STAMP s;
|
STAMP s;
|
||||||
SHIP_FRAGMENT *StarShipPtr;
|
|
||||||
COLOR OldColor;
|
|
||||||
CONTEXT OldContext;
|
|
||||||
|
|
||||||
LockMutex (GraphicsLock);
|
if (!pMS->flash_frame0)
|
||||||
s.origin = pMenuState->first_item;
|
return;
|
||||||
StarShipPtr = LockShipFrag (&GLOBAL (built_ship_q),
|
|
||||||
(HSHIPFRAG)pMenuState->CurFrame);
|
s.origin = pMS->first_item;
|
||||||
s.frame = StarShipPtr->icons;
|
s.frame = pMS->flash_frame0;
|
||||||
UnlockShipFrag (&GLOBAL (built_ship_q),
|
|
||||||
(HSHIPFRAG)pMenuState->CurFrame);
|
if (filled)
|
||||||
OldContext = SetContext (StatusContext);
|
DrawFilledStamp (&s);
|
||||||
|
else
|
||||||
|
DrawStamp (&s);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
getSupportShipIcon (MENU_STATE *pMS)
|
||||||
|
{
|
||||||
|
HSHIPFRAG hShipFrag;
|
||||||
|
SHIP_FRAGMENT *ShipFragPtr;
|
||||||
|
|
||||||
|
pMS->flash_frame0 = NULL;
|
||||||
|
ShipFragPtr = LockSupportShip (pMS, &hShipFrag);
|
||||||
|
if (!ShipFragPtr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pMS->flash_frame0 = ShipFragPtr->icons;
|
||||||
|
UnlockShipFrag (&GLOBAL (built_ship_q), hShipFrag);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
flashSupportShip (MENU_STATE *pMS)
|
||||||
|
{
|
||||||
|
static COLOR c = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x00, 0x00), 0x24);
|
||||||
|
static TimeCount NextTime = 0;
|
||||||
|
|
||||||
|
if (GetTimeCounter () >= NextTime)
|
||||||
|
{
|
||||||
|
NextTime = GetTimeCounter () + (ONE_SECOND / 15);
|
||||||
|
|
||||||
if (c >= BUILD_COLOR (MAKE_RGB15 (0x1F, 0x19, 0x19), 0x24))
|
if (c >= BUILD_COLOR (MAKE_RGB15 (0x1F, 0x19, 0x19), 0x24))
|
||||||
c = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x00, 0x00), 0x24);
|
c = BUILD_COLOR (MAKE_RGB15 (0x1F, 0x00, 0x00), 0x24);
|
||||||
else
|
else
|
||||||
c += BUILD_COLOR (MAKE_RGB15 (0x00, 0x02, 0x02), 0x00);
|
c += BUILD_COLOR (MAKE_RGB15 (0x00, 0x02, 0x02), 0x00);
|
||||||
OldColor = SetContextForeGroundColor (c);
|
SetContextForeGroundColor (c);
|
||||||
DrawFilledStamp (&s);
|
|
||||||
SetContextForeGroundColor (OldColor);
|
drawSupportShip (pMS, TRUE);
|
||||||
SetContext (OldContext);
|
|
||||||
UnlockMutex (GraphicsLock);
|
|
||||||
SleepThreadUntil (TimeIn + ONE_SECOND / 15);
|
|
||||||
TimeIn = GetTimeCounter ();
|
|
||||||
}
|
}
|
||||||
FinishTask (task);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static HSHIPFRAG
|
static SHIP_FRAGMENT *
|
||||||
MatchSupportShip (MENU_STATE *pMS)
|
LockSupportShip (MENU_STATE *pMS, HSHIPFRAG *phFrag)
|
||||||
{
|
{
|
||||||
const POINT *pship_pos;
|
const POINT *pship_pos;
|
||||||
HSHIPFRAG hStarShip, hNextShip;
|
HSHIPFRAG hStarShip, hNextShip;
|
||||||
@@ -97,28 +110,31 @@ MatchSupportShip (MENU_STATE *pMS)
|
|||||||
if (pship_pos->x == pMS->first_item.x
|
if (pship_pos->x == pMS->first_item.x
|
||||||
&& pship_pos->y == pMS->first_item.y)
|
&& pship_pos->y == pMS->first_item.y)
|
||||||
{
|
{
|
||||||
UnlockShipFrag (&GLOBAL (built_ship_q), hStarShip);
|
*phFrag = hStarShip;
|
||||||
return hStarShip;
|
return StarShipPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
hNextShip = _GetSuccLink (StarShipPtr);
|
hNextShip = _GetSuccLink (StarShipPtr);
|
||||||
UnlockShipFrag (&GLOBAL (built_ship_q), hStarShip);
|
UnlockShipFrag (&GLOBAL (built_ship_q), hStarShip);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOLEAN
|
static BOOLEAN
|
||||||
DeltaSupportCrew (SIZE crew_delta)
|
DeltaSupportCrew (MENU_STATE *pMS, SIZE crew_delta)
|
||||||
{
|
{
|
||||||
BOOLEAN ret = FALSE;
|
BOOLEAN ret = FALSE;
|
||||||
UNICODE buf[40];
|
UNICODE buf[40];
|
||||||
HFLEETINFO hTemplate;
|
HFLEETINFO hTemplate;
|
||||||
|
HSHIPFRAG hShipFrag;
|
||||||
SHIP_FRAGMENT *StarShipPtr;
|
SHIP_FRAGMENT *StarShipPtr;
|
||||||
FLEET_INFO *TemplatePtr;
|
FLEET_INFO *TemplatePtr;
|
||||||
|
|
||||||
StarShipPtr = LockShipFrag (&GLOBAL (built_ship_q),
|
StarShipPtr = LockSupportShip (pMS, &hShipFrag);
|
||||||
(HSHIPFRAG)pMenuState->CurFrame);
|
if (!StarShipPtr)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
hTemplate = GetStarShipFromIndex (&GLOBAL (avail_race_q),
|
hTemplate = GetStarShipFromIndex (&GLOBAL (avail_race_q),
|
||||||
StarShipPtr->race_id);
|
StarShipPtr->race_id);
|
||||||
TemplatePtr = LockFleetInfo (&GLOBAL (avail_race_q), hTemplate);
|
TemplatePtr = LockFleetInfo (&GLOBAL (avail_race_q), hTemplate);
|
||||||
@@ -156,7 +172,7 @@ DeltaSupportCrew (SIZE crew_delta)
|
|||||||
}
|
}
|
||||||
|
|
||||||
UnlockFleetInfo (&GLOBAL (avail_race_q), hTemplate);
|
UnlockFleetInfo (&GLOBAL (avail_race_q), hTemplate);
|
||||||
UnlockShipFrag (&GLOBAL (built_ship_q), (HSHIPFRAG)pMenuState->CurFrame);
|
UnlockShipFrag (&GLOBAL (built_ship_q), hShipFrag);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -166,33 +182,9 @@ DeltaSupportCrew (SIZE crew_delta)
|
|||||||
static void
|
static void
|
||||||
RosterCleanup (MENU_STATE *pMS)
|
RosterCleanup (MENU_STATE *pMS)
|
||||||
{
|
{
|
||||||
if (pMS->flash_task)
|
|
||||||
{
|
|
||||||
UnlockMutex (GraphicsLock);
|
|
||||||
ConcludeTask (pMS->flash_task);
|
|
||||||
LockMutex (GraphicsLock);
|
|
||||||
pMS->flash_task = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pMS->CurFrame)
|
|
||||||
{
|
|
||||||
STAMP s;
|
|
||||||
SHIP_FRAGMENT *StarShipPtr;
|
|
||||||
|
|
||||||
SetContext (StatusContext);
|
SetContext (StatusContext);
|
||||||
s.origin = pMS->first_item;
|
|
||||||
StarShipPtr = LockShipFrag (&GLOBAL (built_ship_q),
|
|
||||||
(HSHIPFRAG)pMS->CurFrame);
|
|
||||||
s.frame = StarShipPtr->icons;
|
|
||||||
UnlockShipFrag (&GLOBAL (built_ship_q), (HSHIPFRAG)pMS->CurFrame);
|
|
||||||
if (!(pMS->CurState & SHIP_TOGGLE))
|
|
||||||
DrawStamp (&s);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetContextForeGroundColor (WHITE_COLOR);
|
SetContextForeGroundColor (WHITE_COLOR);
|
||||||
DrawFilledStamp (&s);
|
drawSupportShip (pMS, (pMS->CurState & SHIP_TOGGLE));
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOLEAN
|
static BOOLEAN
|
||||||
@@ -200,19 +192,10 @@ DoModifyRoster (MENU_STATE *pMS)
|
|||||||
{
|
{
|
||||||
BYTE NewState;
|
BYTE NewState;
|
||||||
RECT r;
|
RECT r;
|
||||||
STAMP s;
|
|
||||||
SHIP_FRAGMENT *StarShipPtr;
|
|
||||||
BOOLEAN select, cancel, up, down, horiz;
|
BOOLEAN select, cancel, up, down, horiz;
|
||||||
|
|
||||||
if (GLOBAL (CurrentActivity) & CHECK_ABORT)
|
if (GLOBAL (CurrentActivity) & CHECK_ABORT)
|
||||||
{
|
|
||||||
LockMutex (GraphicsLock);
|
|
||||||
RosterCleanup (pMS);
|
|
||||||
UnlockMutex (GraphicsLock);
|
|
||||||
pMS->CurFrame = 0;
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
|
||||||
|
|
||||||
select = PulsedInputState.menu[KEY_MENU_SELECT];
|
select = PulsedInputState.menu[KEY_MENU_SELECT];
|
||||||
cancel = PulsedInputState.menu[KEY_MENU_CANCEL];
|
cancel = PulsedInputState.menu[KEY_MENU_CANCEL];
|
||||||
@@ -236,18 +219,22 @@ DoModifyRoster (MENU_STATE *pMS)
|
|||||||
{
|
{
|
||||||
pMS->InputFunc = DoModifyRoster;
|
pMS->InputFunc = DoModifyRoster;
|
||||||
pMS->Initialized = TRUE;
|
pMS->Initialized = TRUE;
|
||||||
|
pMS->CurState = 0;
|
||||||
|
pMS->first_item = sorted_ship_pos[pMS->CurState];
|
||||||
|
|
||||||
pMS->CurState = NewState = 0;
|
|
||||||
LockMutex (GraphicsLock);
|
LockMutex (GraphicsLock);
|
||||||
SetContext (StatusContext);
|
SetContext (StatusContext);
|
||||||
goto SelectSupport;
|
getSupportShipIcon (pMS);
|
||||||
|
DeltaSupportCrew (pMS, 0);
|
||||||
|
UnlockMutex (GraphicsLock);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
else if (cancel && !(pMS->CurState & SHIP_TOGGLE))
|
else if (cancel && !(pMS->CurState & SHIP_TOGGLE))
|
||||||
{
|
{
|
||||||
LockMutex (GraphicsLock);
|
LockMutex (GraphicsLock);
|
||||||
SetFlashRect (NULL);
|
SetFlashRect (NULL);
|
||||||
RosterCleanup (pMS);
|
RosterCleanup (pMS);
|
||||||
pMS->CurFrame = 0;
|
|
||||||
DrawStatusMessage (NULL);
|
DrawStatusMessage (NULL);
|
||||||
UnlockMutex (GraphicsLock);
|
UnlockMutex (GraphicsLock);
|
||||||
|
|
||||||
@@ -295,7 +282,7 @@ DoModifyRoster (MENU_STATE *pMS)
|
|||||||
if (delta != 0)
|
if (delta != 0)
|
||||||
{
|
{
|
||||||
LockMutex (GraphicsLock);
|
LockMutex (GraphicsLock);
|
||||||
failed = !DeltaSupportCrew (delta);
|
failed = !DeltaSupportCrew (pMS, delta);
|
||||||
UnlockMutex (GraphicsLock);
|
UnlockMutex (GraphicsLock);
|
||||||
}
|
}
|
||||||
if (failed)
|
if (failed)
|
||||||
@@ -305,7 +292,7 @@ DoModifyRoster (MENU_STATE *pMS)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
POINT *pship_pos;
|
POINT *pship_pos = sorted_ship_pos;
|
||||||
BYTE num_escorts = (BYTE) pMS->delta_item;
|
BYTE num_escorts = (BYTE) pMS->delta_item;
|
||||||
BYTE top_right = (num_escorts + 1) >> 1;
|
BYTE top_right = (num_escorts + 1) >> 1;
|
||||||
|
|
||||||
@@ -313,7 +300,6 @@ DoModifyRoster (MENU_STATE *pMS)
|
|||||||
|
|
||||||
if (horiz)
|
if (horiz)
|
||||||
{
|
{
|
||||||
pship_pos = sorted_ship_pos;
|
|
||||||
if (NewState == top_right - 1)
|
if (NewState == top_right - 1)
|
||||||
NewState = num_escorts - 1;
|
NewState = num_escorts - 1;
|
||||||
else if (NewState >= top_right)
|
else if (NewState >= top_right)
|
||||||
@@ -348,30 +334,25 @@ DoModifyRoster (MENU_STATE *pMS)
|
|||||||
--NewState;
|
--NewState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LockMutex (GraphicsLock);
|
||||||
|
BatchGraphics ();
|
||||||
|
SetContext (StatusContext);
|
||||||
|
|
||||||
if (NewState != pMS->CurState)
|
if (NewState != pMS->CurState)
|
||||||
{
|
{
|
||||||
LockMutex (GraphicsLock);
|
// Draw the previous escort in unselected state
|
||||||
SetContext (StatusContext);
|
drawSupportShip (pMS, FALSE);
|
||||||
s.origin = pMS->first_item;
|
// Select the new one
|
||||||
StarShipPtr = LockShipFrag (&GLOBAL (built_ship_q),
|
|
||||||
(HSHIPFRAG)pMS->CurFrame);
|
|
||||||
s.frame = StarShipPtr->icons;
|
|
||||||
UnlockShipFrag (&GLOBAL (built_ship_q), (HSHIPFRAG)pMS->CurFrame);
|
|
||||||
DrawStamp (&s);
|
|
||||||
SelectSupport:
|
|
||||||
pship_pos = sorted_ship_pos;
|
|
||||||
pMS->first_item = pship_pos[NewState];
|
pMS->first_item = pship_pos[NewState];
|
||||||
pMS->CurFrame = (FRAME)MatchSupportShip (pMS);
|
getSupportShipIcon (pMS);
|
||||||
|
DeltaSupportCrew (pMS, 0);
|
||||||
DeltaSupportCrew (0);
|
|
||||||
UnlockMutex (GraphicsLock);
|
|
||||||
|
|
||||||
pMS->CurState = NewState;
|
pMS->CurState = NewState;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pMS->flash_task == 0)
|
flashSupportShip (pMS);
|
||||||
pMS->flash_task = AssignTask (flash_ship_task, 2048,
|
|
||||||
"flash roster menu");
|
UnbatchGraphics ();
|
||||||
|
UnlockMutex (GraphicsLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
SleepThread (ONE_SECOND / 30);
|
SleepThread (ONE_SECOND / 30);
|
||||||
@@ -420,10 +401,9 @@ Roster (void)
|
|||||||
qsort (sorted_ship_pos, num_support_ships,
|
qsort (sorted_ship_pos, num_support_ships,
|
||||||
sizeof (sorted_ship_pos[0]), compShipPos);
|
sizeof (sorted_ship_pos[0]), compShipPos);
|
||||||
|
|
||||||
|
memset (&MenuState, 0, sizeof (MenuState));
|
||||||
MenuState.InputFunc = DoModifyRoster;
|
MenuState.InputFunc = DoModifyRoster;
|
||||||
MenuState.Initialized = FALSE;
|
MenuState.Initialized = FALSE;
|
||||||
MenuState.CurState = 0;
|
|
||||||
MenuState.flash_task = 0;
|
|
||||||
MenuState.delta_item = num_support_ships;
|
MenuState.delta_item = num_support_ships;
|
||||||
|
|
||||||
SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT);
|
SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT);
|
||||||
|
|||||||
Reference in New Issue
Block a user