using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Audio.Jukebox; [NetworkedComponent, RegisterComponent, AutoGenerateComponentState(true)] [Access(typeof(SharedJukeboxSystem))] public sealed partial class JukeboxComponent : Component { [DataField, AutoNetworkedField] public ProtoId? SelectedSongId; [DataField, AutoNetworkedField] public EntityUid? AudioStream; /// /// RSI state for the jukebox being on. /// [DataField] public string? OnState; /// /// RSI state for the jukebox being on. /// [DataField] public string? OffState; /// /// RSI state for the jukebox track being selected. /// [DataField] public string? SelectState; [ViewVariables] public bool Selecting; [ViewVariables] public float SelectAccumulator; } [Serializable, NetSerializable] public sealed class JukeboxPlayingMessage : BoundUserInterfaceMessage; [Serializable, NetSerializable] public sealed class JukeboxPauseMessage : BoundUserInterfaceMessage; [Serializable, NetSerializable] public sealed class JukeboxStopMessage : BoundUserInterfaceMessage; [Serializable, NetSerializable] public sealed class JukeboxSelectedMessage(ProtoId songId) : BoundUserInterfaceMessage { public ProtoId SongId { get; } = songId; } [Serializable, NetSerializable] public sealed class JukeboxSetTimeMessage(float songTime) : BoundUserInterfaceMessage { public float SongTime { get; } = songTime; } [Serializable, NetSerializable] public enum JukeboxVisuals : byte { VisualState } [Serializable, NetSerializable] public enum JukeboxVisualState : byte { On, Off, Select, } public enum JukeboxVisualLayers : byte { Base }