2022-11-06 18:05:44 -05:00
|
|
|
|
using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components;
|
2023-01-13 16:57:10 -08:00
|
|
|
|
using Content.Shared.Mobs;
|
2022-11-06 18:05:44 -05:00
|
|
|
|
|
|
|
|
|
|
namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems;
|
|
|
|
|
|
|
|
|
|
|
|
public sealed class ArtifactDeathTriggerSystem : EntitySystem
|
|
|
|
|
|
{
|
|
|
|
|
|
[Dependency] private readonly ArtifactSystem _artifact = default!;
|
|
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc/>
|
|
|
|
|
|
public override void Initialize()
|
|
|
|
|
|
{
|
|
|
|
|
|
SubscribeLocalEvent<MobStateChangedEvent>(OnMobStateChanged);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnMobStateChanged(MobStateChangedEvent ev)
|
|
|
|
|
|
{
|
2023-01-13 16:57:10 -08:00
|
|
|
|
if (ev.NewMobState != MobState.Dead)
|
2022-11-06 18:05:44 -05:00
|
|
|
|
return;
|
|
|
|
|
|
|
2023-01-13 16:57:10 -08:00
|
|
|
|
var deathXform = Transform(ev.Target);
|
2022-11-06 18:05:44 -05:00
|
|
|
|
|
2023-10-19 12:34:31 -07:00
|
|
|
|
var toActivate = new List<Entity<ArtifactDeathTriggerComponent>>();
|
|
|
|
|
|
var query = EntityQueryEnumerator<ArtifactDeathTriggerComponent, TransformComponent>();
|
|
|
|
|
|
while (query.MoveNext(out var uid, out var trigger, out var xform))
|
2022-11-06 18:05:44 -05:00
|
|
|
|
{
|
|
|
|
|
|
if (!deathXform.Coordinates.TryDistance(EntityManager, xform.Coordinates, out var distance))
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
|
|
if (distance > trigger.Range)
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
2023-10-19 12:34:31 -07:00
|
|
|
|
toActivate.Add((uid, trigger));
|
2022-11-06 18:05:44 -05:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var a in toActivate)
|
|
|
|
|
|
{
|
2023-10-19 12:34:31 -07:00
|
|
|
|
_artifact.TryActivateArtifact(a);
|
2022-11-06 18:05:44 -05:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|