Add event publishing for inventory and combat interactions

This commit is contained in:
2025-10-29 02:12:39 +01:00
parent bf15fad9ce
commit d6a31b12e3
14 changed files with 96 additions and 5 deletions

View File

@@ -1,4 +1,5 @@
using GameCore.Combat.Interfaces;
using GameCore.Events;
using GameCore.Inventory;
namespace GameCore.Combat.Effects;
@@ -8,7 +9,12 @@ public class ConsumeAmmoCost(string ammoId, int amount) : ICostEffect
public void Execute(EffectContext context)
{
var inventory = context.World.GetComponent<InventoryComponent>(context.Owner);
inventory?.RemoveItem(ammoId, amount);
if (inventory == null) return;
inventory.RemoveItem(ammoId, amount);
var newQuantity = inventory.GetItemCount(ammoId);
context.World.PublishEvent(new InventoryItemChangedEvent(context.Owner, ammoId, newQuantity));
}
public bool CanAfford(EffectContext context)

View File

@@ -1,4 +1,5 @@
using GameCore.Combat.Interfaces;
using GameCore.Events;
using GameCore.Input;
namespace GameCore.Combat.Effects;
@@ -12,8 +13,11 @@ public class HitscanEffect(float range) : IEffect
if (input == null || weapon == null) return;
var targetPos = input.MuzzlePosition + input.MuzzleDirection * range;
var hit = context.World.WorldQuery.Raycast(input.MuzzlePosition, targetPos, context.Owner);
var fromPos = input.MuzzlePosition;
var targetPos = fromPos + input.MuzzleDirection * range;
var hit = context.World.WorldQuery.Raycast(fromPos, targetPos, context.Owner);
context.World.PublishEvent(new HitscanImpactEvent(context.Owner, fromPos, targetPos, hit));
if (hit.DidHit)
{