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; return;
} }
var ev = new ProjectileHitEvent(target); var ev = new ProjectileHitEvent(component.Damage, target, component.Shooter);
RaiseLocalEvent(uid, ref ev); RaiseLocalEvent(uid, ref ev);
var otherName = ToPrettyString(target); var otherName = ToPrettyString(target);
var direction = args.OurBody.LinearVelocity.Normalized(); 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); var deleted = Deleted(target);
if (modifiedDamage is not null && EntityManager.EntityExists(component.Shooter)) if (modifiedDamage is not null && EntityManager.EntityExists(component.Shooter))

View File

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

View File

@@ -1,4 +1,5 @@
using System.Numerics; using System.Numerics;
using Content.Shared.Damage;
using Content.Shared.DoAfter; using Content.Shared.DoAfter;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Projectiles; using Content.Shared.Projectiles;
@@ -152,13 +153,13 @@ public sealed class ImpactEffectEvent : EntityEventArgs
} }
/// <summary> /// <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> /// </summary>
[ByRefEvent] [ByRefEvent]
public record struct ProjectileReflectAttemptEvent(EntityUid ProjUid, ProjectileComponent Component, bool Cancelled); public record struct ProjectileReflectAttemptEvent(EntityUid ProjUid, ProjectileComponent Component, bool Cancelled);
/// <summary> /// <summary>
/// Raised when projectile hits other entity /// Raised when a projectile hits an entity
/// </summary> /// </summary>
[ByRefEvent] [ByRefEvent]
public readonly record struct ProjectileHitEvent(EntityUid Target); public record struct ProjectileHitEvent(DamageSpecifier Damage, EntityUid Target, EntityUid? Shooter = null);