public void Retry() { isOver = false; playerFirst = false; board.Reset(); ai = new AI(); bm = new ChessModel(); endPanel.SetActive(false); }
public void Init(Mode mode, string localPlayerName = "", string remotePlayerName = "", IntVector3 size = default, int comboLength = default, int scoreToWin = default) { ClearModel(); this.mode = mode; if (mode == Mode.Server) { chessModel = new ChessServerModel(2); playersControlled = new List <int> { 2 }; opponent = NetworkManager.GetInstance().server.clientConnections.Values.Single(); opponent.Listen <ObserveCameraControlRequest>(HandleObserveCameraRequest); opponent.Listen <ObserveModeRequest>(HandleObserveModeRequest); } else if (mode == Mode.Client) { chessModel = new ChessClientModel(); playersControlled = new List <int> { 1 }; opponent = NetworkManager.GetInstance().client.connection; opponent.Listen <ObserveCameraControlRequest>(HandleObserveCameraRequest); opponent.Listen <ObserveModeRequest>(HandleObserveModeRequest); } else { chessModel = new ChessModel(); playersControlled = new List <int> { 1, 2 }; } UpdatePlayerNames(localPlayerName, remotePlayerName); mainUI.SetActive(true); chessModel.onGameInit += OnGameInit; chessModel.onGameStart += OnGameStart; chessModel.onGameFinish += OnGameFinish; chessModel.onNextTurn += OnNextTurn; chessModel.onChessStateChange += OnChessStateChange; chessModel.onPlayerScoreChange += OnPlayerScoreChange; chessModel.onCombo += OnCombo; if (mode != Mode.Client) { chessModel.Init(size, comboLength, scoreToWin); } }
private void ClearModel() { if (chessModel == null) { return; } chessModel.onGameInit -= OnGameInit; chessModel.onGameStart -= OnGameStart; chessModel.onGameFinish -= OnGameFinish; chessModel.onNextTurn -= OnNextTurn; chessModel.onChessStateChange -= OnChessStateChange; chessModel.onPlayerScoreChange -= OnPlayerScoreChange; chessModel.onCombo -= OnCombo; chessModel.Destroy(); chessModel = null; }
public ChessModel GetChessModel(string ticket) { lock (mutex) { var options = GetOptions(); var ret = new ChessModel { State = GetState(), AllUsers = GetAllUsers(), IsBoardFull = userTickets.Count == 2 || IsComputerGame() && userTickets.Count == 1, IsComputerGame = IsComputerGame(), CanPlayAgainstComputer = CanPlayAgainstComputer(), ChessEngineNames = GetChessEngineNames() }; var ctx = GetContext(ticket); if (ctx != null) { ret.CurrentUser = GetCurrentUser(ctx); } if (chessboard != null) { ret.Board = new BoardModel(); // board options and status ret.Board.WhitePlayer = chessboard.WhitePlayer; ret.Board.BlackPlayer = chessboard.BlackPlayer; ret.Board.GameOver = chessboard.GameOver; ret.Board.GameStarted = chessboard.GameStarted; ret.Board.GameOption = ConvertGameOption(chessboard.GameOption); ret.Board.NextGameRequested = chessboard.NextGameRequested; ret.Board.CurrentColor = ConvertFigureColor(chessboard.CurrentColor); // last stroke and last moved figure ret.Board.LastStroke = ConvertFigure(chessboard.LastStroke); ret.Board.LastMoves = new List <MoveModel>(); foreach (var move in chessboard.LastMoves) { ret.Board.LastMoves.Add(ConvertLastMoved(move)); } // reasons for game over and the winner ret.Board.TimeOut = chessboard.TimeOut; ret.Board.KingStrike = chessboard.KingStrike; ret.Board.GiveUp = chessboard.GiveUp; ret.Board.CheckMate = chessboard.CheckMate; ret.Board.StaleMate = chessboard.StaleMate; if (chessboard.GameOption != GameOption.FastChess) { ret.Board.Check = chessboard.Check; } if (chessboard.Winner.HasValue) { ret.Board.Winner = chessboard.Winner.Value == FigureColor.White ? ret.Board.WhitePlayer : ret.Board.BlackPlayer; } // figures and all moves for the current player ret.Board.Figures = new List <FigureModel>(); foreach (var figure in chessboard.GetAllFigures()) { var fm = ConvertFigure(figure); if (!chessboard.GameOver && ret.CurrentUser != null && ret.CurrentUser.Name == chessboard.CurrentPlayer && figure.Color == chessboard.CurrentColor) { foreach (var move in chessboard.GetAllMoves(figure, ret.Board.Check)) { fm.Moves.Add(new MoveModel { Row = move.Item1, Column = move.Item2 }); } } ret.Board.Figures.Add(fm); } } return(ret); } }