| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- using Content.Shared.Cargo;
- using Content.Shared.Cargo.Components;
- using JetBrains.Annotations;
- using Robust.Client.Animations;
- using Robust.Client.GameObjects;
- using Robust.Client.Graphics;
- namespace Content.Client.Cargo.Systems;
- public sealed partial class CargoSystem
- {
- [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
- private static readonly Animation CargoTelepadBeamAnimation = new()
- {
- Length = TimeSpan.FromSeconds(0.5),
- AnimationTracks =
- {
- new AnimationTrackSpriteFlick
- {
- LayerKey = CargoTelepadLayers.Beam,
- KeyFrames =
- {
- new AnimationTrackSpriteFlick.KeyFrame(new RSI.StateId("beam"), 0f)
- }
- }
- }
- };
- private static readonly Animation CargoTelepadIdleAnimation = new()
- {
- Length = TimeSpan.FromSeconds(0.8),
- AnimationTracks =
- {
- new AnimationTrackSpriteFlick
- {
- LayerKey = CargoTelepadLayers.Beam,
- KeyFrames =
- {
- new AnimationTrackSpriteFlick.KeyFrame(new RSI.StateId("idle"), 0f)
- }
- }
- }
- };
- private const string TelepadBeamKey = "cargo-telepad-beam";
- private const string TelepadIdleKey = "cargo-telepad-idle";
- private void InitializeCargoTelepad()
- {
- SubscribeLocalEvent<CargoTelepadComponent, AppearanceChangeEvent>(OnCargoAppChange);
- SubscribeLocalEvent<CargoTelepadComponent, AnimationCompletedEvent>(OnCargoAnimComplete);
- }
- private void OnCargoAppChange(EntityUid uid, CargoTelepadComponent component, ref AppearanceChangeEvent args)
- {
- OnChangeData(uid, args.Sprite);
- }
- private void OnCargoAnimComplete(EntityUid uid, CargoTelepadComponent component, AnimationCompletedEvent args)
- {
- OnChangeData(uid);
- }
- private void OnChangeData(EntityUid uid, SpriteComponent? sprite = null)
- {
- if (!Resolve(uid, ref sprite))
- return;
- _appearance.TryGetData<CargoTelepadState?>(uid, CargoTelepadVisuals.State, out var state);
- AnimationPlayerComponent? player = null;
- switch (state)
- {
- case CargoTelepadState.Teleporting:
- if (_player.HasRunningAnimation(uid, TelepadBeamKey))
- return;
- _player.Stop(uid, player, TelepadIdleKey);
- _player.Play(uid, player, CargoTelepadBeamAnimation, TelepadBeamKey);
- break;
- case CargoTelepadState.Unpowered:
- sprite.LayerSetVisible(CargoTelepadLayers.Beam, false);
- _player.Stop(uid, player, TelepadBeamKey);
- _player.Stop(uid, player, TelepadIdleKey);
- break;
- default:
- sprite.LayerSetVisible(CargoTelepadLayers.Beam, true);
- if (_player.HasRunningAnimation(uid, player, TelepadIdleKey) ||
- _player.HasRunningAnimation(uid, player, TelepadBeamKey))
- return;
- _player.Play(uid, player, CargoTelepadIdleAnimation, TelepadIdleKey);
- break;
- }
- }
- [UsedImplicitly]
- private enum CargoTelepadLayers : byte
- {
- Base = 0,
- Beam = 1,
- }
- }
|