Projectile and damage events now include the origin (#19322)

This commit is contained in:
PixelTK
2023-08-27 17:28:59 +01:00
committed by GitHub
parent 0ec8daa474
commit 9fef38ab60
3 changed files with 12 additions and 9 deletions

View File

@@ -43,12 +43,12 @@ public sealed class ProjectileSystem : SharedProjectileSystem
return;
}
var ev = new ProjectileHitEvent(target);
var ev = new ProjectileHitEvent(component.Damage, target, component.Shooter);
RaiseLocalEvent(uid, ref ev);
var otherName = ToPrettyString(target);
var direction = args.OurBody.LinearVelocity.Normalized();
var modifiedDamage = _damageableSystem.TryChangeDamage(target, component.Damage, component.IgnoreResistances, origin: component.Shooter);
var modifiedDamage = _damageableSystem.TryChangeDamage(target, ev.Damage, component.IgnoreResistances, origin: component.Shooter);
var deleted = Deleted(target);
if (modifiedDamage is not null && EntityManager.EntityExists(component.Shooter))

View File

@@ -134,7 +134,7 @@ namespace Content.Shared.Damage
return damage;
}
var before = new BeforeDamageChangedEvent(damage);
var before = new BeforeDamageChangedEvent(damage, origin);
RaiseLocalEvent(uid.Value, ref before);
if (before.Cancelled)
@@ -149,7 +149,7 @@ namespace Content.Shared.Damage
damage = DamageSpecifier.ApplyModifierSet(damage, modifierSet);
}
var ev = new DamageModifyEvent(damage);
var ev = new DamageModifyEvent(damage, origin);
RaiseLocalEvent(uid.Value, ev);
damage = ev.Damage;
@@ -271,7 +271,7 @@ namespace Content.Shared.Damage
/// Raised before damage is done, so stuff can cancel it if necessary.
/// </summary>
[ByRefEvent]
public record struct BeforeDamageChangedEvent(DamageSpecifier Delta, bool Cancelled=false);
public record struct BeforeDamageChangedEvent(DamageSpecifier Delta, EntityUid? Origin = null, bool Cancelled = false);
/// <summary>
/// Raised on an entity when damage is about to be dealt,
@@ -287,11 +287,13 @@ namespace Content.Shared.Damage
public readonly DamageSpecifier OriginalDamage;
public DamageSpecifier Damage;
public EntityUid? Origin;
public DamageModifyEvent(DamageSpecifier damage)
public DamageModifyEvent(DamageSpecifier damage, EntityUid? origin = null)
{
OriginalDamage = damage;
Damage = damage;
Origin = origin;
}
}

View File

@@ -1,4 +1,5 @@
using System.Numerics;
using Content.Shared.Damage;
using Content.Shared.DoAfter;
using Content.Shared.Interaction;
using Content.Shared.Projectiles;
@@ -152,13 +153,13 @@ public sealed class ImpactEffectEvent : EntityEventArgs
}
/// <summary>
/// Raised when entity is just about to be hit with projectile but can reflect it
/// Raised when an entity is just about to be hit with a projectile but can reflect it
/// </summary>
[ByRefEvent]
public record struct ProjectileReflectAttemptEvent(EntityUid ProjUid, ProjectileComponent Component, bool Cancelled);
/// <summary>
/// Raised when projectile hits other entity
/// Raised when a projectile hits an entity
/// </summary>
[ByRefEvent]
public readonly record struct ProjectileHitEvent(EntityUid Target);
public record struct ProjectileHitEvent(DamageSpecifier Damage, EntityUid Target, EntityUid? Shooter = null);