Implement health modification on enemy kill; add HealOnKillModifier and update death behavior
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Data;
|
||||
using Interfaces;
|
||||
@@ -10,20 +11,50 @@ namespace Systems
|
||||
public class CharacterModifierManager : MonoBehaviour
|
||||
{
|
||||
[OdinSerialize] private List<IStatModifier> activeModifiers = new();
|
||||
[OdinSerialize] private List<IOnKillEffect> onKillEffects = new();
|
||||
|
||||
[SerializeField, Self] private Character character;
|
||||
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
EnemyDeathBehavior.OnAnyEnemyKilled += HandleEnemyKilled;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
EnemyDeathBehavior.OnAnyEnemyKilled -= HandleEnemyKilled;
|
||||
}
|
||||
|
||||
public void EquipItem(IStatModifier modifier)
|
||||
{
|
||||
activeModifiers.Add(modifier);
|
||||
modifier.Apply(character.attributes);
|
||||
|
||||
if (modifier is IOnKillEffect onKillEffect)
|
||||
{
|
||||
onKillEffects.Add(onKillEffect);
|
||||
}
|
||||
}
|
||||
|
||||
public void UnequipItem(IStatModifier modifier)
|
||||
{
|
||||
if (activeModifiers.Remove(modifier))
|
||||
if (!activeModifiers.Remove(modifier)) return;
|
||||
|
||||
modifier.Remove(character.attributes);
|
||||
|
||||
if (modifier is IOnKillEffect onKillEffect)
|
||||
{
|
||||
modifier.Remove(character.attributes);
|
||||
onKillEffects.Remove(onKillEffect);
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleEnemyKilled(GameObject killer, GameObject victim)
|
||||
{
|
||||
if (killer != gameObject) return;
|
||||
|
||||
foreach (var effect in onKillEffects)
|
||||
{
|
||||
effect.OnKill(killer, victim);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user