Flash planet location cursor task retired; some cleanups
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3289 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
+117
-108
@@ -34,6 +34,7 @@
|
|||||||
#include "../state.h"
|
#include "../state.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "libs/graphics/gfx_common.h"
|
#include "libs/graphics/gfx_common.h"
|
||||||
|
#include "libs/graphics/drawable.h"
|
||||||
#include "libs/inplib.h"
|
#include "libs/inplib.h"
|
||||||
#include "libs/mathlib.h"
|
#include "libs/mathlib.h"
|
||||||
|
|
||||||
@@ -493,91 +494,117 @@ PrintCoarseScan3DO (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
SetPlanetLoc (POINT new_pt)
|
initPlanetLocationImage (MENU_STATE *pMS)
|
||||||
{
|
{
|
||||||
RECT r;
|
EXTENT size;
|
||||||
STAMP s;
|
|
||||||
|
|
||||||
pSolarSysState->MenuState.first_item = new_pt;
|
// Get the cursor image
|
||||||
new_pt.x >>= MAG_SHIFT;
|
pMS->flash_frame0 = SetAbsFrameIndex (MiscDataFrame, FLASH_INDEX);
|
||||||
new_pt.y >>= MAG_SHIFT;
|
size.width = GetFrameWidth (pMS->flash_frame0);
|
||||||
|
size.height = GetFrameHeight (pMS->flash_frame0);
|
||||||
|
pMS->flash_rect0.extent = size;
|
||||||
|
|
||||||
LockMutex (GraphicsLock);
|
pMS->flash_frame1 = CaptureDrawable (CreateDrawable (
|
||||||
SetContext (ScanContext);
|
WANT_PIXMAP | MAPPED_TO_DISPLAY,
|
||||||
s.origin.x = pMenuState->flash_rect0.corner.x - (FLASH_WIDTH >> 1);
|
size.width, size.height, 1));
|
||||||
s.origin.y = pMenuState->flash_rect0.corner.y - (FLASH_HEIGHT >> 1);
|
// copy the hotspot
|
||||||
s.frame = pMenuState->flash_frame0;
|
SetFrameHot (pMS->flash_frame1, GetFrameHot (pMS->flash_frame0));
|
||||||
DrawStamp (&s);
|
|
||||||
|
|
||||||
pMenuState->flash_rect0.corner = new_pt;
|
|
||||||
GetContextClipRect (&r);
|
|
||||||
r.corner.x += pMenuState->flash_rect0.corner.x - (FLASH_WIDTH >> 1);
|
|
||||||
r.corner.y += pMenuState->flash_rect0.corner.y - (FLASH_HEIGHT >> 1);
|
|
||||||
r.extent.width = FLASH_WIDTH;
|
|
||||||
r.extent.height = FLASH_HEIGHT;
|
|
||||||
LoadDisplayPixmap (&r, pMenuState->flash_frame0);
|
|
||||||
UnlockMutex (GraphicsLock);
|
|
||||||
|
|
||||||
TaskSwitch ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static void
|
||||||
flash_planet_loc_func(void *data)
|
savePlanetLocationImage (MENU_STATE *pMS)
|
||||||
{
|
{
|
||||||
DWORD TimeIn;
|
RECT r;
|
||||||
BYTE c, val;
|
HOT_SPOT hs = GetFrameHot (pMS->flash_frame1);
|
||||||
PRIMITIVE p;
|
|
||||||
Task task = (Task) data;
|
|
||||||
|
|
||||||
SetPrimType (&p, STAMPFILL_PRIM);
|
// Remember what we saved
|
||||||
SetPrimNextLink (&p, END_OF_LIST);
|
pMS->flash_rect1.corner = pMS->flash_rect0.corner;
|
||||||
|
|
||||||
p.Object.Stamp.origin.x = p.Object.Stamp.origin.y = -1;
|
GetContextClipRect (&r);
|
||||||
p.Object.Stamp.frame = SetAbsFrameIndex (MiscDataFrame, FLASH_INDEX);
|
r.corner.x += pMS->flash_rect1.corner.x - hs.x;
|
||||||
c = 0x00;
|
r.corner.y += pMS->flash_rect1.corner.y - hs.y;
|
||||||
val = -0x02;
|
r.extent = pMS->flash_rect0.extent;
|
||||||
TimeIn = 0;
|
LoadDisplayPixmap (&r, pMenuState->flash_frame1);
|
||||||
while (!Task_ReadState(task, TASK_EXIT))
|
}
|
||||||
{
|
|
||||||
DWORD T;
|
|
||||||
CONTEXT OldContext;
|
|
||||||
|
|
||||||
LockMutex (GraphicsLock);
|
static void
|
||||||
T = GetTimeCounter ();
|
restorePlanetLocationImage (MENU_STATE *pMS)
|
||||||
if (p.Object.Stamp.origin.x != pMenuState->flash_rect0.corner.x
|
{
|
||||||
|| p.Object.Stamp.origin.y != pMenuState->flash_rect0.corner.y)
|
STAMP s;
|
||||||
{
|
|
||||||
c = 0x00;
|
|
||||||
val = -0x02;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (T < TimeIn)
|
|
||||||
{
|
|
||||||
UnlockMutex (GraphicsLock);
|
|
||||||
TaskSwitch ();
|
|
||||||
|
|
||||||
continue;
|
s.origin = pMS->flash_rect1.corner;
|
||||||
}
|
s.frame = pMS->flash_frame1; // saved image
|
||||||
|
DrawStamp (&s);
|
||||||
|
}
|
||||||
|
|
||||||
if (c == 0x00 || c == 0x1A)
|
static void
|
||||||
val = -val;
|
drawPlanetCursor (MENU_STATE *pMS, BOOLEAN filled)
|
||||||
c += val;
|
{
|
||||||
}
|
STAMP s;
|
||||||
p.Object.Stamp.origin = pMenuState->flash_rect0.corner;
|
|
||||||
SetPrimColor (&p, BUILD_COLOR (MAKE_RGB15 (c, c, c), c));
|
|
||||||
|
|
||||||
OldContext = SetContext (ScanContext);
|
s.origin = pMS->flash_rect0.corner;
|
||||||
DrawBatch (&p, 0, 0);
|
s.frame = pMS->flash_frame0;
|
||||||
SetContext (OldContext);
|
if (filled)
|
||||||
|
DrawFilledStamp (&s);
|
||||||
|
else
|
||||||
|
DrawStamp (&s);
|
||||||
|
}
|
||||||
|
|
||||||
TimeIn = T + (ONE_SECOND >> 4);
|
static void
|
||||||
UnlockMutex (GraphicsLock);
|
SetPlanetLoc (POINT new_pt)
|
||||||
|
{
|
||||||
|
pSolarSysState->MenuState.first_item = new_pt;
|
||||||
|
|
||||||
TaskSwitch ();
|
// Set the new flash location
|
||||||
|
new_pt.x >>= MAG_SHIFT;
|
||||||
|
new_pt.y >>= MAG_SHIFT;
|
||||||
|
pMenuState->flash_rect0.corner = new_pt;
|
||||||
|
|
||||||
|
SetContext (ScanContext);
|
||||||
|
restorePlanetLocationImage (pMenuState);
|
||||||
|
savePlanetLocationImage (pMenuState);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
flashPlanetLocation (MENU_STATE *pMS)
|
||||||
|
{
|
||||||
|
#define FLASH_FRAME_DELAY (ONE_SECOND / 16)
|
||||||
|
static BYTE c = 0x00;
|
||||||
|
static int val = -2;
|
||||||
|
static POINT prevPt;
|
||||||
|
static TimeCount NextTime = 0;
|
||||||
|
BOOLEAN locChanged;
|
||||||
|
TimeCount Now = GetTimeCounter ();
|
||||||
|
|
||||||
|
locChanged = prevPt.x != pMS->flash_rect0.corner.x
|
||||||
|
|| prevPt.y != pMS->flash_rect0.corner.y;
|
||||||
|
|
||||||
|
if (!locChanged && Now < NextTime)
|
||||||
|
return; // nothing to do
|
||||||
|
|
||||||
|
if (locChanged)
|
||||||
|
{ // Reset the flashing cycle
|
||||||
|
c = 0x00;
|
||||||
|
val = -2;
|
||||||
|
prevPt = pMS->flash_rect0.corner;
|
||||||
|
|
||||||
|
NextTime = Now + FLASH_FRAME_DELAY;
|
||||||
}
|
}
|
||||||
FinishTask (task);
|
else
|
||||||
return(0);
|
{ // Continue the flashing cycle
|
||||||
|
if (c == 0x00 || c == 0x1A)
|
||||||
|
val = -val;
|
||||||
|
c += val;
|
||||||
|
|
||||||
|
if (Now - NextTime > FLASH_FRAME_DELAY)
|
||||||
|
NextTime = Now + FLASH_FRAME_DELAY; // missed timing by too much
|
||||||
|
else
|
||||||
|
NextTime += FLASH_FRAME_DELAY; // stable frame rate
|
||||||
|
}
|
||||||
|
|
||||||
|
SetContext (ScanContext);
|
||||||
|
SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (c, c, c), c));
|
||||||
|
drawPlanetCursor (pMS, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOLEAN DoScan (MENU_STATE *pMS);
|
static BOOLEAN DoScan (MENU_STATE *pMS);
|
||||||
@@ -589,13 +616,9 @@ PickPlanetSide (MENU_STATE *pMS)
|
|||||||
BOOLEAN select, cancel;
|
BOOLEAN select, cancel;
|
||||||
select = PulsedInputState.menu[KEY_MENU_SELECT];
|
select = PulsedInputState.menu[KEY_MENU_SELECT];
|
||||||
cancel = PulsedInputState.menu[KEY_MENU_CANCEL];
|
cancel = PulsedInputState.menu[KEY_MENU_CANCEL];
|
||||||
|
|
||||||
if (GLOBAL (CurrentActivity) & CHECK_ABORT)
|
if (GLOBAL (CurrentActivity) & CHECK_ABORT)
|
||||||
{
|
{
|
||||||
if (pMenuState->flash_task)
|
|
||||||
{
|
|
||||||
ConcludeTask(pMenuState->flash_task);
|
|
||||||
pMenuState->flash_task = 0;
|
|
||||||
}
|
|
||||||
goto ExitPlanetSide;
|
goto ExitPlanetSide;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -606,36 +629,25 @@ PickPlanetSide (MENU_STATE *pMS)
|
|||||||
SetMenuSounds (MENU_SOUND_NONE, MENU_SOUND_NONE);
|
SetMenuSounds (MENU_SOUND_NONE, MENU_SOUND_NONE);
|
||||||
if (!select)
|
if (!select)
|
||||||
{
|
{
|
||||||
RECT r;
|
|
||||||
|
|
||||||
pMS->Initialized = TRUE;
|
pMS->Initialized = TRUE;
|
||||||
|
|
||||||
LockMutex (GraphicsLock);
|
LockMutex (GraphicsLock);
|
||||||
SetContext (ScanContext);
|
SetContext (ScanContext);
|
||||||
|
// Set the current flash location
|
||||||
pMenuState->flash_rect0.corner.x =
|
pMenuState->flash_rect0.corner.x =
|
||||||
pSolarSysState->MenuState.first_item.x >> MAG_SHIFT;
|
pSolarSysState->MenuState.first_item.x >> MAG_SHIFT;
|
||||||
pMenuState->flash_rect0.corner.y =
|
pMenuState->flash_rect0.corner.y =
|
||||||
pSolarSysState->MenuState.first_item.y >> MAG_SHIFT;
|
pSolarSysState->MenuState.first_item.y >> MAG_SHIFT;
|
||||||
GetContextClipRect (&r);
|
savePlanetLocationImage (pMenuState);
|
||||||
r.corner.x += pMenuState->flash_rect0.corner.x - (FLASH_WIDTH >> 1);
|
|
||||||
r.corner.y += pMenuState->flash_rect0.corner.y - (FLASH_HEIGHT >> 1);
|
|
||||||
r.extent.width = FLASH_WIDTH;
|
|
||||||
r.extent.height = FLASH_HEIGHT;
|
|
||||||
LoadDisplayPixmap (&r, pMenuState->flash_frame0);
|
|
||||||
|
|
||||||
SetFlashRect (NULL);
|
SetFlashRect (NULL);
|
||||||
UnlockMutex (GraphicsLock);
|
UnlockMutex (GraphicsLock);
|
||||||
|
|
||||||
InitLander (0);
|
InitLander (0);
|
||||||
|
|
||||||
pMenuState->flash_task = AssignTask (flash_planet_loc_func,
|
|
||||||
2048, "flash planet location");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (select || cancel)
|
else if (select || cancel)
|
||||||
{
|
{
|
||||||
STAMP s;
|
|
||||||
|
|
||||||
SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT);
|
SetMenuSounds (MENU_SOUND_ARROWS, MENU_SOUND_SELECT);
|
||||||
|
|
||||||
LockMutex (GraphicsLock);
|
LockMutex (GraphicsLock);
|
||||||
@@ -643,14 +655,13 @@ PickPlanetSide (MENU_STATE *pMS)
|
|||||||
UnlockMutex (GraphicsLock);
|
UnlockMutex (GraphicsLock);
|
||||||
|
|
||||||
FlushInput ();
|
FlushInput ();
|
||||||
if (pMenuState->flash_task)
|
|
||||||
{
|
|
||||||
ConcludeTask (pMenuState->flash_task);
|
|
||||||
pMenuState->flash_task = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!select)
|
if (!select)
|
||||||
|
{ // Bailing out
|
||||||
|
LockMutex (GraphicsLock);
|
||||||
SetPlanetLoc (pSolarSysState->MenuState.first_item);
|
SetPlanetLoc (pSolarSysState->MenuState.first_item);
|
||||||
|
UnlockMutex (GraphicsLock);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
COUNT fuel_required;
|
COUNT fuel_required;
|
||||||
@@ -666,9 +677,7 @@ PickPlanetSide (MENU_STATE *pMS)
|
|||||||
LockMutex (GraphicsLock);
|
LockMutex (GraphicsLock);
|
||||||
DeltaSISGauges (0, -(SIZE)fuel_required, 0);
|
DeltaSISGauges (0, -(SIZE)fuel_required, 0);
|
||||||
SetContext (ScanContext);
|
SetContext (ScanContext);
|
||||||
s.origin = pMenuState->flash_rect0.corner;
|
drawPlanetCursor (pMenuState, FALSE);
|
||||||
s.frame = SetAbsFrameIndex (MiscDataFrame, FLASH_INDEX);
|
|
||||||
DrawStamp (&s);
|
|
||||||
UnlockMutex (GraphicsLock);
|
UnlockMutex (GraphicsLock);
|
||||||
|
|
||||||
PlanetSide (pMS);
|
PlanetSide (pMS);
|
||||||
@@ -680,12 +689,6 @@ PickPlanetSide (MENU_STATE *pMS)
|
|||||||
/* Create Fwiffo group and go into comm with it */
|
/* Create Fwiffo group and go into comm with it */
|
||||||
HSHIPFRAG hStarShip;
|
HSHIPFRAG hStarShip;
|
||||||
|
|
||||||
if (pMenuState->flash_task)
|
|
||||||
{
|
|
||||||
ConcludeTask (pMenuState->flash_task);
|
|
||||||
pMenuState->flash_task = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
NextActivity |= CHECK_LOAD; /* fake a load game */
|
NextActivity |= CHECK_LOAD; /* fake a load game */
|
||||||
GLOBAL (CurrentActivity) |= START_ENCOUNTER;
|
GLOBAL (CurrentActivity) |= START_ENCOUNTER;
|
||||||
|
|
||||||
@@ -747,6 +750,9 @@ ExitPlanetSide:
|
|||||||
if (PulsedInputState.menu[KEY_MENU_DOWN])
|
if (PulsedInputState.menu[KEY_MENU_DOWN])
|
||||||
dy = 1;
|
dy = 1;
|
||||||
|
|
||||||
|
LockMutex (GraphicsLock);
|
||||||
|
BatchGraphics ();
|
||||||
|
|
||||||
dx = dx << MAG_SHIFT;
|
dx = dx << MAG_SHIFT;
|
||||||
if (dx)
|
if (dx)
|
||||||
{
|
{
|
||||||
@@ -770,6 +776,11 @@ ExitPlanetSide:
|
|||||||
SetPlanetLoc (new_pt);
|
SetPlanetLoc (new_pt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flashPlanetLocation (pMenuState);
|
||||||
|
|
||||||
|
UnbatchGraphics ();
|
||||||
|
UnlockMutex (GraphicsLock);
|
||||||
|
|
||||||
SleepThreadUntil (TimeIn + ONE_SECOND / 40);
|
SleepThreadUntil (TimeIn + ONE_SECOND / 40);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1152,11 +1163,9 @@ ScanSystem (void)
|
|||||||
LockMutex (GraphicsLock);
|
LockMutex (GraphicsLock);
|
||||||
ScanContext = CreateContext ();
|
ScanContext = CreateContext ();
|
||||||
SetContext (ScanContext);
|
SetContext (ScanContext);
|
||||||
MenuState.flash_rect0.extent.width = FLASH_WIDTH;
|
|
||||||
MenuState.flash_rect0.extent.height = FLASH_HEIGHT;
|
initPlanetLocationImage (&MenuState);
|
||||||
MenuState.flash_frame0 = CaptureDrawable (
|
|
||||||
CreateDrawable (WANT_PIXMAP | MAPPED_TO_DISPLAY,
|
|
||||||
FLASH_WIDTH, FLASH_HEIGHT, 1));
|
|
||||||
SetContextFGFrame (Screen);
|
SetContextFGFrame (Screen);
|
||||||
r.corner.x = (SIS_ORG_X + SIS_SCREEN_WIDTH) - MAP_WIDTH;
|
r.corner.x = (SIS_ORG_X + SIS_SCREEN_WIDTH) - MAP_WIDTH;
|
||||||
r.corner.y = (SIS_ORG_Y + SIS_SCREEN_HEIGHT) - MAP_HEIGHT;
|
r.corner.y = (SIS_ORG_Y + SIS_SCREEN_HEIGHT) - MAP_HEIGHT;
|
||||||
@@ -1183,7 +1192,7 @@ ScanSystem (void)
|
|||||||
{
|
{
|
||||||
LockMutex (GraphicsLock);
|
LockMutex (GraphicsLock);
|
||||||
SetContext (SpaceContext);
|
SetContext (SpaceContext);
|
||||||
DestroyDrawable (ReleaseDrawable (MenuState.flash_frame0));
|
DestroyDrawable (ReleaseDrawable (MenuState.flash_frame1));
|
||||||
DestroyContext (ScanContext);
|
DestroyContext (ScanContext);
|
||||||
ScanContext = 0;
|
ScanContext = 0;
|
||||||
UnlockMutex (GraphicsLock);
|
UnlockMutex (GraphicsLock);
|
||||||
|
|||||||
Reference in New Issue
Block a user