using Content.Client.Items; using Content.Client.Light.Components; using Content.Shared.Light; using Content.Shared.Light.Components; using Content.Shared.Toggleable; using Robust.Client.GameObjects; using Content.Client.Light.EntitySystems; namespace Content.Client.Light; public sealed partial class HandheldLightSystem : SharedHandheldLightSystem { [Dependency] private SharedAppearanceSystem _appearance = default!; [Dependency] private LightBehaviorSystem _lightBehavior = default!; public override void Initialize() { base.Initialize(); Subs.ItemStatus(ent => new HandheldLightStatus(ent)); SubscribeLocalEvent(OnAppearanceChange); } /// /// TODO: Not properly predicted yet. Don't call this function if you want a the actual return value! /// public override bool TurnOff(Entity ent, bool makeNoise = true) { return true; } /// /// TODO: Not properly predicted yet. Don't call this function if you want a the actual return value! /// public override bool TurnOn(EntityUid user, Entity uid) { return true; } private void OnAppearanceChange(EntityUid uid, HandheldLightComponent component, ref AppearanceChangeEvent args) { if (!args.TryGetData(ToggleableVisuals.Enabled, out var enabled)) return; if (!args.TryGetData(HandheldLightVisuals.Power, out var state)) return; if (!TryComp(uid, out var lightBehaviour)) return; // Reset any running behaviour to reset the animated properties back to the original value, to avoid conflicts between resets if (_lightBehavior.HasRunningBehaviours((uid, lightBehaviour))) { _lightBehavior.StopLightBehaviour((uid, lightBehaviour), resetToOriginalSettings: true); } if (!enabled) return; switch (state) { case HandheldLightPowerStates.FullPower: break; // We just needed to reset all behaviours case HandheldLightPowerStates.LowPower: _lightBehavior.StartLightBehaviour((uid, lightBehaviour), component.RadiatingBehaviourId); break; case HandheldLightPowerStates.Dying: _lightBehavior.StartLightBehaviour((uid, lightBehaviour), component.BlinkingBehaviourId); break; } } }