@Initialize
{
	SetAutoDeleteObject(true);

	TBackground();
	TReplaySelectScene();
	UnderExplain;
	SetScriptResult("");
}


@MainLoop
{

	yield;
}

@Finalize
{
}

task TBackground()
{
	//wi
	let dir = GetCurrentScriptDirectory();
	let pathTitle = dir ~ "img/Title.png";

	let objImage = ObjPrim_Create(OBJ_SPRITE_2D); //2DXvCgIuWFNg
	Obj_SetRenderPriorityI(objImage, 1); //`Dxݒ
	ObjPrim_SetTexture(objImage, pathTitle); //eNX`ݒ
	ObjSprite2D_SetSourceRect(objImage, 0, 0, 640, 480);
	ObjSprite2D_SetDestRect(objImage, 0, 0, 640, 480);
//	ObjRender_SetAlpha(objImage, 64);

	let objText = ObjText_Create();
	ObjText_SetText(objText, "vCI");
	ObjText_SetFontSize(objText, 24);
	ObjText_SetFontBold(objText, true);
	ObjText_SetFontColorTop(objText, 255, 255, 255);
	ObjText_SetFontColorBottom(objText, 160, 160, 255);
//	ObjText_SetFontBorderType(objText, BORDER_FULL);
	ObjText_SetFontBorderType(objText, BORDER_NONE);
	ObjText_SetFontBorderColor(objText,255, 255, 255);
	ObjText_SetFontBorderWidth(objText, 2*0);
	Obj_SetRenderPriorityI(objText, 30);
	ObjRender_SetX(objText, 14);
	ObjRender_SetY(objText, 14);

	ObjText_SetFontType(objText,"lr ");
}


