using GameCore.Attributes; using GameCore.ECS; using GameCore.ECS.Interfaces; using GameCore.Events; using Attribute = GameCore.Attributes.Attribute; namespace GameCore.Combat; public class HealingSystem : ISystem { private readonly World _world; public HealingSystem(World world) { _world = world; _world.Subscribe(OnHealDealt); } public void Update(World world, float deltaTime) { } private void OnHealDealt(HealDealtEvent e) { var attributes = _world.GetComponent(e.Target); if (attributes == null) return; var currentHealth = attributes.GetValue(Attribute.Health); var maxHealth = attributes.GetValue(Attribute.MaxHealth); if (currentHealth >= maxHealth) return; var amountToHeal = e.Amount; var newHealth = currentHealth + amountToHeal; if (newHealth > maxHealth) { amountToHeal = maxHealth - newHealth; newHealth = maxHealth; } attributes.ModifyValue(Attribute.Health, amountToHeal); _world.PublishEvent(new EntityHealedEvent(e.Target, newHealth, amountToHeal)); } }