using GameCore.Combat.Interfaces; using GameCore.Input; namespace GameCore.Combat.Effects; public class MeleeEffect(float range, float radius) : IEffect { public void Execute(EffectContext context) { var input = context.World.GetComponent(context.Owner); var weapon = context.World.GetComponent(context.Owner); if (input == null || weapon == null) return; var checkPosition = input.MuzzlePosition + input.MuzzleDirection * range; var hits = context.World.WorldQuery.OverlapSphere(checkPosition, radius, context.Owner); foreach (var hitEntity in hits) { var hitContext = new EffectContext { World = context.World, Owner = context.Owner, Target = hitEntity }; foreach (var effect in weapon.OnHitEffects) effect.Execute(hitContext); } } }