示例#1
0
    public IEnumerator PlayerVsMonster(Hero player, MonsterCard monster)
    {
        var ogHP            = player.healthPoint;
        var monsterCardCopy = monster.GetCopy();

        while (player.healthPoint >= 0.0f && monsterCardCopy.Health >= 0.0f)
        {
            monsterCardCopy.TakeDamage(player);
            yield return(new WaitForSeconds(0.1f));

            Debug.Log("Monster " + monsterCardCopy.Health);
            player.TakeDamageFromMonster(monsterCardCopy);
            yield return(new WaitForSeconds(0.1f));

            UIManager.Instance.P1HpSlider.value = player.healthPoint;
            Debug.Log("Player one " + player.healthPoint);
            UIManager.Instance.P2HpSlider.value = monsterCardCopy.Health;
        }

        bool result = player.healthPoint > monsterCardCopy.Health;

        UIManager.Instance.HidePrompts();
        player.healthPoint = ogHP;
        if (result)
        {
            LootCard rewardCardLooted = CardManager.Instance.GetRandomLoot();
            UIManager.Instance.PromptReward(rewardCardLooted);
        }
        UIManager.Instance.ShowInventory();
        NetworkManager.Instance.BroadcastUpdateTurn(); // Ends the turn
    }
示例#2
0
    public IEnumerator PlayerVsPlayer(Hero playerOne, Hero playerTwo)
    {
        var og1HP = playerOne.healthPoint;
        var og2HP = playerTwo.healthPoint;

        if (PMi.ownerPlayer.hero.spellCards != null)
        {
            //Do you wanna use spell panel
        }

        while (playerOne.healthPoint >= 0.0f && playerTwo.healthPoint >= 0.0f)
        {
            playerTwo.TakeDamageFromPlayer(playerOne);
            yield return(new WaitForSeconds(0.1f));

            UIManager.Instance.P2HpSlider.value = playerTwo.healthPoint;
            Debug.Log("Player two " + playerTwo.healthPoint);
            playerOne.TakeDamageFromPlayer(playerTwo);
            yield return(new WaitForSeconds(0.1f));

            UIManager.Instance.P1HpSlider.value = playerOne.healthPoint;
            Debug.Log("Player one " + playerOne.healthPoint);
        }
        //playerTwo.TakeDamageFromPlayer(playerOne);
        //playerOne.TakeDamageFromPlayer(playerTwo);
        //Debug.Log("Final Player one " + playerOne.healthPoint);
        //Debug.Log("Final Player two " + playerTwo.healthPoint);
        bool result = playerOne.healthPoint > playerTwo.healthPoint;

        playerOne.healthPoint = og1HP;
        playerTwo.healthPoint = og2HP;
        if (result)
        {
            LootCard rewardCardLooted = CardManager.Instance.GetRandomLoot();
            UIManager.Instance.PromptReward(rewardCardLooted);
        }
        Debug.Log(result);
        UIManager.Instance.HidePrompts();
        UIManager.Instance.ShowInventory();
        NetworkManager.Instance.BroadcastUpdateTurn(); // Ends the turn
        // push player back;
    }
示例#3
0
    public void MapCodeToCard(string QRResult)
    {
        TileType playerTileType = TileManager.Instance.GetMyCurrentTile(PlayerManager.Instance.ownerPlayer.tilePosition);
        int      code           = int.Parse(QRResult);

        Debug.Log($"YOU GOT CARD #{code}");
        #region passTURN
        if (code == 198)
        {
            NetworkManager.Instance.BroadcastUpdateTurn(); // Ends the turn
            return;
        }
        #endregion
        Card myCard = CardManager.Instance.CallCard(code);

        switch (playerTileType)
        {
        case TileType.Loot:
            LootCard lootedCard = myCard as LootCard;
            UIManager.Instance.PromptReward(lootedCard);
            NetworkManager.Instance.BroadcastUpdateTurn();     // Ends the turn
            break;

        case TileType.Spell:
            SpellCard spellCard = myCard as SpellCard;
            UIManager.Instance.PromptReward(spellCard);
            PlayerManager.Instance.ownerPlayer.hero.spellCards.Add(spellCard.CardNumber);
            NetworkManager.Instance.BroadcastUpdateTurn();     // Ends the turn
            break;

        case TileType.Monster:
            MonsterCard monsterCard = myCard as MonsterCard;
            UIManager.Instance.PromptBattle(PlayerManager.Instance.ownerPlayer.hero, monsterCard);
            break;
        }
    }
