using System.Numerics; // Frontier: wallmount jukebox 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; // Frontier: Shuffle & Repeat /// /// Whether or not the currently selected song is the first being played. /// Useful for shuffle. /// [DataField, AutoNetworkedField] public bool FirstPlay = true; [ViewVariables] public JukeboxPlaybackMode PlaybackMode = JukeboxPlaybackMode.Single; // End Frontier: Shuffle & Repeat [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; // Frontier: wallmount jukebox [DataField] public Vector2 AudioOffset = Vector2.Zero; // End Frontier } [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; } // Frontier: Shuffle & Repeat [Serializable, NetSerializable] public sealed class JukeboxSetPlaybackModeMessage(JukeboxPlaybackMode playbackMode) : BoundUserInterfaceMessage { public JukeboxPlaybackMode PlaybackMode = playbackMode; } [Serializable, NetSerializable] public enum JukeboxPlaybackMode : byte { Single, Shuffle, Repeat, } // End Frontier: Shuffle & Repeat [Serializable, NetSerializable] public enum JukeboxVisuals : byte { VisualState } [Serializable, NetSerializable] public enum JukeboxVisualState : byte { On, Off, Select, } public enum JukeboxVisualLayers : byte { Base }