148 lines
4.9 KiB
C#
148 lines
4.9 KiB
C#
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<IWeaponSpecialEffects>();
|
|
}
|
|
|
|
protected virtual vMeleeWeapon meleeWeapon
|
|
{
|
|
get
|
|
{
|
|
if (!_weapon && !withoutMeleeWeapon)
|
|
{
|
|
_weapon = GetComponent<vMeleeWeapon>();
|
|
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);
|
|
}
|
|
}
|
|
} |