示例#1
0
    private void SendTurnResultsToClients(AcePlayer attacker, AcePlayer defender, TurnResultMessage message)
    {
        //Send stuff back to clients
        var players = lobbyManager.GetParticipatingPlayers();

        for (int i = 0; i < players.Count; i++)
        {
            var currPlayer = players[i];
            if (currPlayer.playerName == attacker.playerName || currPlayer.playerName == defender.playerName)
            {
                NetworkServer.SendToClient(currPlayer.connectionID, AceMsgTypes.BattlePhase_TurnResult, message);
            }
        }

        message.attackerCard = -1;
        //If it's 0, leave it at 0 to make it clear to clients that there was no card
        if (message.defenderCard != 0)
        {
            message.defenderCard = -1;
        }

        for (int j = 0; j < players.Count; j++)
        {
            var currPlayer = players[j];
            if (currPlayer.playerName != attacker.playerName && currPlayer.playerName != defender.playerName)
            {
                NetworkServer.SendToClient(currPlayer.connectionID, AceMsgTypes.BattlePhase_TurnResult, message);
            }
        }
    }
    public void handleDownStreamMessage(string messageType, string message)
    {
        Debug.Log("Got message: " + messageType + "\n" + message);
        addToActivityStream("Received message: " + messageType);

        switch (messageType)
        {
        case MsgTypes.TURN_RESULT:
            var turnResultMsg = TurnResultMessage.FromJson(message);
            Debug.Log("Animations: " + turnResultMsg.currentState.Animations);
            applyAnimations(turnResultMsg.previousState, turnResultMsg.currentState, () => {
                nextState(turnResultMsg.currentState);
            });
            break;

        case MsgTypes.GAME_START:
            var gameStartMessage = JsonUtility.FromJson <GameStartMessage>(message);
            nextState(gameStartMessage.gameState);
            break;

        default:
            addToActivityStream("Message unhandled: " + messageType);
            break;
        }
    }
示例#3
0
    private void ProcessTurn(PlayerTurnFinishMessage turn)
    {
        var attacker = lobbyManager.GetPlayerByName(turn.attackerName);
        var defender = lobbyManager.GetPlayerByName(turn.enemyName);
        var message  = new TurnResultMessage();

        int cardAttacking = GetCardAtPosition(attacker, turn.attackCardPosition, true);

        message.attackerCard = cardAttacking;
        message.attackerName = attacker.playerName;
        message.defenderName = defender.playerName;
        if (turn.attackingAce)
        {
            message.attackingAce = turn.attackingAce;
            defender.GameOver();

            if (gameManager.PlayersAlive() == 1)
            {
                message.gameEnder = true;
                observer.ShowEndScreen(attacker.playerName);
            }

            SendTurnResultsToClients(attacker, defender, message);
            return;
        }

        message.attackCardPosition  = turn.attackCardPosition;
        message.defenseCardPosition = turn.defenseCardPosition;
        message.bonusCardPosition   = turn.bonusCardPosition;

        //atm hard-coded to be -7, cause it looks like a J
        if (turn.attackCardPosition == -7)
        {
            defender.discardPile.Add(defender.bonusField[turn.bonusCardPosition, 0]);
            defender.bonusField[turn.bonusCardPosition, 0] = 0;
            defender.bonusField[turn.bonusCardPosition, 1] = 0;

            attacker.discardPile.Add(attacker.GetAssassin());
            attacker.RemoveAssassin();
        }         /*else if (turn.defenseCardPosition == -1 && turn.bonusCardPosition == -1) {
                   *    if (!defender.HasAnyDefenseCards()) {
                   *            defender.GameOver();
                   *    } else {
                   *            gameManager.LogInfo("HEY HEY, NO CHEATERS AROUND HERE, OK?");
                   *            //attacker.GameOver();
                   *    }
                   * }*/
        else
        {
            //Regular attack on defense card
            int cardDefending = GetCardAtPosition(defender, turn.defenseCardPosition, false);
            message.defenderCard = cardDefending;

            message.attackerWon = (GetCardStrength(attacker, turn.attackCardPosition, true) > GetCardStrength(defender, turn.defenseCardPosition, false));
            //gameManager.LogInfo(GetCardStrength(attacker, turn.attackCardPosition, true) + " == " + GetCardStrength(defender, turn.defenseCardPosition, false));
            message.tie = (GetCardStrength(attacker, turn.attackCardPosition, true) == GetCardStrength(defender, turn.defenseCardPosition, false));

            if (AceRules.Two_Kills_All)
            {
                if (cardAttacking == 2)
                {
                    if (AceRules.Two_Suicide_Effect)
                    {
                        message.tie = true;
                    }
                    message.attackerWon = true;
                }
                else if (cardDefending == 2)
                {
                    if (AceRules.Two_Suicide_Effect)
                    {
                        message.tie = true;
                    }
                    message.attackerWon = false;
                }
            }
            else
            {
                if (cardAttacking == 2 && cardDefending == 10)
                {
                    message.attackerWon = true;
                    if (AceRules.Two_Suicide_Effect)
                    {
                        message.tie = true;
                    }
                }
                else if (cardDefending == 2 && cardAttacking == 10)
                {
                    message.attackerWon = false;
                    if (AceRules.Two_Suicide_Effect)
                    {
                        message.tie = true;
                    }
                }
            }

            if (message.tie)
            {
                attacker.discardPile.Add(attacker.attackField[turn.attackCardPosition]);
                attacker.attackField[turn.attackCardPosition] = 0;
                defender.discardPile.Add(defender.defenseField[turn.defenseCardPosition]);
                defender.defenseField[turn.defenseCardPosition] = 0;
            }
            else if (defender.hasAce)
            {
                if (message.attackerWon)
                {
                    defender.discardPile.Add(defender.defenseField[turn.defenseCardPosition]);
                    defender.defenseField[turn.defenseCardPosition] = 0;
                }
                else
                {
                    attacker.discardPile.Add(attacker.attackField[turn.attackCardPosition]);
                    attacker.attackField[turn.attackCardPosition] = 0;
                }
            }
        }

        SendTurnResultsToClients(attacker, defender, message);
    }