//----------------------------------------------------
// vCI
//----------------------------------------------------
task TReplaySelectScene
{
	LoadReplayList();
	let listValidReplayIndex = GetValidReplayIndices();

	let cursorY = 0;
	let page = 0;

	let countMaxItem = length(listValidReplayIndex);
	let countItemPerPage = 14;
	let pageMax = trunc((countMaxItem - 1) / countItemPerPage);
	pageMax = max(pageMax, 0);
	let lastPageMaxCursorY = trunc(countMaxItem % countItemPerPage);
	if(countMaxItem % countItemPerPage == 0)
	{
		lastPageMaxCursorY = countItemPerPage;
	}

	task TMenuItem(let itemY)
	{
		let mx=14;
		let objText = CreateTextObject(mx, 13+39 + 25 * itemY, 18, "");

		let oldPage = -1;
		let Alpha=0;
		loop
		{
			if(page != oldPage)
			{
				let text = "";
				let indexList = page * countItemPerPage + itemY;
				if(indexList < countMaxItem)
				{
					let indexReplay = listValidReplayIndex[indexList];
					if(IsValidReplayIndex(indexReplay))
					{
						text = GetReplayInfo(indexReplay, REPLAY_COMMENT)[0..3] ~ " ";
						//text = rtos("000",IntToString(indexList)) ~ " ";
						text = text ~ vtos("-8s", GetReplayInfo(indexReplay, REPLAY_USER_NAME)) ~ " ";
						text = text ~ rtos("0000000000000", GetReplayInfo(indexReplay, REPLAY_TOTAL_SCORE)) ~ " ";
						text = text ~ vtos("-8s", GetReplayInfo(indexReplay, REPLAY_PLAYER_NAME)) ~ " ";
						text = text ~ vtos("03.2f", GetReplayInfo(indexReplay, REPLAY_FPS_AVERAGE)) ~ "fps ";
						text = text ~ GetReplayInfo(indexReplay, REPLAY_DATE_TIME) ~ " ";
					}
				}

				ObjText_SetText(objText, text);

				let dir=1;
				if(oldPage+1==page || (page==0 && oldPage==pageMax) )
				{
					dir=1;
				}
				else
				{
					dir=-1;
				}
					
				if(cursorY==itemY)
				{
					CreateEffectText(mx,13+39 + 25 * itemY,text,dir,255,255,255,Alpha);
				}
				else
				{
					CreateEffectText(mx,13+39 + 25 * itemY,text,dir,255,255,255,Alpha*0.6);
				}
				CtrlAlpha(dir);

				oldPage = page;
			}
			
			Obj_SetVisible(objText,1);
			if(cursorY==itemY)
			{
				ObjRender_SetAlpha(objText,Alpha);
				let indexReplay = listValidReplayIndex[page * countItemPerPage + itemY];
				DrawSpellInfo(GetReplayInfo(indexReplay, REPLAY_COMMENT));
			}
			else
			{
				ObjRender_SetAlpha(objText,Alpha*0.6);			
			}

			yield;
		}
		Obj_Delete(objText);

		task DrawSpellInfo(Text)
		{
			let Name="gpҁF@";
			let SpellName;
			loop(3)
			{
				Text=erase(Text,0);
			}

			while(Text[0..2]!="{")
			{
				Name=Name~Text[0..2];
				Text=erase(Text,0);
				Text=erase(Text,0);
			}
			Text=erase(Text,0);
			Text=erase(Text,0);
			SpellName=Text;

			CreateText(14,410,Name);
			CreateText(6,432,SpellName);

			task CreateText(x,y,text)
			{
				let obj = ObjText_Create();
				ObjText_SetText(obj, text);
				ObjText_SetFontSize(obj, 18);
				ObjText_SetFontBold(obj, true);
				ObjText_SetFontBorderType(obj, BORDER_NONE);
				ObjText_SetFontBorderColor(obj,255, 255, 255);
				ObjText_SetFontBorderWidth(obj, 0);
				ObjText_SetFontColorTop(obj, 255, 255, 255);
				ObjText_SetFontColorBottom(obj, 255, 160, 255);
				Obj_SetRenderPriorityI(obj, 100);
				ObjRender_SetX(obj, x);
				ObjRender_SetY(obj, y);
				ObjText_SetFontType(obj,"lr ");

				let Alpha=255;
				let AlphaAngle=0;
				if(cursorY!=itemY)
				{
					Obj_Delete(obj);	
					return;	
				}
				yield;
				Obj_Delete(obj);
			}
		}	

		task CtrlAlpha(dir)
		{
			mx = 14+100*dir;
			Alpha=0;
			loop(10)
			{
				mx-=10*dir;
				Alpha+=255/10;
				yield;
			}
		}

		task CreateEffectText(let mx, let my, let text,dir,R,G,B,Alpha)
		{
			let obj = ObjText_Create();
			ObjText_SetText(obj, text);
			ObjText_SetFontSize(obj, 14+4);
			ObjText_SetFontBold(obj, true);
			ObjText_SetFontColorTop(obj, 255, 255, 255);
			ObjText_SetFontColorBottom(obj, 160, 160, 255);
			ObjText_SetFontBorderColor(obj,255, 255, 255);
			ObjText_SetFontBorderWidth(obj, 2*0);
			Obj_SetRenderPriorityI(obj, 40);
			ObjRender_SetX(obj, mx);
			ObjRender_SetY(obj, my);
			ObjText_SetFontType(obj,"lr ");
			ObjText_SetFontBorderType(obj, BORDER_NONE);

			let BaseAlpha=Alpha;
			loop(10)
			{
				mx-=100/10*dir;
				Alpha-=BaseAlpha/10;
				ObjRender_SetX(obj, mx);	
				ObjRender_SetAlpha(obj,Alpha);
				yield;
			}
			Obj_Delete(obj);
		}
	}

	ascent(let iItem in 0 .. countItemPerPage)
	{
		TMenuItem(iItem);
	}


	//L[ԂZbg܂őҋ@
	while(GetVirtualKeyState(VK_OK) != KEY_FREE){yield;}

	//L[
	let frameKeyHold = 0;//L[ςȂt[
	SelectEffect;
	PageDraw;

	if(!IsCommonDataAreaExists("ReplaySelect")){CreateCommonDataArea("ReplaySelect");}

	cursorY=GetAreaCommonData("ReplaySelect","CursorY",cursorY);
	page=GetAreaCommonData("ReplaySelect","Page",page);

	loop
	{
		SetAreaCommonData("ReplaySelect","CursorY",cursorY);
		SetAreaCommonData("ReplaySelect","Page",page);
		//
		if(GetVirtualKeyState(VK_OK) == KEY_PUSH)
		{
			let indexList = page * countItemPerPage + cursorY;
			if(indexList < countMaxItem) 
			{
				let indexReplay = listValidReplayIndex[indexList];
				let pathReplay = GetReplayInfo(indexReplay, REPLAY_FILE_PATH);
				SetScriptResult(pathReplay);
				CloseScript(GetOwnScriptID());
				break;
			}
		}

		if(GetVirtualKeyState(VK_CANCEL) == KEY_PUSH)
		{
			//LZ
			yield;
			CloseScript(GetOwnScriptID());
			break;
		}
		if(GetVirtualKeyState(VK_USER1) == KEY_PUSH)
		{
			//LZ
			yield;
			CloseScript(GetOwnScriptID());
			break;
		}

		//J[\ړ
		if(GetVirtualKeyState(VK_UP) == KEY_PUSH || GetVirtualKeyState(VK_UP) == KEY_HOLD)
		{
			frameKeyHold++;
			if(GetVirtualKeyState(VK_UP) == KEY_PUSH ||
				frameKeyHold == 20 ||
				 (frameKeyHold > 20 && (frameKeyHold % 8 == 0)))
			{
				cursorY--;
			}
		}
		else if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH || GetVirtualKeyState(VK_DOWN) == KEY_HOLD)
		{
			frameKeyHold++;
			if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH ||
				frameKeyHold == 20 ||
				 (frameKeyHold > 20 && (frameKeyHold % 8 == 0)))
			{
				cursorY++;
			}
		}
		else if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH || GetVirtualKeyState(VK_LEFT) == KEY_HOLD)
		{
			frameKeyHold++;
			if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH ||
				frameKeyHold == 20 ||
				 (frameKeyHold > 20 && (frameKeyHold % 8 == 0)))
			{
				page--;
			}
		}
		else if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH || GetVirtualKeyState(VK_RIGHT) == KEY_HOLD)
		{
			frameKeyHold++;
			if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH ||
				frameKeyHold == 20 ||
				 (frameKeyHold > 20 && (frameKeyHold % 8 == 0)))
			{
				page++;
			}
		}
		else
		{
			frameKeyHold = 0;
		}

		if(page < 0)
		{
			page = pageMax;
		}
		else if(page > pageMax)
		{
			page = 0;
		}

		if(page != pageMax)
		{
			if(cursorY < 0)
			{
				cursorY = countItemPerPage - 1;
			}
			else if(cursorY >= countItemPerPage)
			{
				cursorY = 0;
			}
		}
		else
		{
			if(cursorY < 0)
			{
				cursorY = lastPageMaxCursorY - 1;
			}
			else if(cursorY >= lastPageMaxCursorY)
			{
				cursorY = 0;
			}
		}

		yield;
	}

	task PageDraw
	{
	let objText = CreateTextObject(480, 14, 24,"Page@"~"1 / "~IntToString(pageMax+1));
	loop
	{
	ObjText_SetText(objText, "Page@"~IntToString(page+1)~" / "~IntToString(pageMax+1));
	yield;
	}
	}

	task SelectEffect
	{
		let x=0;
		let y=0;
		loop
		{
			y=13+39+25*cursorY;
		//	Light(rand(0,640),y+rand(0,16),rand(1,3),180+rand(-5,5));
			Light(rand(0,640),y+rand(15,16),rand(1,2)/3,270+rand(-5,5));
			Light(rand(0,640),y+rand(1,0),rand(1,2)/3,90+rand(-5,5));
			yield;
		}

		task Band
		{

		}

		task Light(X,Y,speed,angle)
		{
		let obj = ObjPrim_Create(OBJ_PRIMITIVE_2D);
		ObjPrim_SetTexture(obj, GetCurrentScriptDirectory~"../img/effect/star.png");
		ObjPrim_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
		ObjPrim_SetVertexCount(obj, 4);
		ObjRender_SetBlendType(obj, BLEND_ADD_RGB);
		ObjRender_SetAngleZ(obj,0);
		Obj_SetRenderPriorityI(obj, 60);

		ObjPrim_SetVertexPosition(obj, 0, -16, -16, -0);
		ObjPrim_SetVertexPosition(obj, 1, -16, 16, -0);
		ObjPrim_SetVertexPosition(obj, 2, 16, -16, 0);
		ObjPrim_SetVertexPosition(obj, 3, 16,16, 0);

		ObjPrim_SetVertexUVT(obj, 0, 0, 0);
		ObjPrim_SetVertexUVT(obj, 1, 0, 32);
		ObjPrim_SetVertexUVT(obj, 2, 32, 0);
		ObjPrim_SetVertexUVT(obj, 3, 32, 32);
		ObjRender_SetPosition(obj,X,Y,0);

		let scale=0.5;
		let Alpha=180;
		let Zangle=0;
		let ZanglePlus=rand(-5,5);

		loop(30)
		{
			scale-=0.5/30;
			Zangle+=ZanglePlus;
			ObjRender_SetPosition(obj,ObjRender_GetX(obj)+speed*cos(angle),ObjRender_GetY(obj)+speed*sin(angle),0);
			ObjRender_SetScaleXYZ(obj,scale,scale,scale);
			ObjRender_SetAngleZ(obj,Zangle);
			ObjRender_SetColor(obj,Alpha*0.75,Alpha*0.75,Alpha);
			yield;
		}
		Obj_Delete(obj);
		}
	}
}


