public void IncreaseAttack(Unit target, float percent, int rounds) { GameObject playerObj = GameObject.FindGameObjectWithTag("PlayerUnit").gameObject; Player player = playerObj.GetComponent <Player>(); IncreaseAttack statusEffect = (IncreaseAttack)player.statusEffects.Find(x => x.type == StatusEffectType.IncreaseAttackSingleUse); if (statusEffect != null) { statusEffect.rounds = rounds; statusEffect.magnitude = percent; } else { statusEffect = new IncreaseAttack(); statusEffect.rounds = rounds; statusEffect.magnitude = percent; player.statusEffects.Add(statusEffect); } GameObject textObj = Instantiate(playerBattleEndText, playerObj.transform.position + new Vector3(0, 2f, 0), Quaternion.identity); textObj.GetComponent <BattleEndText>().SetText("+ Attack"); textObj.GetComponent <BattleEndText>().SetColor(Color.green); if (nextTurnExecuting == false) { nextTurnExecuting = true; Invoke("NextTurn", 1.5f); } }
public void InflictDamage(Unit target, Unit caster, float damage) { //Applies status effects if (target.statusEffects.Count > 0) { StatusEffect statusEffect; statusEffect = target.statusEffects.Find(x => x.type == StatusEffectType.ReduceDamage); if (statusEffect != null) { ReduceDamage reduceDamage = (ReduceDamage)statusEffect; damage -= damage * reduceDamage.magnitude; } } if (caster != null) { if (caster.statusEffects.Count > 0) { StatusEffect statusEffect = caster.statusEffects.Find(x => x.type == StatusEffectType.IncreaseAttackSingleUse); if (statusEffect != null) { IncreaseAttack increaseAttack = (IncreaseAttack)statusEffect; damage = (float)damage * (1f + increaseAttack.magnitude); caster.statusEffects.Remove(statusEffect); } } } target.CurrentHealth -= (int)damage; var pos = target.gameObject.transform.position; var o = Instantiate(damageText, pos + new Vector3(0.25f, target.gameObject.GetComponent <SpriteRenderer>().bounds.size.y / 2, 0), Quaternion.identity); var dText = o.GetComponent <DamageText>(); dText.SetText((int)damage); if (turn == Turn.Player) { dText.destroyed.AddListener(CheckUnitStatuses); } else { dText.destroyed.AddListener(CheckUnitStatuses); } }
public void InflictDamageToAllUnits(UnitType unitType, Unit caster, float damage) { if (caster != null) { if (caster.statusEffects.Count > 0) { StatusEffect statusEffect = caster.statusEffects.Find(x => x.type == StatusEffectType.IncreaseAttackSingleUse); if (statusEffect != null) { IncreaseAttack increaseAttack = (IncreaseAttack)statusEffect; damage = (float)damage * (1f + increaseAttack.magnitude); caster.statusEffects.Remove(statusEffect); } } } if (unitType == UnitType.Enemy) { bool eventSet = false; foreach (GameObject enemy in enemies) { Unit target = (Unit)enemy.GetComponent <Enemy>(); target.CurrentHealth -= (int)damage; var pos = target.gameObject.transform.position; var o = Instantiate(damageText, pos + new Vector3(0.25f, target.gameObject.GetComponent <SpriteRenderer>().bounds.size.y / 2, 0), Quaternion.identity); var dText = o.GetComponent <DamageText>(); dText.SetText((int)damage); if (!eventSet) { dText.destroyed.AddListener(CheckUnitStatuses); } eventSet = true; } } }