Add MeleeEffect and related services for combat interactions
This commit is contained in:
29
GameCore/Combat/Effects/MeleeEffect.cs
Normal file
29
GameCore/Combat/Effects/MeleeEffect.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
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<InputStateComponent>(context.Owner);
|
||||
var weapon = context.World.GetComponent<WeaponComponent>(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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user