示例#1
0
    private void ApplyEffects(GameObject room, GameObject slot, CardDesc cardDesc)
    {
        var effects = new List <EffectData>();

        roomEffects[room] = effects;

        foreach (var effectResource in cardDesc.Effects)
        {
            var ts = effectResource.TargetSelector;
            if (ts == null)
            {
                continue;
            }

            var targets = ts.GetTargets(slot);

            foreach (var targetSlot in targets)
            {
                var instance = effectResource.CreateInstance();
                instance.Attach(targetSlot);

                effects.Add(new EffectData {
                    EffectInstance = instance, Slot = targetSlot
                });

                RecalculateSlot(targetSlot);
            }
        }
    }
示例#2
0
    private bool CanCast(CardDesc cardDesc)
    {
        if (Helpers.LocalPlayer == GameState.Instance.PlayerOverlord)
        {
            if (!Helpers.IsOverlordTurn())
            {
                return(false);
            }

            if (GameState.Instance.ManaOverlord < cardDesc.GetManaToCast())
            {
                return(false);
            }
        }

        if (Helpers.LocalPlayer == GameState.Instance.PlayerRunner)
        {
            if (!Helpers.IsRunnerTurn())
            {
                return(false);
            }

            if (GameState.Instance.ManaRunner < cardDesc.GetManaToCast())
            {
                return(false);
            }
        }

        return(true);
    }
示例#3
0
    // -----

    // TODO: Crap
    public void OnTargetSelected(GameObject target)
    {
        if (Helpers.IsLocalPlayerRunner() &&
            Helpers.IsRunnerTurn() &&
            GameState.Instance.RunState != null &&
            GameState.Instance.RunState.GetComponent <RunState>().Stage == RunStage.Combat)
        {
            PlayerCommands.Instance.CmdAttackWithHero(target);
            return;
        }

        if (!IsActive)
        {
            return;
        }

        if (card != null)
        {
            PlayerCommands.Instance.CmdPlayCard(card.Id, target);
        }

        if (isRunStarting)
        {
            PlayerCommands.Instance.CmdStartRun(target);
        }

        card          = null;
        isRunStarting = false;

        UnhighlightAll();
    }
示例#4
0
    public static Color GetCardColor(CardDesc cardDesc)
    {
        if (cardDesc.Type == CardType.Hero)
        {
            return(ColorHero);
        }
        if (cardDesc.Type == CardType.Room)
        {
            return(ColorRoomRevealed);
        }
        if (cardDesc.Type == CardType.Heart)
        {
            return(ColorHeart);
        }
        if (cardDesc.Type == CardType.Enchantment)
        {
            return(ColorEnchantmentRevealed);
        }
        if (cardDesc.Type == CardType.Spell)
        {
            return(ColorSpell);
        }

        return(Color.gray);
    }
示例#5
0
 public Card(CardDesc desc)
 {
     this.setName(desc.name);
     this.setID(desc.id);
     this.setDescription(desc.description);
     this.type        = desc.type;
     this.rarity      = desc.rarity;
     this.collectible = desc.collectible;
     this.cardSet     = desc.set;
 }
示例#6
0
    public void Add(CardDesc cardToAdd)
    {
        if (cards == null)
        {
            cards = new List <CardDesc>();
        }

        cards.Add(cardToAdd);
        UpdateCount();
    }
示例#7
0
    static public Card CreateCard(CardDesc card)
    {
        Card cardObject = Instantiate(instance.emptyCardPrefab);

        cardObject.hidden = false;
        cardObject.name   = "Card[" + card.name + "]";
        cardObject.Set(card);

        return(cardObject);
    }
示例#8
0
    // -----

    private void Update()
    {
        if (Input.GetKey(KeyCode.Escape))
        {
            UnhighlightAll();

            card          = null;
            isRunStarting = false;
        }
    }
