Esempio n. 1
0
    protected List <int> GetAbilityTarget(RuntimeCard card)
    {
        var config             = GameManager.Instance.config;
        var boardZoneId        = config.gameZones.Find(x => x.name == "Board").id;
        var libraryCard        = config.GetCard(card.cardId);
        var triggeredAbilities = libraryCard.abilities.FindAll(x => x is TriggeredAbility);

        var needsToSelectTarget = false;

        foreach (var ability in triggeredAbilities)
        {
            var triggeredAbility = ability as TriggeredAbility;
            var trigger          = triggeredAbility.trigger as OnCardEnteredZoneTrigger;
            if (trigger != null && trigger.zoneId == boardZoneId && triggeredAbility.target is IUserTarget)
            {
                needsToSelectTarget = true;
                break;
            }
        }

        if (needsToSelectTarget)
        {
            var targetInfo = new List <int>();
            foreach (var ability in triggeredAbilities)
            {
                var triggeredAbility = ability as TriggeredAbility;
            }
            return(targetInfo);
        }
        else
        {
            return(null);
        }
    }
    public static void MoveCard(RuntimeZone _fromZone, RuntimeZone _toZone, int _unique_CardId)
    {
        RuntimeCard _card = _fromZone.cards.Find(x => x.guid == _unique_CardId);

        _fromZone.RemoveCard(_unique_CardId);
        _toZone.AddCard(_card);
    }
Esempio n. 3
0
    protected bool TryToPlayCard(RuntimeCard card)
    {
        var availableMana = playerInfo.namedStats["Mana"].effectiveValue;
        var libraryCard   = GameManager.Instance.config.GetCard(card.cardId);
        var cost          = libraryCard.costs.Find(x => x is PayResourceCost);

        if (cost != null)
        {
            var payResourceCost = cost as PayResourceCost;
            var manaCost        = payResourceCost.value;
            if (manaCost <= availableMana)
            {
                var target = GetAbilityTarget(card);
                if (card.cardType.name == "Creature")
                {
                    playerInfo.namedZones["Hand"].RemoveCard(card);
                    playerInfo.namedZones["Board"].AddCard(card);
                    numTurnsOnBoard[card.instanceId] = 0;
                    PlayCreatureCard(card, target);
                }
                else if (card.cardType.name == "Spell")
                {
                    if (target != null)
                    {
                        PlaySpellCard(card, target);
                    }
                }
                return(true);
            }
        }
        return(false);
    }
    protected virtual IEnumerator CreateCardPreviewAsync(RuntimeCard card, Vector3 pos, bool highlight)
    {
        yield return(new WaitForSeconds(0.3f));

        var gameConfig  = GameManager.Instance.config;
        var libraryCard = gameConfig.GetCard(card.cardId);
        var cardType    = gameConfig.cardTypes.Find(x => x.id == libraryCard.cardTypeId);

        if (cardType.name == "Creature")
        {
            currentCardPreview = Instantiate(creatureCardViewPrefab as GameObject);
        }
        else if (cardType.name == "Spell")
        {
            currentCardPreview = Instantiate(spellCardViewPrefab as GameObject);
        }
        var cardView = currentCardPreview.GetComponent <CardView>();

        cardView.PopulateWithInfo(card);
        cardView.SetHighlightingEnabled(highlight);
        cardView.isPreview = true;

        var newPos = pos;

        newPos.y += 2.0f;
        currentCardPreview.transform.position      = newPos;
        currentCardPreview.transform.localRotation = Quaternion.Euler(Vector3.zero);
        currentCardPreview.transform.localScale    = new Vector2(1.5f, 1.5f);
        currentCardPreview.GetComponent <SortingGroup>().sortingOrder = 1000;
        currentCardPreview.layer = LayerMask.NameToLayer("Ignore Raycast");
        currentCardPreview.transform.DOMoveY(newPos.y + 1.0f, 0.1f);
    }
