This commit is contained in:
Christian Kauer 2023-12-30 11:51:54 +01:00
parent 7a3d73ce66
commit f6348a847d
4 changed files with 42 additions and 16 deletions

View File

@ -21,27 +21,29 @@ namespace GameHandler
{ {
public class GameService public class GameService
{ {
private IContainer _rootContainer { get; set; } private readonly IContainer? _rootContainer;
private bool _isStarted = false; private bool _isStarted = false;
private ILifetimeScope _scope; private ILifetimeScope? _scope;
private IGameHandler _gh; private IGameHandler? _gh;
private ThrowHandler _th; private ThrowHandler? _th;
private ExpenseHandler _eh; private ExpenseHandler? _eh;
private GameStateHandler _gameStateHandler; private GameStateHandler? _gameStateHandler;
private Game _game; private Game? _game;
public GameState GameModel { get => _gameStateHandler.GameState; } public GameState? GameModel { get => _gameStateHandler?.GameState; }
public GameService(IContainer rootContainer = null) public bool FreePlayerSelection => _gh != null && _gh.FreePlayerSelection();
public GameService(IContainer? rootContainer = null)
{ {
_rootContainer = rootContainer; this._rootContainer = rootContainer;
} }
public string ThrowModeName public string ThrowModeName
{ {
get get
{ {
if (_gameStateHandler.GameState != null) if (_gameStateHandler?.GameState != null)
{ {
return _gameStateHandler.GameState.ThrowState.BoardState.ThrowMode == ThrowMode.Decrease ? "Abräumen" : "Volle"; return _gameStateHandler.GameState.ThrowState.BoardState.ThrowMode == ThrowMode.Decrease ? "Abräumen" : "Volle";
} }
@ -153,9 +155,9 @@ namespace GameHandler
return ThrowCommandParser.Parse(stringData, _gh.FreePlayerSelection(), 0); return ThrowCommandParser.Parse(stringData, _gh.FreePlayerSelection(), 0);
} }
public async Task<GameState> Load(Guid gameId) public async Task<GameState?> Load(Guid gameId)
{ {
Game game = null; Game? game = null;
using (var scope = _rootContainer?.BeginLifetimeScope()) using (var scope = _rootContainer?.BeginLifetimeScope())
{ {
var gs = new GameStateHandler(scope.Resolve<IGameRepository>(), scope.Resolve<IExpenseRepository>()); var gs = new GameStateHandler(scope.Resolve<IGameRepository>(), scope.Resolve<IExpenseRepository>());
@ -176,6 +178,16 @@ namespace GameHandler
return res; return res;
} }
public bool FreePlayerSelection => _gh.FreePlayerSelection(); public GameState Undo()
{
throw new NotImplementedException();
}
public GameState Redo()
{
throw new NotImplementedException();
}
} }
} }

View File

@ -33,7 +33,7 @@ namespace GameHandler.Parser
pindata = data; pindata = data;
} }
return new ThrowCommandData(playerId, Regex.Match(pindata, @"\d+").Value, data.Contains("b"), data.Contains("s"), data.Contains("e")); return new ThrowCommandData(playerId, Regex.Match(pindata, @"\d+").Value, data.Contains("b"), data.Contains("s"), data.Contains("e"), data.Contains("u"), data.Contains("r"));
} }
} }
} }

View File

@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace GameModel namespace GameModel
{ {
public record ThrowCommandData(int PlayerId, string Pindata, bool Bell, bool Sink, bool Abort) public record ThrowCommandData(int PlayerId, string Pindata, bool Bell, bool Sink, bool Abort, bool Undo, bool Redo)
{ {
} }
} }

View File

@ -181,6 +181,20 @@ void StartGameAction(string gameName, Guid gameId)
break; break;
} }
if (throwData.Undo)
{
gameState = _gs.Undo();
Show(gameState);
break;
}
if (throwData.Redo)
{
gameState = _gs.Redo();
Show(gameState);
break;
}
var task = _gs.HandleThrow(PinThrow.Create(throwData.Pindata, throwData.Bell, throwData.Sink, throwData.PlayerId)); var task = _gs.HandleThrow(PinThrow.Create(throwData.Pindata, throwData.Bell, throwData.Sink, throwData.PlayerId));
gameState = task.Result; gameState = task.Result;
Show(gameState); Show(gameState);