//---------------------------------------------------------------------------------
//
//@j[p̊֐E^XNQłB
//@
//
//---------------------------------------------------------------------------------

//Xe[WC^XN@j[
//   @ Ȃ	
task StageTask_Menu{
	LoadGraphic_Menu();
	MenuBG();
	SelectObject();
	MenuTEXT();
	ForbidShot(true);
	ForbidBomb(true);
	while(nStageState == STAGE_STATE_MENU){
		SetPlayerX(DEFAULT_POSITION_X);
		SetPlayerY(DEFAULT_POSITION_Y);		//|WVŒ
		OutputDebugString(0, "Stage_Menu", 1);
		OutputDebugString(1, "nStageState", nStageState);
		OutputDebugString(2, "nMenuState", nMenuState);
		OutputDebugString(3, "nMenuSelect", nMenuSelect);
		OutputDebugString(4, "nSpellLank", nSpellLank);
		OutputDebugString(5, "nSpellCard", nSpellCard);
		
		//L[ꂽ
		if(GetKeyState(VK_UP) == KEY_PUSH){
			alternative(nMenuState)
			case(MENU_STATE_INIT){
				if(nMenuSelect > SELECT_STATE_ALL){
					nMenuSelect--;
					fMenuSelectNext = true;
				}
			}
			case(MENU_STATE_LANK){
				if(nMenuSelect > SELECT_STATE_EASY){
					nMenuSelect--;
					fMenuSelectNext = true;
				}
			}
			PlaySE(SE_SELECT);
		}
		
		//L[ꂽ
		if(GetKeyState(VK_DOWN) == KEY_PUSH){
			alternative(nMenuState)
			case(MENU_STATE_INIT){
				if(nMenuSelect < SELECT_STATE_QUIT){
					nMenuSelect++;
					fMenuSelectNext = true;
				}
			}
			case(MENU_STATE_LANK){
				if(nMenuSelect < SELECT_STATE_OMAKE){
					nMenuSelect++;
					fMenuSelectNext = true;
				}
			}
			PlaySE(SE_SELECT);
		}
		
		//ZL[ꂽ
		if(GetKeyState(VK_SHOT) == KEY_PUSH){
			alternative(nMenuSelect)
			case(SELECT_STATE_ALL){
				//ALL̂Ƃ nSpellCard  SPELL_ALL t nMenuState  MENU_STATE_LANK ɑJ
				nSpellCard = SPELL_ALL;
				nMenuState = MENU_STATE_LANK;
				nMenuSelect = SELECT_STATE_EASY;
				fMenuSelectNext = true;
			}
			case(SELECT_STATE_014){
				//_014̂Ƃ nSpellCard  SPELL_014 t nMenuState  MENU_STATE_LANK ɑJ
				nSpellCard = SPELL_014;
				nMenuState = MENU_STATE_LANK;
				nMenuSelect = SELECT_STATE_EASY;
				fMenuSelectNext = true;
			}
			case(SELECT_STATE_017){
				//_017̂Ƃ nSpellCard  SPELL_017 t nMenuState  MENU_STATE_LANK ɑJ
				nSpellCard = SPELL_017;
				nMenuState = MENU_STATE_LANK;
				nMenuSelect = SELECT_STATE_EASY;
				fMenuSelectNext = true;
			}
			case(SELECT_STATE_022){
				//_022̂Ƃ nSpellCard  SPELL_022 t nMenuState  MENU_STATE_LANK ɑJ
				nSpellCard = SPELL_022;
				nMenuState = MENU_STATE_LANK;
				nMenuSelect = SELECT_STATE_EASY;
				fMenuSelectNext = true;
			}
			case(SELECT_STATE_QUIT){
				//QUIT̂Ƃ nMenuState  STAGE_STATE_EXIT ɑJ
				nStageState = STAGE_STATE_EXIT;
				fStageStateNext = true;
			}
			case(SELECT_STATE_EASY){
				//EasŷƂ nSpellLank  SPELL_LANK_EASY t nMenuState  MENU_STATE_NONE ɑJ
				// fStageStateNext trueɂăXe[WXCb`BnStageState  STAGE_STATE_SPELL ɑJ
				nSpellLank = SPELL_LANK_EASY;
				nMenuState = MENU_STATE_NONE;
				nMenuSelect = SELECT_STATE_NONE;
				nStageState = STAGE_STATE_SPELL;
				fMenuSelectNext = true;
				fStageStateNext = true;
			}
			case(SELECT_STATE_NORMAL){
				//Normal̂Ƃ nSpellLank  SPELL_LANK_NORMAL t nMenuState  MENU_STATE_NONE ɑJ
				// fStageStateNext trueɂăXe[WXCb`BnStageState  STAGE_STATE_SPELL ɑJ
				nSpellLank = SPELL_LANK_NORMAL;
				nMenuState = MENU_STATE_NONE;
				nMenuSelect = SELECT_STATE_NONE;
				nStageState = STAGE_STATE_SPELL;
				fMenuSelectNext = true;
				fStageStateNext = true;
			}
			case(SELECT_STATE_HARD){
				//Hard̂Ƃ nSpellLank  SPELL_LANK_HARD t nMenuState  MENU_STATE_NONE ɑJ
				// fStageStateNext trueɂăXe[WXCb`BnStageState  STAGE_STATE_SPELL ɑJ
				nSpellLank = SPELL_LANK_HARD;
				nMenuState = MENU_STATE_NONE;
				nMenuSelect = SELECT_STATE_NONE;
				nStageState = STAGE_STATE_SPELL;
				fMenuSelectNext = true;
				fStageStateNext = true;
			}
			case(SELECT_STATE_LUNATIC){
				//LunatiĉƂ nSpellLank  SPELL_LANK_LUNATIC t nMenuState  MENU_STATE_NONE ɑJ
				// fStageStateNext trueɂăXe[WXCb`BnStageState  STAGE_STATE_SPELL ɑJ
				nSpellLank = SPELL_LANK_LUNATIC;
				nMenuState = MENU_STATE_NONE;
				nMenuSelect = SELECT_STATE_NONE;
				nStageState = STAGE_STATE_SPELL;
				fMenuSelectNext = true;
				fStageStateNext = true;
			}
			case(SELECT_STATE_OMAKE){
				//OmakêƂ nSpellLank  SPELL_LANK_OMAKE t nMenuState  MENU_STATE_NONE ɑJ
				// fStageStateNext trueɂăXe[WXCb`BnStageState  STAGE_STATE_SPELL ɑJ
				nSpellLank = SPELL_LANK_OMAKE;
				nMenuState = MENU_STATE_NONE;
				nMenuSelect = SELECT_STATE_NONE;
				nStageState = STAGE_STATE_SPELL;
				fMenuSelectNext = true;
				fStageStateNext = true;
			}
			PlaySE(SE_OK);
		}
		
		//XL[ꂽƂ
		if(GetKeyState(VK_BOMB) == KEY_PUSH){
			alternative(nMenuState)
			case(MENU_STATE_LANK){
				//MENU_STATE_LANK̂Ƃ nSpellCard NA nMenuState  MENU_STATE_INIT ɑJ
				nMenuSelect = (nSpellCard - SYS_SYSTEM) + SYS_STATE;
				nSpellCard = SPELL_NONE;
				nMenuState = MENU_STATE_INIT;
				fMenuSelectNext = true;
			}
			case(MENU_STATE_INIT){
				//MENU_STATE_INIT̂Ƃ nMenuSelect  SELECT_STATE_QUIT ɑJ
				nSpellCard = SPELL_NONE;
				nMenuSelect = SELECT_STATE_QUIT;
				fMenuSelectNext = true;
			}
			PlaySE(SE_BACK);
		}
		
		yield;
	}
}

