Document Task_MapNamePopUpWindow

This commit is contained in:
GriffinR
2023-08-19 17:20:53 -04:00
parent 10a10e914b
commit 5beec06d9d
+62 -35
View File
@@ -206,22 +206,45 @@ static bool8 StartMenu_ShowMapNamePopup(void)
return TRUE; return TRUE;
} }
// States and data defines for Task_MapNamePopUpWindow
enum {
STATE_SLIDE_IN,
STATE_WAIT,
STATE_SLIDE_OUT,
STATE_UNUSED,
STATE_ERASE,
STATE_END,
STATE_PRINT, // For some reason the first state is numerically last.
};
#define POPUP_OFFSCREEN_Y 40
#define POPUP_SLIDE_SPEED 2
#define tState data[0]
#define tOnscreenTimer data[1]
#define tYOffset data[2]
#define tIncomingPopUp data[3]
#define tPrintTimer data[4]
void ShowMapNamePopup(void) void ShowMapNamePopup(void)
{ {
if (FlagGet(FLAG_HIDE_MAP_NAME_POPUP) != TRUE) if (FlagGet(FLAG_HIDE_MAP_NAME_POPUP) != TRUE)
{ {
if (!FuncIsActiveTask(Task_MapNamePopUpWindow)) if (!FuncIsActiveTask(Task_MapNamePopUpWindow))
{ {
// New pop up window
sPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 90); sPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 90);
SetGpuReg(REG_OFFSET_BG0VOFS, 40); SetGpuReg(REG_OFFSET_BG0VOFS, POPUP_OFFSCREEN_Y);
gTasks[sPopupTaskId].data[0] = 6; gTasks[sPopupTaskId].tState = STATE_PRINT;
gTasks[sPopupTaskId].data[2] = 40; gTasks[sPopupTaskId].tYOffset = POPUP_OFFSCREEN_Y;
} }
else else
{ {
if (gTasks[sPopupTaskId].data[0] != 2) // There's already a pop up window running.
gTasks[sPopupTaskId].data[0] = 2; // Hurry the old pop up offscreen so the new one can appear.
gTasks[sPopupTaskId].data[3] = 1; if (gTasks[sPopupTaskId].tState != STATE_SLIDE_OUT)
gTasks[sPopupTaskId].tState = STATE_SLIDE_OUT;
gTasks[sPopupTaskId].tIncomingPopUp = TRUE;
} }
} }
} }
@@ -230,61 +253,65 @@ static void Task_MapNamePopUpWindow(u8 taskId)
{ {
struct Task *task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
switch (task->data[0]) switch (task->tState)
{ {
case 6: case STATE_PRINT:
task->data[4]++; // Wait, then create and print the pop up window
if (task->data[4] > 30) if (++task->tPrintTimer > 30)
{ {
task->data[0] = 0; task->tState = STATE_SLIDE_IN;
task->data[4] = 0; task->tPrintTimer = 0;
ShowMapNamePopUpWindow(); ShowMapNamePopUpWindow();
} }
break; break;
case 0: case STATE_SLIDE_IN:
task->data[2] -= 2; // Slide the window onscreen.
if (task->data[2] <= 0 ) task->tYOffset -= POPUP_SLIDE_SPEED;
if (task->tYOffset <= 0 )
{ {
task->data[2] = 0; task->tYOffset = 0;
task->data[0] = 1; task->tState = STATE_WAIT;
gTasks[sPopupTaskId].data[1] = 0; gTasks[sPopupTaskId].data[1] = 0;
} }
break; break;
case 1: case STATE_WAIT:
task->data[1]++; // Wait while the window is fully onscreen.
if (task->data[1] > 120 ) if (++task->tOnscreenTimer > 120)
{ {
task->data[1] = 0; task->tOnscreenTimer = 0;
task->data[0] = 2; task->tState = STATE_SLIDE_OUT;
} }
break; break;
case 2: case STATE_SLIDE_OUT:
task->data[2] += 2; // Slide the window offscreen.
if (task->data[2] > 39) task->tYOffset += POPUP_SLIDE_SPEED;
if (task->tYOffset >= POPUP_OFFSCREEN_Y)
{ {
task->data[2] = 40; task->tYOffset = POPUP_OFFSCREEN_Y;
if (task->data[3]) if (task->tIncomingPopUp)
{ {
task->data[0] = 6; // A new pop up window is incoming,
task->data[4] = 0; // return to the first state to show it.
task->data[3] = 0; task->tState = STATE_PRINT;
task->tPrintTimer = 0;
task->tIncomingPopUp = FALSE;
} }
else else
{ {
task->data[0] = 4; task->tState = STATE_ERASE;
return; return;
} }
} }
break; break;
case 4: case STATE_ERASE:
ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE); ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE);
task->data[0] = 5; task->tState = STATE_END;
break; break;
case 5: case STATE_END:
HideMapNamePopUpWindow(); HideMapNamePopUpWindow();
return; return;
} }
SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); SetGpuReg(REG_OFFSET_BG0VOFS, task->tYOffset);
} }
void HideMapNamePopUpWindow(void) void HideMapNamePopUpWindow(void)