/// <summary> /// Single Damage Operates like: /// 1 Attack : 1 Damage Dealt [Normal] /// CharacterA hits CharacterB with Slash (Normal damage) /// </summary> /// <param name="param"></param> public void ReceiveSingleDamage(Parameters param) { if (param == null) { return; } //Get The only value the param has BareboneDamage singleDamage = new BareboneDamage(); if (param.HasParameter("DamageType0")) { singleDamage = param.GetWithKeyParameterValue <BareboneDamage>("DamageType0", new BareboneDamage()); Debug.Log(singleDamage.Name); } else { Debug.Log("DamageTypes are unavailable!"); } // Characters are Optional, since there can be obstruction that can deal damage BareboneCharacter dealer; if (param.HasParameter("DamageDealer")) { dealer = param.GetWithKeyParameterValue <BareboneCharacter>("DamageDealer", new BareboneCharacter()); Debug.Log("Owner is : " + dealer.name); CalculateDamage(singleDamage, dealer); } else { //Debug.Log("Calculating Damage! Min Dmg: " + singleDamage.MinimumDamage + " Max Dmg: " + singleDamage.MaximumDamage); CalculateDamage(singleDamage); } }
/// <summary> /// CalculateDamage computes damage with the cooperation of characterStats /// </summary> public void CalculateDamage(BareboneDamage bareboneDamage, BareboneCharacter Damagedealer = null) { float dotExp = 0; float randDmg = UnityEngine.Random.Range(bareboneDamage.MinimumDamage, bareboneDamage.MaximumDamage); float resistanceReduction = 0; if (resistance.GetResistance(bareboneDamage.GetDamageType.ToString()) != null) { resistanceReduction = randDmg * 0.02f; } this.CurrentHealth -= randDmg - resistanceReduction; if (bareboneDamage.GetDamageProcess == BareboneDamage.Process.Overtime) { dotDamageDealers.Add(bareboneDamage); for (int i = 0; i < bareboneDamage.TickCount; i++) { dotExp += bareboneDamage.Overtimedamage; } } Debug.Log("Improving Resistance!!"); resistance.Addprogress(randDmg, bareboneDamage.GetDamageType.ToString()); resistance.Addprogress(dotExp, bareboneDamage.GetDamageType.ToString()); }