//----------------------------------------------------
// [eBeB
//----------------------------------------------------
function CreateTextObject(let mx, let my, let size, let text)
{
	let obj = ObjText_Create();
	ObjText_SetText(obj, text);
	ObjText_SetFontSize(obj, size);
	ObjText_SetFontBold(obj, true);
	ObjText_SetFontColorTop(obj, 255, 255, 255);
	ObjText_SetFontColorBottom(obj, 160, 160, 255);
	ObjText_SetFontBorderType(obj, BORDER_NONE);
	ObjText_SetFontBorderColor(obj,255, 255, 255);
	ObjText_SetFontBorderWidth(obj, 2*0);
	Obj_SetRenderPriorityI(obj, 40);
	ObjRender_SetX(obj, mx);
	ObjRender_SetY(obj, my);

	ObjText_SetFontType(obj,"lr ");
	return obj;
}

task UnderExplain
{
	let obj = ObjText_Create();
	ObjText_SetText(obj, "Shot Decide  User1 Back  Cancel Back");
	ObjText_SetFontSize(obj, 12);
	ObjText_SetFontBold(obj, true);
	ObjText_SetFontBorderType(obj, BORDER_NONE);
	ObjText_SetFontBorderColor(obj,255, 255, 255);
	ObjText_SetFontBorderWidth(obj, 0);
	Obj_SetRenderPriorityI(obj, 30);
	ObjRender_SetX(obj, 14);
	ObjRender_SetY(obj, 464);
	let Alpha=255;
	let AlphaAngle=0;

	loop
	{
		ObjRender_SetAlpha(obj,200+55*cos(AlphaAngle));
		AlphaAngle+=2;
		yield;
	}
	Obj_Delete(obj);

}