using Opsive.Shared.Game;
using Opsive.StatSystem;
using Opsive.UltimateCharacterController.Traits.Damage;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "AdventureKitDamageProcessor", menuName = "Ultimate Character Controller/Damage Processors/Adventure Kit Damage Processor")]
public class AdventureKitDamageProcessor : DamageProcessor
{
public class AdventureKitDamageData : DamageData
{
protected bool m_CriticalHit;
public bool CriticalHit { get => m_CriticalHit; set => m_CriticalHit = value; }
public override void Copy(DamageData damageData)
{
base.Copy(damageData);
if (damageData is AdventureKitDamageData adventureKitDamageData) {
m_CriticalHit = adventureKitDamageData.CriticalHit;
}
}
}
protected AdventureKitDamageData m_AdventureKitDamageData = new AdventureKitDamageData();
public override void Process(IDamageTarget target, DamageData damageData)
{
m_AdventureKitDamageData.Copy(damageData);
var startDamage = m_AdventureKitDamageData.Amount;
var strength = m_AdventureKitDamageData.DamageOriginator.Owner.GetCachedComponent<ObjectStats>()?.GetStat("STR")?.Value ?? 0;
var defense = m_AdventureKitDamageData.DamageTarget.Owner.GetCachedComponent<ObjectStats>()?.GetStat("DEF")?.Value ?? 0;
var random = Random.Range(0.9f, 1.1f);
m_AdventureKitDamageData.Amount += strength - defense;
m_AdventureKitDamageData.Amount *= random;
m_AdventureKitDamageData.CriticalHit = Random.value < 0.2f;
if (m_AdventureKitDamageData.CriticalHit) {
m_AdventureKitDamageData.Amount *= 2;
}
m_AdventureKitDamageData.UserData = m_AdventureKitDamageData.CriticalHit ? 1 : 0;
m_AdventureKitDamageData.DamageTarget.Damage(m_AdventureKitDamageData);
}
}