示例#4
0
    public void ProcessBattleTurn(TurnResultMessage msg, string ourName)
    {
        //We divide this up in two parts, as the mobile variant can't witness the complete battle between two enemies
        if (msg.attackerName == ourName || msg.defenderName == ourName)
        {
            //Make sure the defender is looking at the attacker
            if (msg.defenderName == ourName)
            {
                battleField.DisplayEnemy(msg.attackerName);
            }

            if (msg.attackingAce)
            {
                if (msg.attackerName == ourName)
                {
                    //Destroy(battleField.enemyAce.transform.GetChild(0));
                    CancelTurn();
                    if (msg.gameEnder)
                    {
                        gameOverText.text = "GOTTEM! You've offically {i}saved your ace{/i}!";
                        gameOver.SetActive(true);
                        OnGameLoss.Invoke();
                    }
                    else
                    {
                        waitingTurn.SetActive(true);
                        skipTurn.SetActive(false);
                    }
                }
                else
                {
                    gameOverText.text = "Too bad! " + msg.attackerName + " de_stroyed your ace! \n\nF in chat boys";
                    gameOver.SetActive(true);
                    OnGameLoss.Invoke();
                }

                return;
            }

            //Display the relevant cards with the info
            List <CardDisplay> losingCards = new List <CardDisplay>();
            //Sequence if we're the attacker
            if (msg.attackerName == ourName)
            {
                //Check whether we've just used a Joker/Boer/Assassin
                if (msg.attackCardPosition == -7)
                {
                    //Get both bonus cards and flag them for removal
                    losingCards.Add(GetAssassin(false));
                    losingCards.Add(battleField.GetBonusCard(msg.bonusCardPosition));
                }
                else
                {
                    //Otherwise check for both cards, removing both if its a tie OR only the losing one
                    var defCard = battleField.GetDefenseCard(msg.defenseCardPosition);
                    defCard.SetCard(msg.defenderCard);
                    if (msg.tie)
                    {
                        losingCards.Add(defCard);
                        losingCards.Add(attackField.transform.GetChild(msg.attackCardPosition).GetComponent <CardDisplay>());
                    }
                    else
                    {
                        losingCards.Add(msg.attackerWon ? defCard : attackField.transform.GetChild(msg.attackCardPosition).GetComponent <CardDisplay>());
                    }
                }
            }
            else
            {
                if (msg.attackCardPosition == -7)
                {
                    losingCards.Add(GetAssassin(true));
                    losingCards.Add(bonusField.transform.GetChild(msg.bonusCardPosition).GetComponent <CardDisplay>());
                }
                else
                {
                    var attCard = battleField.GetAttackCard(msg.attackCardPosition);
                    attCard.SetCard(msg.attackerCard);
                    if (msg.tie)
                    {
                        losingCards.Add(attCard);
                        losingCards.Add(defenseField.transform.GetChild(msg.defenseCardPosition).GetComponent <CardDisplay>());
                    }
                    else
                    {
                        losingCards.Add(msg.attackerWon ? defenseField.transform.GetChild(msg.defenseCardPosition).GetComponent <CardDisplay>() : attCard);
                    }
                }
            }

            //Let the player see the relevant cards before removing them
            StartCoroutine(DelayedBattleResults(losingCards));
        }
        else
        {
            //TODO: Process the actual changes into the OtherPlayers classes?
            //TODO: Make a logger
            if (msg.attackerWon)
            {
                Debug.Log(msg.attackerName + " attacked " + msg.defenderName + " and won! " + msg.defenderName + " loses their card in position " + msg.defenseCardPosition + "!");
            }
            else
            {
                Debug.Log(msg.attackerName + " attacked " + msg.defenderName + " and lost! " + msg.attackerName + " loses their card in position " + msg.attackCardPosition + "!");
            }
        }
    }