Exemple #1
0
        public async void StatusChangeHandler(Status status)
        {
            Console.WriteLine("StatusChangedHandler");

            if (status.nCaller == 0)
            {
                bFrom     = true;
                iFrom     = status.ButtonId;
                pieceFrom = status.piece;
                StateHasChanged();
            }
            if (status.nCaller != 0 && status.bHarvest)
            {
                var action = new GameAction(gameId, playerBoard.companionBonus, Player.Identity, playerBoard.harvestList);
                var result = await gameService.SubmitAction(action);

                if (result.nResponseCode == 1)
                {
                    await JSRuntime.InvokeVoidAsync("doAnimateArray", (object)playerBoard.harvestIdList);

                    await Task.Delay(100); // wait for javascript to grab the images

                    // updating components before animation completes
                    // so the pieces dissappear from the board
                    game.NGameStatus = result.nGameStatus;
                    playerBoard.ConfirmHarvest();
                    playerBoard.Update(game.NGameStatus);
                    otherBoard.Update(game.NGameStatus);

                    await Task.Delay(900); // rest of time it takes for animation to complete.

                    UpdateScores(result.nScore1, result.nScore2);

                    bPollServer = true;
                    turnService.SetGameStatus(game.GameId, game.NGameStatus);

                    TurnMessage = "Please wait";

                    StateHasChanged();
                }
            }
            if (status.nCaller != 0 && bFrom)
            {
                bFrom = false;
                truck.ClearHighlighting();
                int sourcePosition = pieceFrom.NPosition;   // save source position so we can refill it later
                var action         = new GameAction(1, status.ButtonId - (status.nCaller - 1) * 25 - 5,
                                                    pieceFrom.PieceId, game.GameId, Player.Identity);
                var result = await gameService.SubmitAction(action);

                if (result.nResponseCode == 1)
                {
                    // animate
                    // this call returns immediately but the javascript method sets up an
                    // animation that takes 1000ms to complete
                    await JSRuntime.InvokeVoidAsync("tileAnimate", iFrom, status.ButtonId);

                    await Task.Delay(100); // wait for javascript to grab the image

                    // remove old piece from truck list
                    // so the piece dissappears from the board
                    truck.Update(game.NGameStatus, pieceFrom);

                    await Task.Delay(900); // rest of time it takes for animation to complete.

                    // flip piece if required
                    if (action.nActionArguement % 5 != pieceFrom.NPosition)
                    {
                        pieceFrom.NPieceStatus = (pieceFrom.NPieceStatus | 2); // set bit 2 - star side down
                    }
                    // set pieceFrom new position and owner
                    pieceFrom.NPosition = action.nActionArguement;
                    pieceFrom.NOwner    = Player.NPlayer;

                    // updating components after animation completes
                    // so the piece reappears at the destination
                    game.NGameStatus = result.nGameStatus;
                    playerBoard.Update(game.NGameStatus, pieceFrom);
                    otherBoard.Update(game.NGameStatus);

                    // first check if the game is over
                    if ((game.NGameStatus & 2) == 0)
                    {
                        TurnMessage = "Game Over";
                    }
                    else
                    {
                        bPollServer = true;
                        TurnMessage = "Please wait";
                    }

                    turnService.SetGameStatus(game.GameId, game.NGameStatus);

                    // add new piece
                    await RefillTruck(sourcePosition);

                    StateHasChanged();
                }
            }
        }