Esempio n. 5
0
    public void LoadNetZone(RuntimeZone _localZone, NetZone _netZone, PlayerData _ownerPlayer)
    {
        //remove any illegal cards
        for (int i = 0; i < _localZone.cards.Count; i++)
        {
            RuntimeCard _card = _localZone.cards[i];
            if (Array.Exists(_netZone.cards, x => x.unique_cardId == _card.guid) == false)
            {
                //remove the card
                StartCoroutine(GameScene.Active.ShowPlayerMessage("Developer Warning:: The Server Reverted A Move"));
                _localZone.RemoveCard(_card.guid);
            }
        }

        //add any new cards
        for (int i = 0; i < _netZone.cards.Length; i++)
        {
            NetCard     _card      = _netZone.cards[i];
            RuntimeCard _localCard = _localZone.cards.Find(x => x.guid == _card.unique_cardId);
            if (_localCard == null)
            {
                //add the card
                _localZone.AddCard(NetworkUtilities.GetRuntimeCard(_card, _ownerPlayer));
            }
        }
    }
    protected virtual void AddCardToHand(RuntimeCard card)
    {
        var        gameConfig  = GameManager.Instance.config;
        var        libraryCard = gameConfig.GetCard(card.cardId);
        var        cardType    = gameConfig.cardTypes.Find(x => x.id == libraryCard.cardTypeId);
        GameObject go          = null;

        if (cardType.name == "Creature")
        {
            go = Instantiate(creatureCardViewPrefab as GameObject);
        }
        else if (cardType.name == "Spell")
        {
            go = Instantiate(spellCardViewPrefab as GameObject);
        }
        var cardView = go.GetComponent <CardView>();

        cardView.PopulateWithInfo(card);

        var handCard = go.AddComponent <HandCard>();

        handCard.ownerPlayer = this;
        handCard.boardZone   = GameObject.Find("PlayerBoard");

        playerHandCards.Add(cardView);

        go.GetComponent <SortingGroup>().sortingOrder = playerHandCards.Count;
    }
Esempio n. 7
0
    public virtual void PopulateWithInfo(RuntimeCard card)
    {
        this.card = card;

        var gameConfig = GameManager.Instance.config;

        /*var cardType = gameConfig.cardTypes.Find(x => x.id == card.cardId);
         * Assert.IsNotNull(cardType);
         * pictureSprite.sprite = Resources.Load<Sprite>(cardType.GetStringProperty("Picture"));*/

        var libraryCard = gameConfig.GetCard(card.cardId);

        Assert.IsNotNull(libraryCard);
        nameText.text = libraryCard.name;
        bodyText.text = libraryCard.GetStringProperty("Text");

        var cost = libraryCard.costs.Find(x => x is PayResourceCost);

        if (cost != null)
        {
            var payResourceCost = cost as PayResourceCost;
            manaCost      = payResourceCost.value;
            costText.text = manaCost.ToString();
        }

        pictureSprite.sprite = Resources.Load <Sprite>(string.Format("Images/{0}", libraryCard.GetStringProperty("Picture")));
        var material = libraryCard.GetStringProperty("Material");

        if (!string.IsNullOrEmpty(material))
        {
            pictureSprite.material = Resources.Load <Material>(string.Format("Materials/{0}", material));
        }
    }
        public override void Resolve(GameState state, RuntimeCard card)
        {
            var stat = card.stats[statId];

            stat.modifiers.Clear();
            stat.baseValue = stat.originalValue;
        }
Esempio n. 9
0
    public void OnOpponentCardAdded_Hand(RuntimeCard _card, int _count)
    {
        GameObject _cardV = Instantiate(GameScene.Active.opponentHandCardPrefab);

        //Get the final position
        Vector3 _position = new Vector3(GameScene.Active.opponentHandCardsStart.position.x + (90 * (_count - 1)), GameScene.Active.opponentHandCardsStart.position.y, GameScene.Active.opponentHandCardsStart.position.z);

        _cardV.transform.position = _position;
    }
    public static NetCard GetNetCard(RuntimeCard _card)
    {
        NetCard _madeCard = new NetCard()
        {
            cardName      = _card.cardName,
            unique_cardId = _card.guid
        };

        return(_madeCard);
    }
