private void HandleChoiceMade(TurnAction action) { stopTurnChoosingCommand.Send(); TurnActionExecutionResult result = TurnActionExecutionResult.Success; for (int c = 0; c < action.components.Count; c++) { TurnActionComponent comp = action.components[c]; try { switch (comp.type) { case TurnActionComponentType.MovePiece: moveCommand.Send(new MoveCommand() { startPosition = comp.actor, moveTo = comp.target, }); break; case TurnActionComponentType.CapturePiece: captureCommand.Send(new CaptureCommand() { space = comp.target, }); break; case TurnActionComponentType.PromotePiece: promoteCommand.Send(new PromoteCommand() { piecePos = comp.actor, promoteTo = comp.promotionIndex, }); break; case TurnActionComponentType.Forfeit: if (board.ActivePlayer == board.LocalPlayerOrder) { result = TurnActionExecutionResult.Forfeit; } break; default: throw new TurnActionExcecutionException("Bad component type"); } } catch (TurnActionExcecutionException ex) { scripts.WriteToAuthorLog(string.Format("Turn action execution error on component {0}: {1}", c, ex.Message)); result = TurnActionExecutionResult.Error; break; } } handleEndOfTurn.Send(result); }
private void DoEndOfTurn(TurnActionExecutionResult result) { lastActionResult = result; SetTurnState(TurnState.WaitServerEoT); }