dev
This commit is contained in:
parent
f6348a847d
commit
0f4703dc12
|
|
@ -57,6 +57,12 @@ namespace GameData.Repository
|
||||||
var gameStateDo = new GameStateDo(gameState.Id, gameState.GameId, gameState.GameName, str, gameState.Counter);
|
var gameStateDo = new GameStateDo(gameState.Id, gameState.GameId, gameState.GameName, str, gameState.Counter);
|
||||||
var res = await _client.Post<GameStateDo>(gameStateDo,UrlGameState);
|
var res = await _client.Post<GameStateDo>(gameStateDo,UrlGameState);
|
||||||
|
|
||||||
|
if (res == null)
|
||||||
|
{
|
||||||
|
var msg = "error saviong gamestate - save rsult cannot be null - repo not online, or game deleted";
|
||||||
|
_log.LogError(msg);
|
||||||
|
throw new InvalidOperationException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
var obj = JsonConvert.DeserializeObject<GameState>(res.GameState, new JsonSerializerSettings()
|
var obj = JsonConvert.DeserializeObject<GameState>(res.GameState, new JsonSerializerSettings()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ namespace GameHandler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ExpenseModel CheckThrow(BoardState currentState, PinThrow pinThrow, int[] PlayerIds, ExpenseModel expenseModelToAppend = null)
|
public async Task<ExpenseModel> CheckThrow(BoardState currentState, PinThrow pinThrow, int[] PlayerIds, ExpenseModel expenseModelToAppend = null)
|
||||||
{
|
{
|
||||||
if (!PlayerIds.Any(_ => _ == pinThrow.PlayerId))
|
if (!PlayerIds.Any(_ => _ == pinThrow.PlayerId))
|
||||||
{
|
{
|
||||||
|
|
@ -71,7 +71,7 @@ namespace GameHandler
|
||||||
List<PlayerExpense> memberExpenses = PrepareResult(ref expenseModelToAppend);
|
List<PlayerExpense> memberExpenses = PrepareResult(ref expenseModelToAppend);
|
||||||
|
|
||||||
var triggers = pinThrow.GetExpenseTriggers(currentState);
|
var triggers = pinThrow.GetExpenseTriggers(currentState);
|
||||||
AssignExpenses(pinThrow.PlayerId, PlayerIds, memberExpenses, triggers);
|
await AssignExpenses(pinThrow.PlayerId, PlayerIds, memberExpenses, triggers);
|
||||||
|
|
||||||
return expenseModelToAppend with { MemberExpenses = memberExpenses.ToArray() };
|
return expenseModelToAppend with { MemberExpenses = memberExpenses.ToArray() };
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ namespace GameHandler
|
||||||
|
|
||||||
var throwStateAfterUpdate = _th.Update(lastGameState.ThrowState, pinThrow);
|
var throwStateAfterUpdate = _th.Update(lastGameState.ThrowState, pinThrow);
|
||||||
var gameModel = _gh.Update(pinThrow, lastGameState.GameModel, boardStateBeforeUpdate, throwStateAfterUpdate);
|
var gameModel = _gh.Update(pinThrow, lastGameState.GameModel, boardStateBeforeUpdate, throwStateAfterUpdate);
|
||||||
var expenseModel = _eh.CheckThrow(throwStateAfterUpdate.BoardState, pinThrow, gameModel.PlayerIds, _gameStateHandler.ExpenseModel);
|
var expenseModel = await _eh.CheckThrow(throwStateAfterUpdate.BoardState, pinThrow, gameModel.PlayerIds, _gameStateHandler.ExpenseModel);
|
||||||
|
|
||||||
var newGameState = lastGameState with { ThrowState = throwStateAfterUpdate, GameModel = gameModel, NextPlayerId = _gh.GetCurrentPlayerId(gameModel) };
|
var newGameState = lastGameState with { ThrowState = throwStateAfterUpdate, GameModel = gameModel, NextPlayerId = _gh.GetCurrentPlayerId(gameModel) };
|
||||||
|
|
||||||
|
|
@ -180,14 +180,41 @@ namespace GameHandler
|
||||||
|
|
||||||
public GameState Undo()
|
public GameState Undo()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (_game == null)
|
||||||
|
{
|
||||||
|
throw new InvalidGameStateExcpetion("Game not initialized");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_isStarted)
|
||||||
|
{
|
||||||
|
throw new InvalidGameStateExcpetion("Game not started");
|
||||||
|
}
|
||||||
|
|
||||||
|
var previousState = _gameStateHandler.Undo();
|
||||||
|
if (previousState != null)
|
||||||
|
{
|
||||||
|
return previousState;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _gameStateHandler?.GameState;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameState Redo()
|
public GameState Redo()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (_game == null)
|
||||||
|
{
|
||||||
|
throw new InvalidGameStateExcpetion("Game not initialized");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_isStarted)
|
||||||
|
{
|
||||||
|
throw new InvalidGameStateExcpetion("Game not started");
|
||||||
|
}
|
||||||
|
|
||||||
|
return _gameStateHandler.Redo();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,10 +24,15 @@ namespace GameHandler
|
||||||
public class GameStateHandler
|
public class GameStateHandler
|
||||||
{
|
{
|
||||||
private Guid _gameStateId;
|
private Guid _gameStateId;
|
||||||
|
|
||||||
private List<GameStateHandlerItem<GameState>> gameStates = new List<GameStateHandlerItem<GameState>>();
|
private List<GameStateHandlerItem<GameState>> gameStates = new List<GameStateHandlerItem<GameState>>();
|
||||||
private List<GameStateHandlerItem<ExpenseModel>> expenseModels = new List<GameStateHandlerItem<ExpenseModel>>();
|
private List<GameStateHandlerItem<ExpenseModel>> expenseModels = new List<GameStateHandlerItem<ExpenseModel>>();
|
||||||
private List<GameStateHandlerItem<PlayerExpense>> memberExpenses = new List<GameStateHandlerItem<PlayerExpense>>();
|
private List<GameStateHandlerItem<PlayerExpense>> memberExpenses = new List<GameStateHandlerItem<PlayerExpense>>();
|
||||||
|
|
||||||
|
private List<GameStateHandlerItem<GameState>> redoableGameStates = new List<GameStateHandlerItem<GameState>>();
|
||||||
|
private List<GameStateHandlerItem<ExpenseModel>> redoableExpenseModels = new List<GameStateHandlerItem<ExpenseModel>>();
|
||||||
|
private List<GameStateHandlerItem<PlayerExpense>> redoableemberExpenses = new List<GameStateHandlerItem<PlayerExpense>>();
|
||||||
|
|
||||||
private IGameRepository _gameRepository;
|
private IGameRepository _gameRepository;
|
||||||
private IExpenseRepository _expenseRepository;
|
private IExpenseRepository _expenseRepository;
|
||||||
|
|
||||||
|
|
@ -109,9 +114,48 @@ namespace GameHandler
|
||||||
await _gameRepository.Save(item.Data);
|
await _gameRepository.Save(item.Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Undo()
|
public GameState Redo()
|
||||||
{
|
{
|
||||||
|
if (gameStates.Count == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (redoableGameStates.Count > 0)
|
||||||
|
{
|
||||||
|
var redoId = redoableGameStates.Last().GameStateId;
|
||||||
|
|
||||||
|
gameStates.AddRange(redoableGameStates.Where(_ => _.GameStateId == redoId));
|
||||||
|
expenseModels.AddRange(redoableExpenseModels.Where(_ => _.GameStateId == redoId));
|
||||||
|
memberExpenses.AddRange(redoableemberExpenses.Where(_ => _.GameStateId == redoId));
|
||||||
|
|
||||||
|
redoableGameStates.RemoveAll(_ => _.GameStateId == redoId);
|
||||||
|
redoableExpenseModels.RemoveAll(_ => _.GameStateId == redoId);
|
||||||
|
redoableemberExpenses.RemoveAll(_ => _.GameStateId == redoId);
|
||||||
|
}
|
||||||
|
|
||||||
|
_gameStateId = gameStates.Last().GameStateId;
|
||||||
|
return GameState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GameState Undo()
|
||||||
|
{
|
||||||
|
if (gameStates.Count <= 1)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
redoableGameStates.AddRange(gameStates.Where(_ => _.GameStateId == _gameStateId));
|
||||||
|
redoableExpenseModels.AddRange(expenseModels.Where(_ => _.GameStateId == _gameStateId));
|
||||||
|
redoableemberExpenses.AddRange(memberExpenses.Where(_ => _.GameStateId == _gameStateId));
|
||||||
|
|
||||||
|
gameStates.RemoveAll(_ => _.GameStateId == _gameStateId);
|
||||||
|
expenseModels.RemoveAll(_ => _.GameStateId == _gameStateId);
|
||||||
|
memberExpenses.RemoveAll(_ => _.GameStateId == _gameStateId);
|
||||||
|
|
||||||
|
_gameStateId = gameStates.Last().GameStateId;
|
||||||
|
|
||||||
|
return GameState;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal async Task<Game> CreateNewGame(string gameName)
|
internal async Task<Game> CreateNewGame(string gameName)
|
||||||
|
|
@ -123,6 +167,9 @@ namespace GameHandler
|
||||||
{
|
{
|
||||||
var existingGameStates = await _gameRepository.LoadStates(gameId);
|
var existingGameStates = await _gameRepository.LoadStates(gameId);
|
||||||
gameStates.AddRange(existingGameStates.Select(_ => new GameStateHandlerItem<GameState>(_.Id,_)));
|
gameStates.AddRange(existingGameStates.Select(_ => new GameStateHandlerItem<GameState>(_.Id,_)));
|
||||||
|
|
||||||
|
_gameStateId = gameStates.Last().GameStateId;
|
||||||
|
|
||||||
return existingGameStates.Last();
|
return existingGameStates.Last();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ async Task ShowMainMenu()
|
||||||
|
|
||||||
void ContinueGame()
|
void ContinueGame()
|
||||||
{
|
{
|
||||||
StartGameAction("", new Guid("c042f8f0-3f52-48e7-b61e-82a6387af4bb"));
|
StartGameAction("", new Guid("33869054-811f-49cb-940b-be582ee5d8a5"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MasterDataAction()
|
void MasterDataAction()
|
||||||
|
|
@ -185,14 +185,14 @@ void StartGameAction(string gameName, Guid gameId)
|
||||||
{
|
{
|
||||||
gameState = _gs.Undo();
|
gameState = _gs.Undo();
|
||||||
Show(gameState);
|
Show(gameState);
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (throwData.Redo)
|
if (throwData.Redo)
|
||||||
{
|
{
|
||||||
gameState = _gs.Redo();
|
gameState = _gs.Redo();
|
||||||
Show(gameState);
|
Show(gameState);
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
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));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue