void DoAttack() { CombatPlayer player = GameObject.FindObjectOfType <CombatPlayer>(); if (player == null) { return; } int hitSkill = 50 + Level * 10; if (Random.Range(0, hitSkill) < Random.Range(0, player.Dodge())) { CombatBubbleSpawner.SpawnBubble( player.transform.position, "Dodged!", CombatBubbleSpawner.BubbleTypes.Round, Color.green ); return; } int maxDamage = ((Bossiness - 1) * 2 + Level) * (1 + Difficulty.DiffLevel); int damage = Random.Range(maxDamage / 2, maxDamage); player.TakeDamage(damage, damageType); }
void DoAttack() { CombatEnemy enemy = combatQueue.FirstEnemy(); if (enemy == null) { return; } int hitSkill = (int)statManager.DerivedPrecision(); if (Random.Range(0, hitSkill) < Random.Range(0, enemy.Dodge())) { CombatBubbleSpawner.SpawnBubble( enemy.transform.position, "Missed!", CombatBubbleSpawner.BubbleTypes.Round, Color.gray ); SoundsManager.PlayClip(MissSounds[Random.Range(0, MissSounds.Length)]); return; } int maxDamage = (int)statManager.DerivedDamage(); int damage = Random.Range(maxDamage / 2, maxDamage); bool isCrit = Random.Range(0, 100) < statManager.GetValue(Stats.Critical); if (isCrit) { // TODO: Crit event damage *= 2; } CombatBubbleSpawner.SpawnBubble( enemy.transform.position, damage.ToString(), (isCrit ? CombatBubbleSpawner.BubbleTypes.Spiky : CombatBubbleSpawner.BubbleTypes.Round), (isCrit ? Color.red : Color.white) ); SoundsManager.PlayClip(AttackSounds[Random.Range(0, AttackSounds.Length)]); enemy.TakeDamage(damage); }
public void TakeDamage(int amount, DamageType dtype) { int mitigation = 0; switch (dtype) { case DamageType.Physical: mitigation = Random.Range(0, (int)statManager.GetValue(Stats.Armor)); break; case DamageType.Fire: mitigation = Random.Range(0, (int)statManager.DerivedResFire()); break; case DamageType.Electrical: mitigation = Random.Range(0, (int)statManager.DerivedResElec()); break; case DamageType.Cold: mitigation = Random.Range(0, (int)statManager.DerivedResCold()); break; default: break; } mitigation = Mathf.FloorToInt(Mathf.Min(amount * 0.75f, mitigation)); int actualDamage = amount - mitigation; statManager.ChangeValue(Stats.CurrentHP, -(actualDamage)); Color c = Color.white; switch (dtype) { case DamageType.Physical: c = Color.grey; break; case DamageType.Fire: c = Color.red; break; case DamageType.Electrical: c = Color.yellow; break; case DamageType.Cold: c = Color.blue; break; default: break; } if (actualDamage > 0) { SoundsManager.PlayClip(HurtSounds[Random.Range(0, HurtSounds.Length)]); } CombatBubbleSpawner.SpawnBubble( this.transform.position, "-" + actualDamage, CombatBubbleSpawner.BubbleTypes.Round, c ); }