private void SetCombatScreen(bool active) { combatant_0 = GameManager.playerCombat; if (active == true && !CombatScreen.activeSelf) { if (combatant_regions[0] == null || combatant_regions[1] == null) { Debug.LogError("Combatant regions not settup properly! Unable to complete combat task."); return; } playersTurn = Random.Range(0, 1) == 1; inventoryPanel.SetActive(false); logger.Enqueue($"{combatant_1.Name} encountered!"); SetupUI(); Invoke("Logger_DisplayNext", 0); } CombatScreen.SetActive(active); }
private void CheckToSeeIfAttackLeveledUp(int attackNo, CombatUniversals combatant_A) { if (combatant_A.attacks.ToArray()[attackNo].experience >= combatant_A.attacks.ToArray()[attackNo].maxExperience) { if (combatant_A.attacks.ToArray()[attackNo].Upgrade != null) { logger.Enqueue($"{combatant_A.attacks.ToArray()[attackNo].name} leveled up to {combatant_A.attacks.ToArray()[attackNo].Upgrade.name} for {combatant_A.Name}!"); combatant_A.attacks.Add(combatant_A.attacks.ToArray()[attackNo].Upgrade); combatant_A.attacks.Remove(combatant_A.attacks.ToArray()[attackNo]); combatant_A.attacks.ToArray()[attackNo].experience = 0; } else { logger.Enqueue($"{combatant_A.attacks.ToArray()[attackNo].name} leveled up! But there are no upgrades available..."); } } }
private void SetUiElements(GameObject uiParent, CombatUniversals combatant) { foreach (var item in uiParent.GetComponentsInChildren <Transform>()) { if (item == uiParent.transform) { continue; } Text text = item.GetComponent <Text>(); if (text) { if (text.name.Contains("Health")) { string state = ""; switch (combatant.CurrentState) { case GameManager.States.Normal: state = "Fine"; break; case GameManager.States.GrossOut: state = "Grossed out"; break; case GameManager.States.Burn: state = "Burned"; break; case GameManager.States.Freeze: state = "Frozen"; break; case GameManager.States.Paralysis: state = "Paralized"; break; case GameManager.States.Poison: state = "Poisoned"; break; case GameManager.States.Confusion: state = "Confused"; break; case GameManager.States.Heal: state = "Healing"; break; case GameManager.States.Taunt: state = "Enraged"; break; case GameManager.States.Protection: state = "Blocking"; break; default: break; } text.text = $"{combatant.CurrentHealth}/{combatant.MaxHealth} : {state}"; } else { text.text = combatant.Name; } } Slider slider = item.GetComponent <Slider>(); if (slider) { slider.value = combatant.CurrentHealth; slider.maxValue = combatant.MaxHealth; } } }
private void CommitAttack(int attackNo, CombatUniversals combatant_A, CombatUniversals combatant_B) { bool hit = false; int special = 0; int power = combatant_A.attacks.ToArray()[attackNo].power; logger.Enqueue($"{combatant_A.Name} used {combatant_A.attacks.ToArray()[attackNo].name}..."); switch (combatant_A.attacks.ToArray()[attackNo].Effect) { case GameManager.States.Normal: { power += combatant_A.Strength.level + combatant_A.Agility.level - combatant_B.Chin.level; hit = CalculateChances(power, combatant_B.Agility.level); special = (combatant_A.attacks.ToArray()[attackNo].power * (combatant_A.Strength.level + combatant_A.Agility.level)) - combatant_B.Chin.level; if (hit == true) { //Hit int damageToDeal = Mathf.Abs(Random.Range(power, power + special)); if (damageToDeal <= 0) { logger.Enqueue("It does nothing..."); } else { logger.Enqueue($"{combatant_A.Name} hit {combatant_B.Name} for {damageToDeal}hp!"); if (damageToDeal >= power + special) { logger.Enqueue("Critical!"); } combatant_A.attacks.ToArray()[attackNo].experience += Random.Range(0, damageToDeal); combatant_B.CurrentHealth -= damageToDeal; CheckToSeeIfAttackLeveledUp(attackNo, combatant_A); } } else { //miss logger.Enqueue($"<i>It missed...</i>"); } } break; case GameManager.States.GrossOut: { power += combatant_A.Strength.level + combatant_A.Agility.level; hit = CalculateChances(power, combatant_B.Agility.level * 2); special = (combatant_A.attacks.ToArray()[attackNo].power * (combatant_A.Strength.level + combatant_A.Agility.level)) - combatant_B.Chin.level; if (hit == true) { //Hit int damageToDeal = Random.Range(power, power + special + 1); logger.Enqueue($"{combatant_A.Name} hit {combatant_B.Name} for {damageToDeal}hp!"); if (damageToDeal >= power + special) { logger.Enqueue("Critical hit!"); } combatant_A.attacks.ToArray()[attackNo].experience += damageToDeal; combatant_B.CurrentHealth -= damageToDeal; CheckToSeeIfAttackLeveledUp(attackNo, combatant_A); combatant_B.CurrentState = GameManager.States.GrossOut; } else { //miss logger.Enqueue($"<i>It missed...</i>"); } } break; case GameManager.States.Burn: { power += combatant_A.Strength.level + combatant_A.Agility.level; hit = CalculateChances(power, combatant_B.Agility.level * 2); special = (combatant_A.attacks.ToArray()[attackNo].power * (combatant_A.Strength.level + combatant_A.Agility.level)) - combatant_B.Chin.level; if (hit == true) { //Hit int damageToDeal = Random.Range(power, power + special + 1); logger.Enqueue($"{combatant_A.Name} hit {combatant_B.Name} for {damageToDeal}hp!"); if (damageToDeal >= power + special) { logger.Enqueue("Critical hit!"); } combatant_A.attacks.ToArray()[attackNo].experience += damageToDeal; combatant_B.CurrentHealth -= damageToDeal; CheckToSeeIfAttackLeveledUp(attackNo, combatant_A); combatant_B.CurrentState = GameManager.States.Burn; } else { //miss logger.Enqueue($"<i>It missed...</i>"); } } break; case GameManager.States.Freeze: { power += combatant_A.Strength.level + combatant_A.Agility.level; hit = CalculateChances(power, combatant_B.Agility.level * 2); special = (combatant_A.attacks.ToArray()[attackNo].power * (combatant_A.Strength.level + combatant_A.Agility.level)) - combatant_B.Chin.level; if (hit == true) { //Hit int damageToDeal = Random.Range(power, power + special + 1); logger.Enqueue($"{combatant_A.Name} hit {combatant_B.Name} for {damageToDeal}hp!"); if (damageToDeal >= power + special) { logger.Enqueue("Critical hit!"); } combatant_A.attacks.ToArray()[attackNo].experience += damageToDeal; combatant_B.CurrentHealth -= damageToDeal; CheckToSeeIfAttackLeveledUp(attackNo, combatant_A); combatant_B.CurrentState = GameManager.States.Freeze; } else { //miss logger.Enqueue($"<i>It missed...</i>"); } } break; case GameManager.States.Paralysis: { power += combatant_A.Strength.level + combatant_A.Agility.level; hit = CalculateChances(power, combatant_B.Agility.level * 2); special = (combatant_A.attacks.ToArray()[attackNo].power * (combatant_A.Strength.level + combatant_A.Agility.level)) - combatant_B.Chin.level; if (hit == true) { //Hit int damageToDeal = Random.Range(power, power + special + 1); logger.Enqueue($"{combatant_A.Name} hit {combatant_B.Name} for {damageToDeal}hp!"); if (damageToDeal >= power + special) { logger.Enqueue("Critical hit!"); } combatant_A.attacks.ToArray()[attackNo].experience += damageToDeal; combatant_B.CurrentHealth -= damageToDeal; CheckToSeeIfAttackLeveledUp(attackNo, combatant_A); combatant_B.CurrentState = GameManager.States.Paralysis; } else { //miss logger.Enqueue($"<i>It missed...</i>"); } } break; case GameManager.States.Poison: { power += combatant_A.Strength.level + combatant_A.Agility.level; hit = CalculateChances(power, combatant_B.Agility.level * 2); special = (combatant_A.attacks.ToArray()[attackNo].power * (combatant_A.Strength.level + combatant_A.Agility.level)) - combatant_B.Chin.level; if (hit == true) { //Hit int damageToDeal = Random.Range(power, power + special + 1); logger.Enqueue($"{combatant_A.Name} hit {combatant_B.Name} for {damageToDeal}hp!"); if (damageToDeal >= power + special) { logger.Enqueue("Critical hit!"); } combatant_A.attacks.ToArray()[attackNo].experience += damageToDeal; combatant_B.CurrentHealth -= damageToDeal; CheckToSeeIfAttackLeveledUp(attackNo, combatant_A); combatant_B.CurrentState = GameManager.States.Poison; } else { //miss logger.Enqueue($"<i>It missed...</i>"); } } break; case GameManager.States.Confusion: { power += combatant_A.Strength.level + combatant_A.Agility.level; hit = CalculateChances(power, combatant_B.Agility.level * 2); special = (combatant_A.attacks.ToArray()[attackNo].power * (combatant_A.Strength.level + combatant_A.Agility.level)) - combatant_B.Chin.level; if (hit == true) { //Hit int damageToDeal = Random.Range(power, power + special + 1); logger.Enqueue($"{combatant_A.Name} hit {combatant_B.Name} for {damageToDeal}hp!"); if (damageToDeal >= power + special) { logger.Enqueue("Critical hit!"); } combatant_A.attacks.ToArray()[attackNo].experience += damageToDeal; combatant_B.CurrentHealth -= damageToDeal; CheckToSeeIfAttackLeveledUp(attackNo, combatant_A); combatant_B.CurrentState = GameManager.States.Confusion; } else { //miss logger.Enqueue($"<i>It missed...</i>"); } } break; case GameManager.States.Heal: { power += combatant_A.Strength.level + combatant_A.Chin.level; hit = CalculateChances(power, combatant_B.Strength.level * 2); special = (combatant_A.attacks.ToArray()[attackNo].power * (combatant_A.Strength.level + combatant_A.Chin.level)); if (hit == true) { //Hit int damageToDeal = Random.Range(power, power + special + 1); logger.Enqueue($"{combatant_A.Name} successfully healing."); if (damageToDeal >= power + special) { logger.Enqueue("It's extremely effective!"); } combatant_A.attacks.ToArray()[attackNo].experience += damageToDeal; CheckToSeeIfAttackLeveledUp(attackNo, combatant_A); combatant_A.CurrentState = GameManager.States.Heal; combatant_A.CurrentHealth += damageToDeal; } else { //miss logger.Enqueue($"<i>It failed...</i>"); } } break; case GameManager.States.Taunt: { power += combatant_A.Strength.level + combatant_A.Agility.level; hit = CalculateChances(power, combatant_B.Agility.level * 2); special = (combatant_A.attacks.ToArray()[attackNo].power * (combatant_A.Strength.level + combatant_A.Agility.level)) - combatant_B.Chin.level; if (hit == true) { //Hit int damageToDeal = Random.Range(power, power + special + 1); logger.Enqueue($"{combatant_A.Name} hit {combatant_B.Name} for {damageToDeal}hp!"); if (damageToDeal >= power + special) { logger.Enqueue("Critical hit!"); } combatant_A.attacks.ToArray()[attackNo].experience += damageToDeal; combatant_B.CurrentHealth -= damageToDeal; CheckToSeeIfAttackLeveledUp(attackNo, combatant_A); combatant_B.CurrentState = GameManager.States.Taunt; } else { //miss logger.Enqueue($"<i>It missed...</i>"); } } break; case GameManager.States.Protection: { power += combatant_A.Strength.level + combatant_A.Chin.level; hit = CalculateChances(power, combatant_B.Strength.level * 2); special = (combatant_A.attacks.ToArray()[attackNo].power * (combatant_A.Strength.level + combatant_A.Chin.level)); if (hit == true) { //Hit int damageToDeal = Random.Range(power, power + special + 1); logger.Enqueue($"{combatant_A.Name} is blocking."); combatant_A.attacks.ToArray()[attackNo].experience += damageToDeal; CheckToSeeIfAttackLeveledUp(attackNo, combatant_A); combatant_A.CurrentState = GameManager.States.Protection; } else { //miss logger.Enqueue($"<i>It failed...</i>"); } } break; default: break; } if (hit && combatant_A.attacks.ToArray()[attackNo].Effect == combatant_B.weakness) { int dam = Random.Range(1, power); combatant_B.CurrentHealth -= dam; logger.Enqueue($"It's super effective!\nAn extra {dam}HP dealt!"); } logging = true; Invoke("Logger_DisplayNext", 0); if (combatant_1.CurrentHealth <= 0 && (!logger.Contains($"{combatant_1.Name}") && !logger.Contains("knocked out"))) { if (combatant_1.CurrentHealth <= -1 && (!logger.Contains($"{combatant_1.Name}") && !logger.Contains("knocked out"))) { logger.Enqueue($"{combatant_1.Name} got knocked the F**K out!"); } else { logger.Enqueue($"{combatant_1.Name} got knocked out!"); } int experienceAdded = Random.Range(combatant_1.PowerLevel, combatant_1.PowerLevel + 10); combatant_0.experience += (experienceAdded); logger.Enqueue($"Gained {experienceAdded} XP."); } if (combatant_0.CurrentHealth <= 0 && (!logger.Contains($"{combatant_0.Name}") && !logger.Contains("knocked out"))) { if (combatant_0.CurrentHealth <= -2 && (!logger.Contains($"{combatant_0.Name}") && !logger.Contains("knocked out"))) { logger.Enqueue($"{combatant_0.Name} got knocked the f**k out!"); } logger.Enqueue($"{combatant_0.Name} got knocked out."); } }
public void Attack(int attackNo, CombatUniversals combatA, CombatUniversals combatb) { bool freed = false; string state = ""; int damage = 0; switch (combatA.CurrentState) { case GameManager.States.Normal: CommitAttack(attackNo, combatA, combatb); break; case GameManager.States.GrossOut: freed = CalculateChances(combatA.Chin.level, 0.6f); state = "gross out"; break; case GameManager.States.Burn: freed = CalculateChances(combatA.Chin.level, 0.6f); state = "burn"; break; case GameManager.States.Freeze: freed = CalculateChances(combatA.Chin.level, 0.6f); state = "frozen"; break; case GameManager.States.Paralysis: freed = CalculateChances(combatA.Chin.level, 0.6f); state = "paralysis"; break; case GameManager.States.Poison: freed = CalculateChances(combatA.Chin.level, 0.6f); state = "poison"; break; case GameManager.States.Confusion: freed = CalculateChances(combatA.Chin.level, 0.6f); logger.Enqueue($"{combatA.Name} is confused..."); CommitAttack(attackNo, combatA, combatA); state = "confusion"; break; case GameManager.States.Heal: freed = CalculateChances(combatA.Chin.level, 0f); state = "healing"; break; case GameManager.States.Taunt: freed = CalculateChances(combatA.Chin.level, 0.6f); state = "taunting"; break; case GameManager.States.Protection: freed = CalculateChances(combatA.Chin.level, 0f); state = "blocking"; break; default: break; } if (freed) { playersTurn = !playersTurn; logger.Enqueue($"{combatA.Name} recovered from {state}..."); combatA.CurrentState = GameManager.States.Normal; Invoke("Logger_DisplayNext", 0); } else if (state != "") { logger.Enqueue($"{combatA.Name} is {state}..."); if (damage > 0) { logger.Enqueue($"{combatA.Name} hurt for {damage}hp!"); } Invoke("Logger_DisplayNext", 0); } }