259 lines
12 KiB
Plaintext
259 lines
12 KiB
Plaintext
@Initialize
|
|
{
|
|
SetAutoDeleteObject(true);
|
|
|
|
TBackground();
|
|
TReplaySelectScene();
|
|
|
|
SetScriptResult("");
|
|
}
|
|
|
|
|
|
@MainLoop
|
|
{
|
|
|
|
yield;
|
|
}
|
|
|
|
@Finalize
|
|
{
|
|
}
|
|
|
|
task TBackground()
|
|
{
|
|
//背景
|
|
let dir = GetCurrentScriptDirectory();
|
|
let pathTitle = dir ~ "Title.png";
|
|
|
|
let objImage = ObjPrim_Create(OBJ_SPRITE_2D); //2Dスプライトオブジェクト生成
|
|
Obj_SetRenderPriorityI(objImage, 20); //描画優先度を設定
|
|
ObjPrim_SetTexture(objImage, pathTitle); //テクスチャを設定
|
|
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, "リプレイ選択");
|
|
ObjText_SetFontSize(objText, 24);
|
|
ObjText_SetFontBold(objText, true);
|
|
ObjText_SetFontColorTop(objText, 128, 128, 255);
|
|
ObjText_SetFontColorBottom(objText, 64, 64, 255);
|
|
ObjText_SetFontBorderType(objText, BORDER_FULL);
|
|
ObjText_SetFontBorderColor(objText,255, 255, 255);
|
|
ObjText_SetFontBorderWidth(objText, 2);
|
|
Obj_SetRenderPriorityI(objText, 30);
|
|
ObjRender_SetX(objText, 16);
|
|
ObjRender_SetY(objText, 16);
|
|
}
|
|
|
|
|
|
//----------------------------------------------------
|
|
// リプレイ選択
|
|
//----------------------------------------------------
|
|
task TReplaySelectScene
|
|
{
|
|
LoadReplayList();
|
|
let listValidReplayIndex = GetValidReplayIndices();
|
|
|
|
let cursorY = 0;
|
|
let page = 0;
|
|
let countMaxItem = length(listValidReplayIndex);
|
|
let countItemPerPage = 20;
|
|
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 objText = CreateTextObject(32, 64 + 16 * itemY, 14, "");
|
|
ObjText_SetFontBorderWidth(objText, 1);
|
|
let objSelect = CreateTextObject(32, 64 + 16 * itemY, 14, "");
|
|
ObjText_SetFontBorderWidth(objSelect, 1);
|
|
ObjRender_SetBlendType(objSelect, BLEND_ADD_RGB);
|
|
|
|
let oldPage = -1;
|
|
loop
|
|
{
|
|
if(page != oldPage)
|
|
{
|
|
let text = "";
|
|
let indexList = page * countItemPerPage + itemY;
|
|
if(indexList < countMaxItem)
|
|
{
|
|
let indexReplay = listValidReplayIndex[indexList];
|
|
if(IsValidReplayIndex(indexReplay))
|
|
{
|
|
text = rtos("00", indexReplay) ~ " ";
|
|
text = text ~ vtos("-8s", GetReplayInfo(indexReplay, REPLAY_USER_NAME)) ~ " ";
|
|
text = text ~ rtos("000000000000", 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);
|
|
ObjText_SetText(objSelect, text);
|
|
oldPage = page;
|
|
}
|
|
|
|
if(page == pageMax && itemY >= lastPageMaxCursorY)
|
|
{
|
|
Obj_SetVisible(objText, false);
|
|
Obj_SetVisible(objSelect, false);
|
|
}
|
|
else
|
|
{
|
|
Obj_SetVisible(objText, true);
|
|
Obj_SetVisible(objSelect, itemY == cursorY);
|
|
}
|
|
|
|
yield;
|
|
}
|
|
Obj_Delete(objText);
|
|
Obj_Delete(objSelect);
|
|
}
|
|
|
|
ascent(let iItem in 0 .. countItemPerPage)
|
|
{
|
|
TMenuItem(iItem);
|
|
}
|
|
|
|
//キー状態がリセットされるまで待機
|
|
while(GetVirtualKeyState(VK_OK) != KEY_FREE){yield;}
|
|
|
|
//キー処理
|
|
let frameKeyHold = 0;//キー押しっぱなしフレーム数
|
|
loop
|
|
{
|
|
//決定
|
|
if(GetVirtualKeyState(VK_OK) == KEY_PULL)
|
|
{
|
|
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_PULL)
|
|
{
|
|
//キャンセル
|
|
CloseScript(GetOwnScriptID());
|
|
break;
|
|
}
|
|
|
|
//カーソル移動
|
|
if(GetVirtualKeyState(VK_UP) == KEY_PUSH || GetVirtualKeyState(VK_UP) == KEY_HOLD)
|
|
{
|
|
frameKeyHold++;
|
|
if(GetVirtualKeyState(VK_UP) == KEY_PUSH ||
|
|
frameKeyHold == 20 ||
|
|
(frameKeyHold > 20 && (frameKeyHold % 5 == 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 % 5 == 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 % 5 == 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 % 5 == 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;
|
|
}
|
|
}
|
|
|
|
|
|
//----------------------------------------------------
|
|
// ユーティリティ
|
|
//----------------------------------------------------
|
|
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, 128, 128, 255);
|
|
ObjText_SetFontColorBottom(obj, 64, 64, 255);
|
|
ObjText_SetFontBorderType(obj, BORDER_FULL);
|
|
ObjText_SetFontBorderColor(obj,255, 255, 255);
|
|
ObjText_SetFontBorderWidth(obj, 2);
|
|
Obj_SetRenderPriorityI(obj, 40);
|
|
ObjRender_SetX(obj, mx);
|
|
ObjRender_SetY(obj, my);
|
|
return obj;
|
|
}
|
|
|