68 lines
2.9 KiB
C#
68 lines
2.9 KiB
C#
using Microsoft.FSharp.Core;
|
|
using Websockets.ServiceModels.Types;
|
|
using GameboardTypes = Gameboard.Shogi.Api.ServiceModels.Types;
|
|
|
|
namespace Websockets.Managers.Utility
|
|
{
|
|
public static class Mapper
|
|
{
|
|
public static GameboardTypes.Move Map(Move source)
|
|
{
|
|
var from = source.From;
|
|
var to = source.To;
|
|
FSharpOption<GameboardTypes.PieceName> pieceFromCaptured = source.PieceFromCaptured switch
|
|
{
|
|
"B" => new FSharpOption<GameboardTypes.PieceName>(GameboardTypes.PieceName.Bishop),
|
|
"G" => new FSharpOption<GameboardTypes.PieceName>(GameboardTypes.PieceName.GoldenGeneral),
|
|
"K" => new FSharpOption<GameboardTypes.PieceName>(GameboardTypes.PieceName.King),
|
|
"k" => new FSharpOption<GameboardTypes.PieceName>(GameboardTypes.PieceName.Knight),
|
|
"L" => new FSharpOption<GameboardTypes.PieceName>(GameboardTypes.PieceName.Lance),
|
|
"P" => new FSharpOption<GameboardTypes.PieceName>(GameboardTypes.PieceName.Pawn),
|
|
"R" => new FSharpOption<GameboardTypes.PieceName>(GameboardTypes.PieceName.Rook),
|
|
"S" => new FSharpOption<GameboardTypes.PieceName>(GameboardTypes.PieceName.SilverGeneral),
|
|
_ => null
|
|
};
|
|
var target = new GameboardTypes.Move
|
|
{
|
|
Origin = new GameboardTypes.BoardLocation { X = from.X, Y = from.Y },
|
|
Destination = new GameboardTypes.BoardLocation { X = to.X, Y = to.Y },
|
|
IsPromotion = source.IsPromotion,
|
|
PieceFromCaptured = pieceFromCaptured
|
|
};
|
|
return target;
|
|
}
|
|
|
|
public static Move Map(GameboardTypes.Move source)
|
|
{
|
|
var origin = source.Origin;
|
|
var destination = source.Destination;
|
|
string pieceFromCaptured = null;
|
|
if (source.PieceFromCaptured != null)
|
|
{
|
|
pieceFromCaptured = source.PieceFromCaptured.Value switch
|
|
{
|
|
GameboardTypes.PieceName.Bishop => "B",
|
|
GameboardTypes.PieceName.GoldenGeneral => "G",
|
|
GameboardTypes.PieceName.King => "K",
|
|
GameboardTypes.PieceName.Knight => "k",
|
|
GameboardTypes.PieceName.Lance => "L",
|
|
GameboardTypes.PieceName.Pawn => "P",
|
|
GameboardTypes.PieceName.Rook => "R",
|
|
GameboardTypes.PieceName.SilverGeneral => "S",
|
|
_ => ""
|
|
};
|
|
}
|
|
|
|
var target = new Move
|
|
{
|
|
From = new Coords { X = origin.X, Y = origin.Y },
|
|
To = new Coords { X = destination.X, Y = destination.Y },
|
|
IsPromotion = source.IsPromotion,
|
|
PieceFromCaptured = pieceFromCaptured
|
|
};
|
|
|
|
return target;
|
|
}
|
|
}
|
|
}
|