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 }
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; }
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; } }
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; } }
/// <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); }