Refactor TriggerSystem.Proximity (#17554)

This commit is contained in:
Vordenburg
2023-06-27 21:17:06 -04:00
committed by GitHub
parent 72607f3066
commit fb126d2044
4 changed files with 103 additions and 76 deletions

View File

@@ -1,4 +1,3 @@
using Content.Client.Trigger;
using Content.Shared.Trigger;
using Robust.Client.Animations;
using Robust.Client.GameObjects;
@@ -20,7 +19,7 @@ public sealed partial class TriggerSystem
private static readonly Animation _flasherAnimation = new Animation
{
Length = TimeSpan.FromSeconds(0.3f),
Length = TimeSpan.FromSeconds(0.6f),
AnimationTracks = {
new AnimationTrackSpriteFlick
{
@@ -51,7 +50,8 @@ public sealed partial class TriggerSystem
private void OnProxAnimation(EntityUid uid, TriggerOnProximityComponent component, AnimationCompletedEvent args)
{
if (!TryComp<AppearanceComponent>(uid, out var appearance)) return;
if (!TryComp<AppearanceComponent>(uid, out var appearance))
return;
// So animation doesn't get spammed if no server state comes in.
_appearance.SetData(uid, ProximityTriggerVisualState.State, ProximityTriggerVisuals.Inactive, appearance);
@@ -73,8 +73,15 @@ public sealed partial class TriggerSystem
if (!Resolve(uid, ref spriteComponent))
return;
TryComp<AnimationPlayerComponent>(component.Owner, out var player);
_appearance.TryGetData<ProximityTriggerVisuals>(appearance.Owner, ProximityTriggerVisualState.State, out var state, appearance);
if (!TryComp<AnimationPlayerComponent>(uid, out var player))
return;
if (!_appearance.TryGetData<ProximityTriggerVisuals>(uid, ProximityTriggerVisualState.State, out var state, appearance))
return;
if (!spriteComponent.LayerMapTryGet(ProximityTriggerVisualLayers.Base, out var layer))
// Don't do anything if the sprite doesn't have the layer.
return;
switch (state)
{
@@ -82,7 +89,7 @@ public sealed partial class TriggerSystem
// Don't interrupt the flash animation
if (_player.HasRunningAnimation(uid, player, AnimKey)) return;
_player.Stop(uid, player, AnimKey);
spriteComponent.LayerSetState(ProximityTriggerVisualLayers.Base, "on");
spriteComponent.LayerSetState(layer, "on");
break;
case ProximityTriggerVisuals.Active:
if (_player.HasRunningAnimation(uid, player, AnimKey)) return;
@@ -91,7 +98,7 @@ public sealed partial class TriggerSystem
case ProximityTriggerVisuals.Off:
default:
_player.Stop(uid, player, AnimKey);
spriteComponent.LayerSetState(ProximityTriggerVisualLayers.Base, "off");
spriteComponent.LayerSetState(layer, "off");
break;
}
}