예제 #1
0
    void OnCardClick(CardVisual card)
    {
        // Select the clicked card
        m_castCard = card;
        m_visualManager.MakeAllUnclickable();

        // Move the card to the targetting zone
        CGBasicZone   targettingZone = m_visualManager.GetPlayerTargettingZone();
        CGChannelZone channelZero    = m_visualManager.GetPlayerChannel(0);

        targettingZone.MoveCardToZone(card);

        // Close the card selection menu
        m_menu.Close(channelZero);

        // Highlight possible targets and wait for one to be picked
        List <int> targets = GetTargets(card);

        if (targets.Count == 0)
        {
            // No valid targets found, one of three possibilities:
            // - There may be no legal targets
            // - The spell may not target anything
            // - An error is causing no targets to be found
            // Tell the server to cast the spell with no targets and await a response
            SGC_CastSpellFromChannel0 command = new SGC_CastSpellFromChannel0(card.m_cardID, -1);
            m_visualManager.TransmitStream(command.PackCommand());
            FinishCommand();
            return;
        }
        else
        {
            m_visualManager.MakeClickable(targets, OnTargetClick);
        }
    }
예제 #2
0
    void OnTargetClick(CardVisual target)
    {
        m_visualManager.MakeAllUnclickable();
        SGC_CastSpellFromChannel0 command = new SGC_CastSpellFromChannel0(m_castCard.m_cardID, target.m_cardID);

        m_visualManager.TransmitStream(command.PackCommand());
        FinishCommand();
    }
예제 #3
0
    public override void ExecuteAiCommand(AiPlayer aiPlayer, ClientConnectionManager aiConnection)
    {
        int cardID   = m_castableCards[0].cardID;
        int targetID = -1;

        if (m_castableCards[0].targets.Count > 0)
        {
            targetID = m_castableCards[0].targets[0];
        }
        SGC_CastSpellFromChannel0 command = new SGC_CastSpellFromChannel0(cardID, targetID);

        aiConnection.TransmitStream(command.PackCommand());
    }
예제 #4
0
    public static SGCommand CreateCommandFromPacket(BKSystem.IO.BitStream packet, int playerID)
    {
        if (packet.Length < 0)
        {
            return(null);
        }

        ushort commandID;

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

        SGCommand command;

        switch (commandID)
        {
        case 1:
            command = new SGC_CastSpellFromChannel0(packet, playerID);
            break;

        case 2:
            command = new SGC_PlayCardFromHand(packet, playerID);
            break;

        case 3:
            command = new SGC_SendDeck(packet, playerID);
            break;

        case 4:
            command = new SGC_RefreshTimeout(packet, playerID);
            break;

        default:
            command = null;
            break;
        }

        command.m_ID = (SGCommandID)commandID;

        return(command);
    }