示例#4
0
    public void MapCodeToCard(string QRResult)
    {
        // Reset the hidden counter for getting random card without scanning.
        GameManager.Instance.randomCardTap = 0;

        TileType playerTileType = TileManager.Instance.GetMyCurrentTile(PlayerManager.Instance.ownerPlayer.tilePosition);
        int      code           = int.Parse(QRResult);

        Debug.Log($"YOU GOT CARD #{code}");
        #region passTURN
        if (code == 198)
        {
            NetworkManager.Instance.BroadcastUpdateTurn(); // Ends the turn
            return;
        }
        #endregion
        Card myCard = CardManager.Instance.CallCard(code);

        switch (playerTileType)
        {
        case TileType.Loot:
            LootCard lootedCard = myCard as LootCard;
            if (lootedCard != null)
            {
                UIManager.Instance.PromptReward(lootedCard);
            }
            else
            {
                UIManager.Instance.PromptMessage("Wrong card scanned! Try again!");
                UIManager.Instance.PromptGoQR();
                return;
            }
            NetworkManager.Instance.BroadcastUpdateTurn();     // Ends the turn
            break;

        case TileType.Spell:
            SpellCard spellCard = myCard as SpellCard;
            if (spellCard != null)
            {
                UIManager.Instance.PromptReward(spellCard);
                PlayerManager.Instance.ownerPlayer.hero.spellCards.Add(spellCard.CardNumber);
            }
            else
            {
                UIManager.Instance.PromptMessage("Wrong card scanned! Try again!");
                UIManager.Instance.PromptGoQR();
                return;
            }
            NetworkManager.Instance.BroadcastUpdateTurn();     // Ends the turn
            break;

        case TileType.Monster:
            MonsterCard monsterCard = myCard as MonsterCard;
            if (monsterCard != null)
            {
                UIManager.Instance.PromptBattle(PlayerManager.Instance.ownerPlayer.hero, monsterCard);
            }
            else
            {
                UIManager.Instance.PromptMessage("Wrong card scanned! Try again!");
                UIManager.Instance.PromptGoQR();
                return;
            }
            break;
        }
    }
示例#5
0
    /// <summary>
    ///
    /// Generates a list of random cards for loot based on the properties of a given deck
    ///
    /// </summary>
    public List <LootCard> GenerateLootCards(DeckData deckData, int numCards, out int totalWeighting)
    {
        //Totals the number of cards in a deck which have a particular synergy
        var deckSynergyCounts = new Dictionary <Synergies, int>();

        foreach (var card in deckData.CardList)
        {
            foreach (var synergy in card.Synergies)
            {
                if (!deckSynergyCounts.ContainsKey(synergy))
                {
                    deckSynergyCounts.Add(synergy, 1);
                }
                else
                {
                    deckSynergyCounts[synergy] += 1;
                }
            }
        }

        var lootCards = new List <LootCard>();

        totalWeighting = 0;

        //Set up the filter and resources and obtain the cards playable by the relevant class
        var cardFilter        = new CardFilter();
        var classResource     = new ClassResources(deckData.DeckClass);
        var classPlayableList = GetDictionaryList(classResource, cardFilter);

        //Loops through all the cards which are possible to be played by a class and determines their weighting in the random selection
        foreach (var card in classPlayableList)
        {
            var lootCard = new LootCard()
            {
                CardData  = card,
                Weighting = 0,
            };

            //Add the weighting of the rarity of the card
            lootCard.Weighting += rarityWeightings.FirstOrDefault(x => x.rarity == card.Rarity).weighting;

            //Adds the class weighting if the card is of the decks class
            if (card.Class == deckData.DeckClass)
            {
                lootCard.Weighting += classWeighting;
            }

            //If the card shares synergies with the cards already in the deck, increases the weighting accordingly
            var scalingSynergyWeighting = 0;
            foreach (var synergy in card.Synergies)
            {
                if (deckSynergyCounts.TryGetValue(synergy, out int synergyCount))
                {
                    //Debug.Log($"{card.Name}, {synergy}, {Mathf.Max(1, synergyCount * synergyWeighting - scalingSynergyWeighting)}");
                    lootCard.Weighting += Mathf.Max(1, synergyCount * synergyWeighting - scalingSynergyWeighting);
                    scalingSynergyWeighting++;
                }
            }

            //Reduces the weighting of the card based on the number of that card already in the deck
            var duplicateCount = deckData.CardList.Count(x => x.Id == card.Id);

            lootCard.Weighting += duplicateCount * duplicateWeighting;

            //Prevents weighting from being considered if it is below 0
            if (lootCard.Weighting > 0)
            {
                //Debug.Log($"{card.Name}, {lootCard.Weighting}");
                lootCards.Add(lootCard);
            }

            totalWeighting += lootCard.Weighting;
        }

        var lootSelection = new List <LootCard>();

        //Loops through the number of cards which are required to be randomly determined
        for (int randomCardNum = 0; randomCardNum < numCards; randomCardNum++)
        {
            var selectedLootCard = new LootCard();

            //do
            //{
            //Randomly determines a card to be added
            //First determines a random weighting
            var randomVal      = UnityEngine.Random.Range(0, totalWeighting);
            var weightingIndex = 0;

            //Runs through all the possible cards and the weighting
            foreach (var lootCard in lootCards)
            {
                weightingIndex += lootCard.Weighting;

                //If the random weighting is within the weighting range of the card, it is the card that is randomly selected
                if (randomVal < weightingIndex)
                {
                    selectedLootCard = lootCard;
                    break;
                }
            }
            //If the selection already contains the card, repeats the random selection (TURNED OFF FOR NOW)
            //} while (lootSelection.Where(x => x.CardData.Id == selectedLootCard.CardData.Id).Any());

            lootSelection.Add(selectedLootCard);
        }

        return(lootSelection);
    }