using Invector; using Invector.vItemManager; using Invector.vMelee; using System; using UnityEngine; namespace Beyond { [vClassHeader("Melee Equipment", openClose = false, useHelpBox = true, helpBoxText = "Use this component if you also use the ItemManager in your Character")] public class bMeleeEquipment : bEquipment { private vMeleeWeapon _weapon; [SerializeField] private IWeaponSpecialEffects weaponEffect; public string damageTypeToSetOnPowered = ""; public int powerModifier = 15; protected bool withoutMeleeWeapon; public bItemAttribute power = null; private void Awake() { weaponEffect = GetComponent(); } protected virtual vMeleeWeapon meleeWeapon { get { if (!_weapon && !withoutMeleeWeapon) { _weapon = GetComponent(); if (!_weapon) withoutMeleeWeapon = true; } return _weapon; } } //add draw effect play here? public override void OnEquip(bItem item) { if (meleeWeapon) { var damage = item.GetItemAttribute(bItemAttributes.Damage); var staminaCost = item.GetItemAttribute(bItemAttributes.StaminaCost); var defenseRate = item.GetItemAttribute(bItemAttributes.DefenseRate); var defenseRange = item.GetItemAttribute(bItemAttributes.DefenseRange); var minDamage = item.GetItemAttribute(bItemAttributes.MinDamage); var maxDamage = item.GetItemAttribute(bItemAttributes.MaxDamage); var bonusDamage = item.GetItemAttribute(bItemAttributes.BonusDamage); if (bonusDamage != null) { powerModifier = bonusDamage.value; } else { powerModifier = 0; } if (damage != null) this.meleeWeapon.damage.damageValue = damage.value; if (staminaCost != null) this.meleeWeapon.staminaCost = staminaCost.value; if (defenseRate != null) this.meleeWeapon.defenseRate = defenseRate.value; if (defenseRange != null) this.meleeWeapon.defenseRange = defenseRate.value; if (minDamage != null) this.meleeWeapon.minDamage.damageValue = minDamage.value; if (maxDamage != null) this.meleeWeapon.maxDamage.damageValue = maxDamage.value; } TryToApplyPowerEffect(item); //add on itemmanagerconsumed event here base.OnEquip(item); } //could be extracted to different class actually private void TryToApplyPowerEffect(bItem item) { power = item.GetItemAttribute(bItemAttributes.Power); bItemManager itemManager = Player.Instance.ItemManager; if (power != null) { _weapon.onDamageHit.AddListener(RecheckPowerBehaviour); itemManager.onUseItem.AddListener(TryToEnableLoadedPowerEffect); TryToEnableLoadedPowerEffect(null); } } private void TryToEnableLoadedPowerEffect(bItem arg0) { if (power.value > 0) { EnableDamagingEffect(); weaponEffect.EnableLoadedPowerEffect(); } else { DisableDamagingEffect(); weaponEffect.DisableLoadedPowerEffect(); } } private void EnableDamagingEffect() { _weapon.damageModifier = powerModifier; //could make it load from item property if (damageTypeToSetOnPowered != "") { _weapon.damage.damageType = damageTypeToSetOnPowered; } } private void DisableDamagingEffect() { _weapon.damageModifier = 0; if (damageTypeToSetOnPowered != "") { _weapon.damage.damageType = ""; } } private void RecheckPowerBehaviour(vHitInfo arg0) { if (power.value <= 0) { weaponEffect.DisableLoadedPowerEffect(); DisableDamagingEffect(); } else { power.value--; EnableDamagingEffect(); } } public override void OnUnequip(bItem item) { _weapon.onDamageHit.RemoveListener(RecheckPowerBehaviour); bItemManager itemManager = Player.Instance.ItemManager; itemManager.onUseItem.RemoveListener(TryToEnableLoadedPowerEffect); //power.OnValueChanged -= UpdatePowerEffect; base.OnUnequip(item); } } }