//j[̊eI𕔕̃IuWFNg^XN
//   @ Ȃ	
task SelectObject{
	loop{
		let SObj = [];
		alternative(nMenuState)
		case(MENU_STATE_INIT){
			//ALL`Quit܂ł̑I
			ascent(let i in 0..5){
				SObj = SObj ~ [i];
				
				SObj[i] = Obj_Create(OBJ_EFFECT);
				ObjEffect_SetPrimitiveType(SObj[i], PRIMITIVE_TRIANGLESTRIP);
				ObjEffect_CreateVertex(SObj[i], 4);
				ObjEffect_SetTexture(SObj[i],IMG_MENU_SELECT);
				ObjEffect_SetLayer(SObj[i],8);
				
				//Fƈʒu
				if(nMenuSelect == i + SYS_STATE + 1){
					Obj_SetPosition(SObj[i], GetCenterX - 60, GetClipMinY + 32*i + 25);
					
					ObjEffect_SetVertexColor(SObj[i], 0, 255, YELLOW_R, YELLOW_G, YELLOW_B);
					ObjEffect_SetVertexColor(SObj[i], 1, 255, YELLOW_R, YELLOW_G, YELLOW_B);
					ObjEffect_SetVertexColor(SObj[i], 2, 255, YELLOW_R, YELLOW_G, YELLOW_B);
					ObjEffect_SetVertexColor(SObj[i], 3, 255, YELLOW_R, YELLOW_G, YELLOW_B);
				}else{
					Obj_SetPosition(SObj[i], GetCenterX - 55, GetClipMinY + 32*i + 25);
					
					ObjEffect_SetVertexColor(SObj[i], 0, 255, GREY_R, GREY_G, GREY_B);
					ObjEffect_SetVertexColor(SObj[i], 1, 255, GREY_R, GREY_G, GREY_B);
					ObjEffect_SetVertexColor(SObj[i], 2, 255, GREY_R, GREY_G, GREY_B);
					ObjEffect_SetVertexColor(SObj[i], 3, 255, GREY_R, GREY_G, GREY_B);
				}
				
				let nRight = 255;
				let nLeft = 0;
				let nTop = i * 32;
				let nBottom = 31 + nTop;

				let width = (|nRight|) - (|nLeft|);
				let length = (|nBottom|) - (|nTop|);

				let width2 = ceil(width /  2);
				let length2 = ceil(length / 2);

				let width3 = width - width2;
				let length3 = length - length2;

				//lp`Ɋe_̍Wݒ
				ObjEffect_SetVertexXY(SObj[i], 0, -width3, -length3);
				ObjEffect_SetVertexXY(SObj[i], 1, -width3,  length2);
				ObjEffect_SetVertexXY(SObj[i], 2,  width2, -length3);
				ObjEffect_SetVertexXY(SObj[i], 3,  width2,  length2);
					
				//lp`Ɋe_UVlݒB
				ObjEffect_SetVertexUV(SObj[i], 0,  nLeft,  nTop);
				ObjEffect_SetVertexUV(SObj[i], 1,  nLeft, nBottom);
				ObjEffect_SetVertexUV(SObj[i], 2, nRight,  nTop);
				ObjEffect_SetVertexUV(SObj[i], 3, nRight, nBottom);
				
			}
			
			while(fMenuSelectNext == false && fMenuStateNext == false){ yield; }
			yield;
			fMenuSelectNext = false;
		}
		
		case(MENU_STATE_LANK){
			//ALL`Quit܂ł̑I
			ascent(let i in 0..5){
				SObj = SObj ~ [i];
				
				SObj[i] = Obj_Create(OBJ_EFFECT);
				ObjEffect_SetPrimitiveType(SObj[i], PRIMITIVE_TRIANGLESTRIP);
				ObjEffect_CreateVertex(SObj[i], 4);
				ObjEffect_SetTexture(SObj[i],IMG_MENU_SELECT);
				ObjEffect_SetLayer(SObj[i],8);
				
				//Fƈʒu
				if(nSpellCard == i + SYS_SYSTEM + 1){
					Obj_SetPosition(SObj[i], GetCenterX - 60, GetClipMinY + 32*i + 25);
					
					ObjEffect_SetVertexColor(SObj[i], 0, 255, WHITE_R, WHITE_G, WHITE_B);
					ObjEffect_SetVertexColor(SObj[i], 1, 255, WHITE_R, WHITE_G, WHITE_B);
					ObjEffect_SetVertexColor(SObj[i], 2, 255, WHITE_R, WHITE_G, WHITE_B);
					ObjEffect_SetVertexColor(SObj[i], 3, 255, WHITE_R, WHITE_G, WHITE_B);
				}else{
					Obj_SetPosition(SObj[i], GetCenterX - 55, GetClipMinY + 32*i + 25);
					
					ObjEffect_SetVertexColor(SObj[i], 0, 255, GREY_R, GREY_G, GREY_B);
					ObjEffect_SetVertexColor(SObj[i], 1, 255, GREY_R, GREY_G, GREY_B);
					ObjEffect_SetVertexColor(SObj[i], 2, 255, GREY_R, GREY_G, GREY_B);
					ObjEffect_SetVertexColor(SObj[i], 3, 255, GREY_R, GREY_G, GREY_B);
				}
				
				let nRight = 255;
				let nLeft = 0;
				let nTop = i * 32;
				let nBottom = 31 + nTop;

				let width = (|nRight|) - (|nLeft|);
				let length = (|nBottom|) - (|nTop|);

				let width2 = ceil(width /  2);
				let length2 = ceil(length / 2);

				let width3 = width - width2;
				let length3 = length - length2;

				//lp`Ɋe_̍Wݒ
				ObjEffect_SetVertexXY(SObj[i], 0, -width3, -length3);
				ObjEffect_SetVertexXY(SObj[i], 1, -width3,  length2);
				ObjEffect_SetVertexXY(SObj[i], 2,  width2, -length3);
				ObjEffect_SetVertexXY(SObj[i], 3,  width2,  length2);
					
				//lp`Ɋe_UVlݒB
				ObjEffect_SetVertexUV(SObj[i], 0,  nLeft,  nTop);
				ObjEffect_SetVertexUV(SObj[i], 1,  nLeft, nBottom);
				ObjEffect_SetVertexUV(SObj[i], 2, nRight,  nTop);
				ObjEffect_SetVertexUV(SObj[i], 3, nRight, nBottom);
				
			}
			//EASY`OMAKE܂ł̑I
			ascent(let i in 5..10){
				SObj = SObj ~ [i];
				
				SObj[i] = Obj_Create(OBJ_EFFECT);
				ObjEffect_SetPrimitiveType(SObj[i], PRIMITIVE_TRIANGLESTRIP);
				ObjEffect_CreateVertex(SObj[i], 4);
				ObjEffect_SetTexture(SObj[i],IMG_MENU_SELECT);
				ObjEffect_SetLayer(SObj[i],8);
				
				//Fƈʒu
				if(nMenuSelect == i + SYS_STATE + 1){
					Obj_SetPosition(SObj[i], GetCenterX + 55, GetClipMinY + 32*(i-5) + 25);
					
					ObjEffect_SetVertexColor(SObj[i], 0, 255, YELLOW_R, YELLOW_G, YELLOW_B);
					ObjEffect_SetVertexColor(SObj[i], 1, 255, YELLOW_R, YELLOW_G, YELLOW_B);
					ObjEffect_SetVertexColor(SObj[i], 2, 255, YELLOW_R, YELLOW_G, YELLOW_B);
					ObjEffect_SetVertexColor(SObj[i], 3, 255, YELLOW_R, YELLOW_G, YELLOW_B);
				}else{
					Obj_SetPosition(SObj[i], GetCenterX + 60, GetClipMinY + 32*(i-5) + 25);
					
					ObjEffect_SetVertexColor(SObj[i], 0, 255, GREY_R, GREY_G, GREY_B);
					ObjEffect_SetVertexColor(SObj[i], 1, 255, GREY_R, GREY_G, GREY_B);
					ObjEffect_SetVertexColor(SObj[i], 2, 255, GREY_R, GREY_G, GREY_B);
					ObjEffect_SetVertexColor(SObj[i], 3, 255, GREY_R, GREY_G, GREY_B);
				}
				
				let nRight = 255;
				let nLeft = 0;
				let nTop = i * 32;
				let nBottom = 31 + nTop;

				let width = (|nRight|) - (|nLeft|);
				let length = (|nBottom|) - (|nTop|);

				let width2 = ceil(width /  2);
				let length2 = ceil(length / 2);

				let width3 = width - width2;
				let length3 = length - length2;

				//lp`Ɋe_̍Wݒ
				ObjEffect_SetVertexXY(SObj[i], 0, -width3, -length3);
				ObjEffect_SetVertexXY(SObj[i], 1, -width3,  length2);
				ObjEffect_SetVertexXY(SObj[i], 2,  width2, -length3);
				ObjEffect_SetVertexXY(SObj[i], 3,  width2,  length2);
					
				//lp`Ɋe_UVlݒB
				ObjEffect_SetVertexUV(SObj[i], 0,  nLeft,  nTop);
				ObjEffect_SetVertexUV(SObj[i], 1,  nLeft, nBottom);
				ObjEffect_SetVertexUV(SObj[i], 2, nRight,  nTop);
				ObjEffect_SetVertexUV(SObj[i], 3, nRight, nBottom);
				
			}
			
			while(fMenuSelectNext == false && fMenuStateNext == false){ yield; }
			yield;
			fMenuSelectNext = false;
			
		}
		
		yield;
		ascent(let i in 0..length(SObj)){
			Obj_Delete(SObj[i]);
		}
		if(nStageState != STAGE_STATE_MENU){ break; }
	}
}