Esempio n. 11
0
    public void OnPlayerCardAdded_Hand(RuntimeCard _card, int _count)
    {
        CardVisual _cardV = Instantiate(GameScene.Active.playerHandCardPrefab).GetComponent <CardVisual>();

        _cardV.Init(_card);

        //Get the final position
        Vector3 _position = new Vector3(GameScene.Active.playerHandCardsStart.position.x + (90 * (_count - 1)), GameScene.Active.playerHandCardsStart.position.y, GameScene.Active.playerHandCardsStart.position.z);

        _cardV.transform.position = _position;
    }
    public static RuntimeCard GetRuntimeCard(NetCard _netCard, PlayerData _ownerPlayer)
    {
        RuntimeCard _liveCard = new RuntimeCard()
        {
            cardName    = _netCard.cardName,
            guid        = _netCard.unique_cardId,
            ownerPlayer = _ownerPlayer
        };

        return(_liveCard);
    }
Esempio n. 13
0
    public override void PopulateWithInfo(RuntimeCard card)
    {
        base.PopulateWithInfo(card);
        attackStat       = card.namedStats["Attack"];
        defenseStat      = card.namedStats["Life"];
        attackText.text  = attackStat.effectiveValue.ToString();
        defenseText.text = defenseStat.effectiveValue.ToString();

        attackStat.onValueChanged  += (oldValue, newValue) => { attackText.text = attackStat.effectiveValue.ToString(); };
        defenseStat.onValueChanged += (oldValue, newValue) => { defenseText.text = defenseStat.effectiveValue.ToString(); };
    }
    public virtual void Init(RuntimeCard _card)
    {
        card      = _card;
        text.text = _card.cardName;

        if (spriteRend)
        {
            int rand = UnityEngine.Random.Range(0, allSprites.Count);
            spriteRend.sprite = allSprites[rand];
        }
    }
Esempio n. 15
0
    private GameState CreateTestGameState()
    {
        var gameState = new GameState();

        gameState.players.Add(new PlayerInfo());
        gameState.players.Add(new PlayerInfo());
        gameState.currentPlayer   = gameState.players[0];
        gameState.currentOpponent = gameState.players[1];

        foreach (var player in gameState.players)
        {
            var life = new Stat();
            life.statId                  = 0;
            life.name                    = "Life";
            life.baseValue               = 20;
            life.originalValue           = 20;
            life.minValue                = 0;
            life.maxValue                = 99;
            player.stats[life.statId]    = life;
            player.namedStats[life.name] = life;
        }

        foreach (var player in gameState.players)
        {
            var zone = new RuntimeZone();
            zone.zoneId     = 0;
            zone.instanceId = 0;
            zone.name       = "Test zone";
            zone.maxCards   = 100;

            var life = new Stat();
            life.statId        = 0;
            life.name          = "Life";
            life.baseValue     = 2;
            life.originalValue = 2;
            life.minValue      = 0;
            life.maxValue      = 99;

            var card = new RuntimeCard();
            card.cardId                = 0;
            card.instanceId            = 0;
            card.stats[life.statId]    = life;
            card.namedStats[life.name] = life;

            zone.AddCard(card);

            player.zones[zone.zoneId]    = zone;
            player.namedZones[zone.name] = zone;
        }

        return(gameState);
    }