示例#9
0
    public CardDB()
    {
        CardDesc c = new CardDesc()
        {
            Effects = { new EffectBonusStats()
                        {
                            TargetSelector = new TargetSelectorSelf(), Damage = 1
                        } }
        };

        XmlSerializeHelper.SaveToXml(c, "card.xml");
    }
示例#10
0
    public bool TryCastEnchantmentInSlot(CardDesc cardDesc, GameObject targetSlot)
    {
        var ri = targetSlot.GetComponent <RoomSlotInfo>();

        if (!ri.IsEnchantment)
        {
            return(false);
        }

        InstantiateRoomOrEnchantment(cardDesc, targetSlot);
        return(true);
    }
示例#11
0
    private void PlayRunnerCardInternal(CardDesc card)
    {
        if (card.Type == CardType.Hero)
        {
            if (!heroManager.TrySummonHero(card))
            {
                return;
            }
        }

        gameState.HandRunner.Remove(card.Id);
        gameState.ManaRunner -= card.GetManaToCast();
    }
示例#12
0
/*
        public void CreateCards(int count = 8)
        {
            UpdatesDisabled = true;
            for (int q = 1; q <= count; q++)
            {
                var card = (Instantiate(Game.Instance.cardPrefab) as GameObject).GetComponent<Card>();
                card.transform.localScale = Game.Instance.cardPrefab.transform.localScale;
                card.desc = Game.Instance.cards[q % Game.Instance.cards.Length];
                card.Deck = this;
                //cards.Add(card);
            }
            UpdatesDisabled = false;
            UpdateCards();
        }
*/
        public void CreateCards(CardDesc[] descs, int repeat = 1)
        {
            UpdatesDisabled = true;
            foreach (var desc in descs)
            {
                for (int q = 0; q < repeat; ++q)
                {
                    for (int w = 0; w < (int)Mathf.Max(1, 4 - desc.rarity); ++w)
                    {
                        var card = (Instantiate(Game.Instance.cardPrefab) as GameObject).GetComponent<Card>();
                        card.transform.localScale = Game.Instance.cardPrefab.transform.localScale;
                        card.desc = desc;
                        card.Deck = this;
                    }
                }
            }
            UpdatesDisabled = false;
            UpdateCards();
        }
示例#13
0
    private void PlayOverlordCardInternal(CardDesc card, GameObject targetSlot)
    {
        if (card.Type == CardType.Room)
        {
            if (!roomManager.TryCastRoomInSlot(card, targetSlot))
            {
                return;
            }
        }

        if (card.Type == CardType.Enchantment)
        {
            if (!roomManager.TryCastEnchantmentInSlot(card, targetSlot))
            {
                return;
            }
        }

        gameState.HandOverlord.Remove(card.Id);
        gameState.ManaOverlord -= card.GetManaToCast();
    }
示例#14
0
    public bool TrySummonHero(CardDesc card)
    {
        if (heroes.Count >= Constants.MaxHeroCount)
        {
            return(false);
        }

        var hero     = GameObject.Instantiate(GameRoot.Instance.HeroPrefab);
        var heroInfo = hero.GetComponent <HeroInfo>();

        heroInfo.CardId = card.Id;

        heroInfo.Damage            = card.Damage;
        heroInfo.Health            = card.Health;
        heroInfo.SummoningSickness = true;

        NetworkServer.Spawn(hero);
        AddHero(hero);

        return(true);
    }
示例#15
0
    public bool TryCastRoomInSlot(CardDesc cardDesc, GameObject targetSlot)
    {
        var ri = targetSlot.GetComponent <RoomSlotInfo>();

        if (ri.IsHeart || ri.IsEnchantment)
        {
            return(false);
        }

        // If slot before is empty - can't cast
        if (ri.Order > 1)
        {
            var slotBeforeThis = roomSlotsByWing[ri.Wing][ri.Order];
            if (!slotsToRooms.ContainsKey(slotBeforeThis))
            {
                return(false);
            }
        }

        InstantiateRoomOrEnchantment(cardDesc, targetSlot);
        return(true);
    }
