Пример #1
0
    CGTurnState TellClientToCastSpell()
    {
        List <CGCardObject> spells = new List <CGCardObject>();

        foreach (CGCardObject s in m_activePlayer.GetSpells())
        {
            if (s.GetTimeRemaining() == 0)
            {
                spells.Add(s);
            }
        }
        if (spells.Count == 0)
        {
            ResolveStack();
            return(CGTurnState.ALL_SPELLS_CAST);
        }
        else
        {
            SendPhaseTransition("Cast step");
            // Send client list of spells
            List <CastableCard> castableCards = new List <CastableCard>();

            // Wait for client to pick oned
            foreach (CGCardObject spell in spells)
            {
                CastableCard card;
                card.cardID  = spell.m_cardID;
                card.targets = GetAllValidTargetsForSpell(spell);
                castableCards.Add(card);
            }

            CGC_WaitForCastSelection command = new CGC_WaitForCastSelection(castableCards);
            m_connection.TransmitStream(command.PackCommand(), m_activePlayerID);

            return(CGTurnState.WAIT_FOR_CAST_ORDER);
        }
    }
Пример #2
0
    public static CGCommand CreateCommandFromPacket(BKSystem.IO.BitStream packet)
    {
        if (packet.Length < 0)
        {
            return(null);
        }

        ushort commandID;

        packet.Position = 0;
        packet.Read(out commandID, 0, 16);
        Debug.Log("Read packet with command ID: " + commandID);

        CGCommand command;

        switch (commandID)
        {
        case (ushort)CGCommandID.CAST_SPELL:
            command = new CGC_CastSpell(packet);
            break;

        case (ushort)CGCommandID.CHANNEL_SPELL:
            command = new CGC_ChannelSpell(packet);
            break;

        case (ushort)CGCommandID.MOVE_CARD_TO_GRAVEYARD:
            command = new CGC_MoveCardToGraveyard(packet);
            break;

        case (ushort)CGCommandID.OPPONENT_DRAW_CARD:
            command = new CGC_OpponentDrawCard(packet);
            break;

        case (ushort)CGCommandID.OPPONENT_PLAY_CARD_FROM_HAND:
            command = new CGC_OpponentPlayCardFromHand(packet);
            break;

        case (ushort)CGCommandID.PLAYER_DRAW_CARD:
            command = new CGC_PlayerDrawCard(packet);
            break;

        case (ushort)CGCommandID.PLAYER_PLAY_CARD_FROM_HAND:
            command = new CGC_PlayerPlayCardFromHand(packet);
            break;

        case (ushort)CGCommandID.SET_LIFE:
            command = new CGC_SetLife(packet);
            break;

        case (ushort)CGCommandID.WAIT_FOR_CAST_SELECTION:
            command = new CGC_WaitForCastSelection(packet);
            break;

        case (ushort)CGCommandID.WAIT_FOR_PLAY_FROM_HAND:
            command = new CGC_WaitForPlayFromHand(packet);
            break;

        case (ushort)CGCommandID.SET_PLAYER_ID:
            command = new CGC_SetPlayerID(packet);
            break;

        case (ushort)CGCommandID.PHASE_TRANSITION:
            command = new CGC_PhaseTransition(packet);
            break;

        case (ushort)CGCommandID.REQUEST_DECK:
            command = new CGC_RequestDeck(packet);
            break;

        case (ushort)CGCommandID.REFRESH_TIMEOUT:
            command = new CGC_RefreshTimeout(packet);
            break;

        default:
            command = null;
            break;
        }

        return(command);
    }