Esempio n. 16
0
        private void RefreshCardPanel()
        {
            CardStackPanel.Children.Clear();
            int        k = 0;
            StackPanel currentStackPanel = null;

            foreach (var c in GameEngine.Instance.Runtime.Cards)
            {
                if (c.Selected >= c.Number)
                {
                    continue;                         //不显示挑选了的
                }
                if (k % CommonSettings.HOST_CARD_IN_ONE_LINE == 0)
                {
                    k = 0;
                    currentStackPanel = new StackPanel()
                    {
                        Orientation = Orientation.Horizontal
                    };
                    CardStackPanel.Children.Add(currentStackPanel);
                }
                RuntimeCard card     = c;
                CardView    cardView = CardView.CreateFromCard(card.Card, c.Number - c.Selected);
                currentStackPanel.Children.Add(cardView);
                cardView.MouseLeftButtonDown += (s, e) =>
                {
                    if (GameEngine.Instance.Runtime.SelectCardCount < 15)
                    {
                        if (card.Selected < card.Card.Max)
                        {
                            card.Selected++;
                            this.Dispatcher.BeginInvoke(() =>
                            {
                                this.RefreshCardPanel();
                                this.RefreshCurrentCardPanel();
                            });
                        }
                        else
                        {
                            MessageBox.Show("此类卡牌你最多带" + card.Card.Max + "个");
                        }
                    }
                    else
                    {
                        MessageBox.Show("你最多只能挑选15张上场手牌");
                    }
                };
                k++;
            }
        }
Esempio n. 17
0
    public void PlayerCard(RuntimeCard _card)
    {
        //RUN LOCAL SIMULATION
        GameFunctions.MoveCard(playerData.handZone, playerData.boardZone, _card.guid);
        //SEND MESSAGE TO SERVER
        MoveCardMessage moveCardMessgae = new MoveCardMessage()
        {
            playerGuid  = playerData.guid,
            cardGuid    = _card.guid,
            from_ZoneId = 0,
            to_ZoneId   = 1
        };

        GameClient.Active.SendMessageToServer(moveCardMessgae);
    }
    public void RemoveCard(int unique_instanceId)
    {
        RuntimeCard _card = cards.Find(x => x.guid == unique_instanceId);

        if (_card != null)
        {
            cards.Remove(_card);
        }
        else
        {
            Debug.LogError("No such card has been found in collection");
        }


        OnCardRemoved?.Invoke(_card, cards.Count);
    }
Esempio n. 19
0
    public void OnPlayerCardAdded_Board(RuntimeCard _card, int _count)
    {
        //DESTROY THE CARD FROM THE HAND
        GameObject handCard = CardVisual.FindCardVisual(_card.guid).gameObject;

        Destroy(handCard);
        //MAKE NEW CARD
        CardVisual newCardVisual = Instantiate(GameScene.Active.boardCardPrefab).GetComponent <CardVisual>();

        newCardVisual.Init(_card);
        newCardVisual.transform.position = new Vector3();
        //ARRANGE THE CARD
        //get new position
        Vector3 newPosition = new Vector3(GameScene.Active.playerBoardCardsStart.transform.position.x + (_count - 1) * 90, GameScene.Active.playerBoardCardsStart.transform.position.y, GameScene.Active.playerBoardCardsStart.transform.position.z);

        newCardVisual.transform.DOMove(newPosition, .5f);
    }
Esempio n. 20
0
        public override void Resolve(GameState state, RuntimeCard card)
        {
            var stat     = card.stats[statId];
            var newValue = value.GetValue(state, card.ownerPlayer);
            var diff     = 0;

            if (stat.effectiveValue >= newValue)
            {
                diff = -(stat.effectiveValue - newValue);
            }
            else
            {
                diff = newValue - stat.effectiveValue;
            }
            var modifier = new Modifier(diff, duration);

            stat.AddModifier(modifier);
        }
