Shards damage barefoot users + steptrigger-related general cleanup (#9585)

This commit is contained in:
Kara
2022-07-10 02:28:37 -07:00
committed by GitHub
parent 37bf333674
commit 459f8d23eb
22 changed files with 220 additions and 92 deletions

View File

@@ -1,49 +0,0 @@
using Content.Server.Damage.Components;
using Content.Shared.Damage;
using Content.Shared.StepTrigger;
namespace Content.Server.Damage.Systems;
// System for damage that occurs on specific triggers.
// This is originally meant for mousetraps, but could
// probably be extended to fit other triggers as well.
public sealed class DamageOnTriggerSystem : EntitySystem
{
[Dependency] private readonly DamageableSystem _damageableSystem = default!;
public override void Initialize()
{
SubscribeLocalEvent<DamageOnTriggerComponent, StepTriggeredEvent>(OnStepTrigger);
}
private void OnStepTrigger(EntityUid uid, DamageOnTriggerComponent component, ref StepTriggeredEvent args)
{
OnDamageTrigger(uid, args.Tripper, component);
}
private void OnDamageTrigger(EntityUid source, EntityUid target, DamageOnTriggerComponent? component = null)
{
if (!Resolve(source, ref component))
{
return;
}
var damage = new DamageSpecifier(component.Damage);
var ev = new BeforeDamageOnTriggerEvent(damage, target);
RaiseLocalEvent(source, ev, true);
_damageableSystem.TryChangeDamage(target, ev.Damage, component.IgnoreResistances);
}
}
public sealed class BeforeDamageOnTriggerEvent : EntityEventArgs
{
public DamageSpecifier Damage { get; set; }
public EntityUid Tripper { get; }
public BeforeDamageOnTriggerEvent(DamageSpecifier damage, EntityUid target)
{
Damage = damage;
Tripper = target;
}
}

View File

@@ -0,0 +1,52 @@
using Content.Server.Damage.Components;
using Content.Server.Explosion.EntitySystems;
using Content.Shared.Damage;
using Content.Shared.StepTrigger;
using Content.Shared.StepTrigger.Systems;
namespace Content.Server.Damage.Systems;
// System for damage that occurs on specific trigger, towards the user..
public sealed class DamageUserOnTriggerSystem : EntitySystem
{
[Dependency] private readonly DamageableSystem _damageableSystem = default!;
public override void Initialize()
{
SubscribeLocalEvent<DamageUserOnTriggerComponent, TriggerEvent>(OnTrigger);
}
private void OnTrigger(EntityUid uid, DamageUserOnTriggerComponent component, TriggerEvent args)
{
if (args.User is null)
return;
args.Handled |= OnDamageTrigger(uid, args.User.Value, component);
}
private bool OnDamageTrigger(EntityUid source, EntityUid target, DamageUserOnTriggerComponent? component = null)
{
if (!Resolve(source, ref component))
{
return false;
}
var damage = new DamageSpecifier(component.Damage);
var ev = new BeforeDamageUserOnTriggerEvent(damage, target);
RaiseLocalEvent(source, ev);
return _damageableSystem.TryChangeDamage(target, ev.Damage, component.IgnoreResistances) is not null;
}
}
public sealed class BeforeDamageUserOnTriggerEvent : EntityEventArgs
{
public DamageSpecifier Damage { get; set; }
public EntityUid Tripper { get; }
public BeforeDamageUserOnTriggerEvent(DamageSpecifier damage, EntityUid target)
{
Damage = damage;
Tripper = target;
}
}