示例#16
0
    public void SelectTargetAndCastSpell(CardDesc cardDesc)
    {
        if (GameState.Instance.IsMulliganState)
        {
            PlayerCommands.Instance.CmdMulliganReplaceCard(cardDesc.Id);
            return;
        }

        if (IsActive)
        {
            return;
        }

        if (!CanCast(cardDesc))
        {
            return;
        }

        if (cardDesc.Type == CardType.Room)
        {
            card = cardDesc;

            var roomSlotsRenderer = GetComponent <RoomSlotsRenderer>();
            roomSlotsRenderer.HighlightForNewRoom();
        }

        if (cardDesc.Type == CardType.Enchantment)
        {
            card = cardDesc;

            var roomSlotsRenderer = GetComponent <RoomSlotsRenderer>();
            roomSlotsRenderer.HighlightForNewEnchantment();
        }

        if (cardDesc.Type == CardType.Hero)
        {
            PlayerCommands.Instance.CmdPlayCard(cardDesc.Id, null);
        }
    }
示例#17
0
    // -----

    private GameObject InstantiateRoomOrEnchantment(CardDesc cardDesc, GameObject targetSlot)
    {
        GameObject previousRoom;

        if (slotsToRooms.TryGetValue(targetSlot, out previousRoom) && previousRoom != null)
        {
            DestroyRoom(previousRoom);
        }

        var newRoom = GameObject.Instantiate(GameRoot.Instance.RoomPrefab);
        var ri      = newRoom.GetComponent <RoomInfo>();

        ri.Slot   = targetSlot;
        ri.CardId = cardDesc.Id;

        ri.Damage      = cardDesc.Damage;
        ri.DamageDealt = 0;
        ri.TotalHealth = cardDesc.Health;

        if (cardDesc.Type == CardType.Heart)
        {
            ri.IsRevealed = true;
            ri.IsActive   = true;
        }

        slotsToRooms[targetSlot] = newRoom;

        if (RoomCreated != null)
        {
            RoomCreated(newRoom);
        }

        NetworkServer.Spawn(newRoom);

        return(newRoom);
    }
示例#18
0
 public CardContext(CardDesc desc)
 {
     this.desc = desc;
     ResetPriority();
 }
示例#19
0
 public void Set(CardDesc card)
 {
     desc    = card;
     defense = desc.defensePower;
     UpdateCard();
 }
示例#20
0
 public void SendToGraveyard(CardDesc card)
 {
     graveyard.Add(card);
 }
示例#21
0
    public void DrawCard(CardPile pile)
    {
        // Can't draw cards if we're not the active player
        if (!activePlayer)
        {
            return;
        }

        // Can't draw a card if we have one floating
        if (currentCard != null)
        {
            return;
        }

        // Check if pile has cards
        if (pile.GetCardCount() <= 0)
        {
            // Check if we can dump the graveyard back in the deck
            if (GameMng.GetRules().infiniteDeck)
            {
                var cards = graveyard.GetCards();
                graveyard.Clear();

                if (GameMng.GetRules().reshuffleInfinite)
                {
                    ShuffleDeck(cards);
                }

                pile.Add(cards);

                if (pile.GetCardCount() <= 0)
                {
                    return;
                }
            }
            else
            {
                return;
            }
        }

        // Check if we can draw cards (cards in hand is less than maximum allowed)
        if (hand.GetCardCount() >= GameMng.GetRules().maxCardsInHand)
        {
            return;
        }

        // Check if we've already drawn enough cards this turn
        if (drawCount >= GameMng.GetRules().drawPerTurn)
        {
            return;
        }

        drawCount++;

        // Get the first card
        CardDesc card = pile.GetFirstCard();

        // Create the card itself and pop it on the hand
        var cardObject = GameMng.CreateCard(card);

        hand.Add(cardObject);
    }