Esempio n. 21
0
        public void RefreshCurrentCardPanel()
        {
            int count = GameEngine.Instance.Runtime.SelectCardCount;

            this.SelectCardCountText.Text = count.ToString();
            if (count < 15)
            {
                this.SelectCardCountText.Text += "(需要15个)";
            }

            this.CurrentCardStackPanel.Children.Clear();
            int        k = 0;
            StackPanel currentStackPanel = null;

            foreach (var c in GameEngine.Instance.Runtime.Cards)
            {
                if (c.Selected == 0)
                {
                    continue;
                }
                if (k % CommonSettings.HOST_CARD_IN_ONE_LINE == 0)
                {
                    k = 0;
                    currentStackPanel = new StackPanel()
                    {
                        Orientation = Orientation.Horizontal
                    };
                    CurrentCardStackPanel.Children.Add(currentStackPanel);
                }
                RuntimeCard card     = c;
                CardView    cardView = CardView.CreateFromCard(card.Card, c.Selected);
                currentStackPanel.Children.Add(cardView);
                cardView.MouseLeftButtonDown += (s, e) =>
                {
                    card.Selected--;
                    this.Dispatcher.BeginInvoke(() =>
                    {
                        this.RefreshCardPanel();
                        this.RefreshCurrentCardPanel();
                    });
                };
                k++;
            }
        }
        /// <summary>
        /// Returns true if this condition has been met on the specified card and false otherwise.
        /// </summary>
        /// <param name="card">The card.</param>
        /// <returns>True if this condition has been met on the specified card; false otherwise.</returns>
        public bool IsTrue(RuntimeCard card)
        {
            var stat = card.stats[statId];

            switch (op)
            {
            case ConditionOperator.LessThan:
                return(stat.effectiveValue < value);

            case ConditionOperator.LessThanOrEqualTo:
                return(stat.effectiveValue <= value);

            case ConditionOperator.EqualTo:
                return(stat.effectiveValue == value);

            case ConditionOperator.GreaterThanOrEqualTo:
                return(stat.effectiveValue >= value);

            case ConditionOperator.GreaterThan:
                return(stat.effectiveValue > value);
            }
            return(false);
        }
Esempio n. 23
0
        public override void Resolve(GameState state, RuntimeCard card)
        {
            var modifier = new Modifier(-value.GetValue(state, card.ownerPlayer), duration);

            card.stats[statId].AddModifier(modifier);
        }