//j[̔wĩIuWFNg^XN
//   @ Ȃ	
task MenuBG{
	loop{
		let BGObj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetPrimitiveType(BGObj, PRIMITIVE_TRIANGLESTRIP);//v~eBu^Cvݒ
		ObjEffect_CreateVertex(BGObj, 4);//_4
		ObjEffect_SetTexture(BGObj,IMG_MENU_BG);
		ObjEffect_SetLayer(BGObj,8);
		
		let nRight = 640;
		let nLeft = 0;
		let nTop = 0;
		let nBottom = 480;

		let width = (|nRight|) - (|nLeft|);
		let length = (|nBottom|) - (|nTop|);
		let width2 = ceil(width /  2);
		let length2 = ceil(length / 2);
		let width3 = width - width2;
		let length3 = length - length2;

		//lp`Ɋe_̍Wݒ
		ObjEffect_SetVertexXY(BGObj, 0, -width3*1, -length3*1);
		ObjEffect_SetVertexXY(BGObj, 1, -width3*1,  length2*1);
		ObjEffect_SetVertexXY(BGObj, 2,  width2*1, -length3*1);
		ObjEffect_SetVertexXY(BGObj, 3,  width2*1,  length2*1);
			
		//lp`Ɋe_UVlݒB
		ObjEffect_SetVertexUV(BGObj, 0,  nLeft,  nTop);
		ObjEffect_SetVertexUV(BGObj, 1,  nLeft, nBottom);
		ObjEffect_SetVertexUV(BGObj, 2, nRight,  nTop);
		ObjEffect_SetVertexUV(BGObj, 3, nRight, nBottom);
		Obj_SetPosition(BGObj, 320, 240);
		while(1){
			yield;
			if(nStageState != STAGE_STATE_MENU){ Obj_Delete(BGObj); break; }
		}
		break;
	}
}

