59 lines
1.2 KiB
C#
59 lines
1.2 KiB
C#
using Shogi.Contracts.Api;
|
|
using Shogi.UI.Pages.Home.Api;
|
|
|
|
namespace Shogi.UI.Pages.Home;
|
|
|
|
public class PromotePrompt
|
|
{
|
|
private readonly IShogiApi shogiApi;
|
|
private string? sessionName;
|
|
private MovePieceCommand? command;
|
|
|
|
public PromotePrompt(IShogiApi shogiApi)
|
|
{
|
|
this.shogiApi = shogiApi;
|
|
IsVisible = false;
|
|
OnClickCancel = Hide;
|
|
}
|
|
|
|
public bool IsVisible { get; private set; }
|
|
public Action OnClickCancel;
|
|
public Func<Task>? OnClickNo;
|
|
public Func<Task>? OnClickYes;
|
|
|
|
public void Show(string sessionName, MovePieceCommand command)
|
|
{
|
|
this.sessionName = sessionName;
|
|
this.command = command;
|
|
IsVisible = true;
|
|
OnClickNo = Move;
|
|
OnClickYes = MoveAndPromote;
|
|
}
|
|
|
|
public void Hide()
|
|
{
|
|
IsVisible = false;
|
|
OnClickNo = null;
|
|
OnClickYes = null;
|
|
}
|
|
|
|
private Task Move()
|
|
{
|
|
if (command != null && sessionName != null)
|
|
{
|
|
command.IsPromotion = false;
|
|
return shogiApi.Move(sessionName, command);
|
|
}
|
|
return Task.CompletedTask;
|
|
}
|
|
private Task MoveAndPromote()
|
|
{
|
|
if (command != null && sessionName != null)
|
|
{
|
|
command.IsPromotion = true;
|
|
return shogiApi.Move(sessionName, command);
|
|
}
|
|
return Task.CompletedTask;
|
|
}
|
|
}
|