Esempio n. 24
0
 public void OnOpponentCardAdded_Board(RuntimeCard _card, int _count)
 {
 }
    public virtual void PopulateWithInfo(RuntimeCard card)
    {
        this.card = card;

        var gameConfig  = GameManager.Instance.config;
        var libraryCard = gameConfig.GetCard(card.cardId);

        Assert.IsNotNull(libraryCard);
        nameText.text = libraryCard.name;

        attackStat      = card.namedStats["Attack"];
        healthStat      = card.namedStats["Life"];
        attackText.text = attackStat.effectiveValue.ToString();
        healthText.text = healthStat.effectiveValue.ToString();

        pictureSprite.sprite = Resources.Load <Sprite>(string.Format("Images/{0}", libraryCard.GetStringProperty("Picture")));
        var material = libraryCard.GetStringProperty("Material");

        if (!string.IsNullOrEmpty(material))
        {
            pictureSprite.material = Resources.Load <Material>(string.Format("Materials/{0}", material));
        }

        onAttackStatChangedDelegate = (oldValue, newValue) =>
        {
            UpdateStatText(attackText, attackStat);
        };
        attackStat.onValueChanged += onAttackStatChangedDelegate;

        onHealthStatChangedDelegate = (oldValue, newValue) =>
        {
            UpdateStatText(healthText, healthStat);
        };
        healthStat.onValueChanged += onHealthStatChangedDelegate;

        var subtypes = gameConfig.keywords.Find(x => x.name == "Subtypes");
        var impetus  = subtypes.values.FindIndex(x => x.value == "Impetus");
        var provoke  = subtypes.values.FindIndex(x => x.value == "Provoke");

        foreach (var keyword in libraryCard.keywords)
        {
            if (keyword.keywordId == subtypes.id)
            {
                if (keyword.valueId == impetus)
                {
                    hasImpetus = true;
                }
                else if (keyword.valueId == provoke)
                {
                    hasProvoke = true;
                }
            }
        }

        if (hasProvoke)
        {
            glowSprite.gameObject.SetActive(false);
            shadowSprite.gameObject.SetActive(false);
            shieldGlowSprite.gameObject.SetActive(true);
            shieldShadowSprite.gameObject.SetActive(true);
            shieldSprite.gameObject.SetActive(true);
        }
        SetHighlightingEnabled(false);
        if (hasImpetus)
        {
            StopSleepingParticles();
            if (ownerPlayer != null)
            {
                SetHighlightingEnabled(true);
                isPlayable = true;
            }
        }
    }
    protected List <int> GetAbilityTarget(RuntimeCard card)
    {
        var config             = GameManager.Instance.config;
        var boardZoneId        = config.gameZones.Find(x => x.name == "Board").id;
        var libraryCard        = config.GetCard(card.cardId);
        var triggeredAbilities = libraryCard.abilities.FindAll(x => x is TriggeredAbility);

        var needsToSelectTarget = false;

        foreach (var ability in triggeredAbilities)
        {
            var triggeredAbility = ability as TriggeredAbility;
            var trigger          = triggeredAbility.trigger as OnCardEnteredZoneTrigger;
            if (trigger != null && trigger.zoneId == boardZoneId && triggeredAbility.target is IUserTarget)
            {
                needsToSelectTarget = true;
                break;
            }
        }

        if (needsToSelectTarget)
        {
            var targetInfo = new List <int>();
            foreach (var ability in triggeredAbilities)
            {
                var triggeredAbility = ability as TriggeredAbility;
                if (IsBuffEffect(triggeredAbility.effect))
                {
                    if (triggeredAbility.effect is PlayerEffect)
                    {
                        targetInfo.Add(0);
                    }
                    else if (triggeredAbility.effect is CardEffect)
                    {
                        var target = GetRandomCreature();
                        if (target != null)
                        {
                            targetInfo.Add(boardZoneId);
                            targetInfo.Add(target.instanceId);
                        }
                        else
                        {
                            return(null);
                        }
                    }
                }
                else
                {
                    if (triggeredAbility.effect is PlayerEffect)
                    {
                        targetInfo.Add(1);
                    }
                    else if (triggeredAbility.effect is CardEffect)
                    {
                        var target = GetRandomOpponentCreature();
                        if (target != null)
                        {
                            targetInfo.Add(boardZoneId);
                            targetInfo.Add(target.instanceId);
                        }
                        else
                        {
                            return(null);
                        }
                    }
                }
            }
            return(targetInfo);
        }
        else
        {
            return(null);
        }
    }
Esempio n. 27
0
 /// <summary>
 /// Returns true if this condition has been met on the specified card and false otherwise.
 /// </summary>
 /// <param name="card">The card.</param>
 /// <returns>True if this condition has been met on the specified card; false otherwise.</returns>
 public override bool IsTrue(RuntimeCard card)
 {
     return(card.keywords.Find(x => x.keywordId == keywordId && x.valueId == valueId) == null);
 }
Esempio n. 28
0
 public override void Resolve(GameState state, RuntimeCard card)
 {
     card.RemoveKeyword(keywordTypeId, keywordValueId);
 }
Esempio n. 29
0
    private void OnPlayerCardRemoved_Board(RuntimeCard _card, int _count)
    {
        CardVisual _visual = CardVisual.FindCardVisual(_card.guid);

        Destroy(_visual.gameObject);
    }
 public virtual void CreateCardPreview(RuntimeCard card, Vector3 pos, bool highlight = false)
 {
     isPreviewActive        = true;
     currentPreviewedCardId = card.instanceId;
     createPreviewCoroutine = StartCoroutine(CreateCardPreviewAsync(card, pos, highlight));
 }