//j[̃eLXg̃IuWFNg^XN
//   @ Ȃ	
task MenuTEXT{
	loop{
		let nSetMenuText = 0;
		//eLXg̑I
		//nMenuSelectɒl_014`_022Ȃ΂猈
		//łȂȂnSpellCard猈
		alternative(nMenuSelect)
		case(SELECT_STATE_014){
			nSetMenuText = 0;
		}
		case(SELECT_STATE_017){
			nSetMenuText = 1;
		}
		case(SELECT_STATE_022){
			nSetMenuText = 2;
		}
		others{
			alternative(nSpellCard)		case(SPELL_014)	{ nSetMenuText = 0; }
							case(SPELL_017)	{ nSetMenuText = 1; }
							case(SPELL_022)	{ nSetMenuText = 2; }
							others		{ nSetMenuText = 4; }	//^eLXg
		}
		
		
		let TXObj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetPrimitiveType(TXObj, PRIMITIVE_TRIANGLESTRIP);//v~eBu^Cvݒ
		ObjEffect_CreateVertex(TXObj, 4);//_4
		ObjEffect_SetTexture(TXObj,IMG_MENU_TEXT);
		ObjEffect_SetLayer(TXObj,8);
		
		let nRight = 620;
		let nLeft = 0;
		let nTop = 144 * nSetMenuText;
		let nBottom = nTop + 143;

		let width = (|nRight|) - (|nLeft|);
		let length = (|nBottom|) - (|nTop|);
		let width2 = ceil(width /  2);
		let length2 = ceil(length / 2);
		let width3 = width - width2;
		let length3 = length - length2;

		//lp`Ɋe_̍Wݒ
		ObjEffect_SetVertexXY(TXObj, 0, -width3, -length3);
		ObjEffect_SetVertexXY(TXObj, 1, -width3,  length2);
		ObjEffect_SetVertexXY(TXObj, 2,  width2, -length3);
		ObjEffect_SetVertexXY(TXObj, 3,  width2,  length2);
			
		//lp`Ɋe_UVlݒB
		ObjEffect_SetVertexUV(TXObj, 0,  nLeft,  nTop);
		ObjEffect_SetVertexUV(TXObj, 1,  nLeft, nBottom);
		ObjEffect_SetVertexUV(TXObj, 2, nRight,  nTop);
		ObjEffect_SetVertexUV(TXObj, 3, nRight, nBottom);
		
		ObjEffect_SetVertexColor(TXObj, 0, 255, PINK_R, PINK_G, PINK_B);
		ObjEffect_SetVertexColor(TXObj, 1, 255, PINK_R, PINK_G, PINK_B);
		ObjEffect_SetVertexColor(TXObj, 2, 255, PINK_R, PINK_G, PINK_B);
		ObjEffect_SetVertexColor(TXObj, 3, 255, PINK_R, PINK_G, PINK_B);
		
		Obj_SetPosition(TXObj, 320, 360);
		
		while(fMenuSelectNext == false && fMenuStateNext == false && fStageStateNext == false){ yield; }
		yield;
		fMenuSelectNext = false;
		Obj_Delete(TXObj);
		if(nStageState != STAGE_STATE_MENU){ Obj_Delete(TXObj); break; }
		
	}
}

//̊֐E^XNQŗp摜̓ǂݍ
//   @ Ȃ	
sub LoadGraphic_Menu{
	LoadGraphic(IMG_MENU_SELECT);
	LoadGraphic(IMG_MENU_TEXT);
	LoadGraphic(IMG_MENU_BG);
}




