init
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
using VOID.Generic.Dict;
|
||||
using VOID.Generic.Objects.Abstract.Events;
|
||||
using VOID.Generic.Util;
|
||||
|
||||
namespace VOID.Generic.Status.Effect.Damage
|
||||
{
|
||||
[TypeRegistryItem("Apply Damage")]
|
||||
public class ApplyDamageEffect : BasicEffect
|
||||
{
|
||||
[InfoBox(
|
||||
"<b>" + nameof(OnApply) + "</b> - only once when effect is applied\n" +
|
||||
"<b>" + nameof(OnEnd) + "</b> - only once when effect is ended normally\n" +
|
||||
"<b>" + nameof(OnTurnSelfEnd) + "</b> - everytime when unit ends self turn\n" +
|
||||
"<b>" + nameof(OnTurnSelfStart) + "</b> - everytime when unit starts self turn\n" +
|
||||
"<b>" + nameof(OnCancel) + "</b> - only once when effect is canceled or ended forcefully"
|
||||
)]
|
||||
private enum DamageMoment
|
||||
{
|
||||
OnApply,
|
||||
OnEnd,
|
||||
OnTurnSelfEnd,
|
||||
OnTurnSelfStart,
|
||||
OnCancel
|
||||
}
|
||||
|
||||
[SerializeField] private DamageMoment _damageMoment;
|
||||
[SerializeField, Required, MinValue(0)] private int _amountMin;
|
||||
[SerializeField, Required, MinValue(nameof(_amountMin))] private int _amountMax;
|
||||
[SerializeField, Required] private DamageType _type;
|
||||
|
||||
public override void OnApply() => DoDamage(DamageMoment.OnApply);
|
||||
public override void OnEnd() => DoDamage(DamageMoment.OnEnd);
|
||||
public override void OnTurnSelfEnd() => DoDamage(DamageMoment.OnTurnSelfEnd);
|
||||
public override void OnTurnSelfStart() => DoDamage(DamageMoment.OnTurnSelfStart);
|
||||
public override void OnCancel() => DoDamage(DamageMoment.OnCancel);
|
||||
|
||||
private void DoDamage(DamageMoment thisDamageMoment)
|
||||
{
|
||||
if (thisDamageMoment != _damageMoment) return;
|
||||
|
||||
forObject.TakeDamage(new DamageEvent
|
||||
{
|
||||
target = forObject,
|
||||
attacker = source,
|
||||
amount = RandomUtil.RandomInteger(_amountMin, _amountMax),
|
||||
damageType = _type
|
||||
});
|
||||
}
|
||||
|
||||
public override string GetSimpleDescription() => $"{_amountMin} - {_amountMax} ({_type})";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0fcbe2e843d4412f9992e0d8b865001c
|
||||
timeCreated: 1728394992
|
||||
@@ -0,0 +1,36 @@
|
||||
using Sirenix.OdinInspector;
|
||||
using VOID.Generic.Dict;
|
||||
using VOID.Generic.Objects.Abstract.Events;
|
||||
using VOID.Generic.Objects.Weapon;
|
||||
using VOID.Generic.Util;
|
||||
|
||||
namespace VOID.Generic.Status.Effect.Damage
|
||||
{
|
||||
[TypeRegistryItem("Apply Weapon Damage")]
|
||||
public class WeaponDamageEffect : BasicEffect
|
||||
{
|
||||
public override void OnApply()
|
||||
{
|
||||
if (!source) return;
|
||||
|
||||
var mainHandWeapon = source.unitEquipment.GetEquipped(EquipmentSlotType.MainHand) as WeaponObject;
|
||||
var weaponDamageType = mainHandWeapon ? mainHandWeapon.weaponData.damageType : DamageType.Physical;
|
||||
var damageMin = source.unitData.subAttributes.damageMin;
|
||||
var damageMax = source.unitData.subAttributes.damageMax;
|
||||
|
||||
forObject.TakeDamage(new DamageEvent
|
||||
{
|
||||
target = forObject,
|
||||
attacker = source,
|
||||
amount = RandomUtil.RandomInteger(damageMin, damageMax),
|
||||
damageType = weaponDamageType
|
||||
});
|
||||
}
|
||||
public override void OnEnd() {}
|
||||
public override void OnTurnSelfEnd() {}
|
||||
public override void OnTurnSelfStart() {}
|
||||
public override void OnCancel() {}
|
||||
|
||||
public override string GetSimpleDescription() => "?WEAPON_DAMAGE?";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 214eb872f4884fd888e86cda92ecdcb9
|
||||
timeCreated: 1728396013
|
||||
Reference in New Issue
Block a user