//****************************************************************************************************
// Pause menu
//
// Library:
// 		menuPauseHandler				- Main task flow.
//		menuItem						- Summon piece of the menu.
//		chinchin						- Handles the music note spawning from birdy.
//		birdyAnimation					- Handles the gentle rocking of the birdy.
//		musicnoteSprite					- Sprite for the music note.
//	
//****************************************************************************************************

#include "script/thdcs/functions/function_loaddata.txt"
#include "script/thdcs/functions/function_hud.txt"
#include "script/thdcs/functions/const_sound.txt"

@Initialize {
	SetAutoDeleteObject(true);
	bgBlur;
	menuPauseHandler;
}

@MainLoop { yield; }
@Finalize { } 

task menuPauseHandler {
	
	// Enum
	let PSE_CANCEL = 0;
	let PSE_QUIT = 1;
	let PSE_SAVER = 2;
	let PSE_RETRY = 3;
	let menuSelect = 0;				// choice change tracker
	
	let hasReally = false;
	let PSE_NO = 0;
	let PSE_YES = 1;
	let menuSelect2 = 0;		    // choice change tracker
	
	// summon the menu items
	let birdy = menuItem(86,320,0.8,255,0,704,160,1024);		// Birdy 
	let menPText = menuItem(88,140,1,255,0,448,128,512);		// Pause text static
	let menRGame = menuItem(184,284,1,255,256,640,512,704);		// Return to game
	let menRTitle = menuItem(184,324,1,255,256,704,512,768);	// Return to title
	//let menSaveRT = menuItem(184,364,1,255,256,768,512,832);	// Save replay and return title DISABLED DUE TO UNABLE TO PLAYBACK PROPER.
	let menRetry = menuItem(184,364,1,255,256,832,512,896);		// Give up and retry
	let menHontou = menuItem(366,284,1,0,256,576,512,640);		// Really? text static
	let menNo = menuItem(300,324,1,0,384,448,512,512);			// No No no
	let menYes = menuItem(300,364,1,0,256,448,384,512);			// Yes yes yes
	
	let menItemsArr = [menRGame, menRTitle, menRetry];
	let menItemsArr2 = [menNo, menYes];

	ObjRender_SetColor(birdy, 128, 255, 192);
	let b = 255; let g = 255; let colourFrame = 0; 
	let b2 = 255; let g2 = 255; let colourFrame2 = 0;
	chinchin(birdy);
	birdyAnimation(birdy); 
	
	while(GetVirtualKeyState(VK_PAUSE) != KEY_FREE) { yield; }
	
	StopMusic(GetAreaCommonData("sound", "song", 0));
	PlaySFX(SFX_MIX01);
	PlayMusic(BGM_PAUSE);
	musicRestartEnable(BGM_PAUSE, 1);

	loop {	
		if(!hasReally) {
			if(ObjRender_GetX(birdy) > 100) { ObjRender_SetX(birdy, ObjRender_GetX(birdy)-20); }
			ascent(i in 0..length(menItemsArr)) { ObjRender_SetAlpha(menItemsArr[i], 255); }
			ObjRender_SetAlpha(menPText, 255);
			ObjRender_SetAlpha(menHontou, 0);
			ObjRender_SetAlpha(menNo, 0);
			ObjRender_SetAlpha(menYes, 0);
	
			ascent(i in 0..length(menItemsArr)) { 
				if(i == menuSelect) { 
					ObjRender_SetColor(menItemsArr[menuSelect], 255, g, b);
					b -= sin(colourFrame) * 8;
					g -= sin(colourFrame) * 8;
					colourFrame += 5;
					if(ObjRender_GetX(menItemsArr[menuSelect]) < 192) { ObjRender_SetX(menItemsArr[menuSelect], ObjRender_GetX(menItemsArr[menuSelect]) + 2); }
				} else {
					ObjRender_SetColor(menItemsArr[i], 255, 255, 255);
					ObjRender_SetX(menItemsArr[i], 184);
				}
			}

			if(GetVirtualKeyState(VK_UP) == KEY_PUSH) { 
				PlaySFX(SFX_MENPICK);
				if(menuSelect > -1) { menuSelect--; } 
				if(menuSelect == -1) { menuSelect = 2; } 
			}
			if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH) { 
				PlaySFX(SFX_MENPICK);
				if(menuSelect < 3) { menuSelect++; } 
				if(menuSelect == 3) { menuSelect = 0; } 
			}			
		} else {
			if(ObjRender_GetX(birdy) < 250) { ObjRender_SetX(birdy, ObjRender_GetX(birdy)+20); }
			ascent(i in 0..length(menItemsArr)) { ObjRender_SetAlpha(menItemsArr[i], 25); }
			ObjRender_SetAlpha(menPText, 25);
			ObjRender_SetAlpha(menHontou, 255);
			ObjRender_SetAlpha(menNo, 255);
			ObjRender_SetAlpha(menYes, 255);

			ascent(i in 0..length(menItemsArr2)) {
				if(i == menuSelect2) {
					ObjRender_SetColor(menItemsArr2[menuSelect2], 255, g2, b2);
					b2 -= sin(colourFrame2) * 8;
					g2 -= sin(colourFrame2) * 8;
					colourFrame2 += 5;
					if(ObjRender_GetX(menItemsArr2[menuSelect2]) < 308) { ObjRender_SetX(menItemsArr2[menuSelect2], ObjRender_GetX(menItemsArr2[menuSelect2]) + 2); }
				} else {
					ObjRender_SetColor(menItemsArr2[i], 255, 255, 255);
					ObjRender_SetX(menItemsArr2[i], 300);
				}
			}

			if(GetVirtualKeyState(VK_UP) == KEY_PUSH) {
				PlaySFX(SFX_MENPICK);
				if(menuSelect2 > -1) { menuSelect2--; }
				if(menuSelect2 == -1) { menuSelect2 = 1; }
			}
			if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH) {
				PlaySFX(SFX_MENPICK);
				if(menuSelect2 < 2) { menuSelect2++; }
				if(menuSelect2 == 2) { menuSelect2 = 0; }
			}
		}

		if(GetVirtualKeyState(VK_OK) == KEY_PUSH) {
			if(hasReally) {
				PlaySFX(SFX_OK00);
				menSelectAnim(menItemsArr2[menuSelect2]);

				alternative(menuSelect2)
				case(PSE_YES) {
					let choiceMade = [RESULT_CANCEL, RESULT_END, RESULT_RETRY];
					SetScriptResult(choiceMade[menuSelect]);
					CloseScript(GetOwnScriptID);
					break;
				}
				case(PSE_NO) {
					hasReally = false;
				}
			} else {
				PlaySFX(SFX_OK00);
				menSelectAnim(menItemsArr[menuSelect]);

				alternative(menuSelect)
				case(PSE_CANCEL) {
					let choiceMade = [RESULT_CANCEL, RESULT_END, RESULT_RETRY];
					SetScriptResult(choiceMade[menuSelect]);
					musicRestartEnable(GetAreaCommonData("sound", "song", 0), 1);
					PlayMusic(GetAreaCommonData("sound", "song", 0));
					CloseScript(GetOwnScriptID);
					break;
				}
				others {
					if(menuSelect != PSE_CANCEL) { hasReally = true; }
				}
			}
		}

		if(GetVirtualKeyState(VK_CANCEL) == KEY_PULL || GetVirtualKeyState(VK_PAUSE) == KEY_PULL) {
			PlaySFX(SFX_MENCANCEL);	
			SetScriptResult(RESULT_CANCEL);
			musicRestartEnable(GetAreaCommonData("sound", "song", 0), 1);
			PlayMusic(GetAreaCommonData("sound", "song", 0));
			CloseScript(GetOwnScriptID);
			break;
		}

		yield;
	}
	StopMusic(BGM_PAUSE);
	ascent(i in 0..length(menItemsArr)) { Obj_Delete(menItemsArr[i]); }
	ascent(i in 0..length(menItemsArr2)) { Obj_Delete(menItemsArr[i]); }
}