#include "./SceneCommon.txt"

@Initialize
{
	SetAutoDeleteObject(true);
	T_BackgroundReplaySelect();
	T_ReplaySelectScene();
	UnderExplain;
	SetScriptResult("");
}

@MainLoop
{

	yield;
}

@Finalize
{
}

task T_BackgroundReplaySelect()
{
	//wi
	let dir = GetCurrentScriptDirectory();
	let pathTitle = dir ~ "../../img/title.png";
	let objImage = ObjPrim_Create(OBJ_SPRITE_2D);
	Obj_SetRenderPriorityI(objImage,1);
	ObjPrim_SetTexture(objImage,pathTitle);
	ObjSprite2D_SetSourceRect(objImage,0,0,640,480);
	ObjSprite2D_SetDestRect(objImage,0,0,640,480);
	
	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_NONE);
	Obj_SetRenderPriorityI(objText,30);
	ObjRender_SetX(objText,14);
	ObjRender_SetY(objText,14);
	ObjText_SetFontType(objText,"lr ");
}

//----------------------------------------------------
// vCI
//----------------------------------------------------
task T_ReplaySelectScene
{
	LoadReplayList();
	let listValidReplayIndex = GetValidReplayIndices();
	let cursorY = 0;
	let page = 0;
	let countMaxItem = length(listValidReplayIndex);
	let countItemPerPage = 16;
	let pageMax = trunc((countMaxItem - 1) / countItemPerPage);
	pageMax = max(pageMax,0);
	let lastPageMaxCursorY = trunc(countMaxItem % countItemPerPage);
	if(countMaxItem % countItemPerPage == 0)
	{
		lastPageMaxCursorY = countItemPerPage;
	}
	
	task T_MenuItem(let itemY)
	{
		let mx=14;
		let objText = CreateTextObject(mx,13+39 + 25 * itemY,18,"");
		let oldPage = -1;
		let AlphaRate = 1;
		loop
		{
			if(page != oldPage)
			{
				let text = "";
				let indexList = page * countItemPerPage + itemY;
				if(indexList < countMaxItem)
				{
					let indexReplay = listValidReplayIndex[indexList];
					if(IsValidReplayIndex(indexReplay))
					{
						text = rtos("000",GetReplayInfo(indexReplay,REPLAY_COMMENT)) ~ " ";
						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);
				oldPage = page;
			}
			
			Obj_SetVisible(objText,1);
			if(cursorY == itemY)
			{
				ObjRender_SetAlpha(objText,255*AlphaRate);
//				ObjText_SetFontBorderType(obj,BORDER_FULL);
				ObjText_SetFontSize(objText,18);
			}
			else
			{
				ObjRender_SetAlpha(objText,255*AlphaRate*0.6);
//				ObjText_SetFontBorderType(obj,BORDER_NONE);
				ObjText_SetFontSize(objText,16);
			}
			
			yield;
		}
		Obj_Delete(objText);
	}
	
	ascent(iItem in 0 .. countItemPerPage)
	{
		T_MenuItem(iItem);
	}
	
	// L[ԂZbg܂őҋ@
	while(GetVirtualKeyState(VK_OK) != KEY_FREE){	yield;	}
	
	//L[
	let frameKeyHold = 0;	// L[ςȂt[
	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 UnderExplain
{
	let obj = CreateTextObject(14,464,12,"Shot:  User1:߂  Cancel:߂");
	Obj_SetRenderPriorityI(obj,30);
	let Alpha = 255;
	let AlphaAngle=0;
	
	loop
	{
		ObjRender_SetAlpha(obj,200+55*cos(AlphaAngle));
		AlphaAngle += 2;
		yield;
	}
	Obj_Delete(obj);
}
