6
2025-12-18 02:55:17 +03:00

115 lines
2.8 KiB
C#

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<JukeboxPrototype>? SelectedSongId;
// Frontier: Shuffle & Repeat
/// <summary>
/// Whether or not the currently selected song is the first being played.
/// Useful for shuffle.
/// </summary>
[DataField, AutoNetworkedField]
public bool FirstPlay = true;
[ViewVariables]
public JukeboxPlaybackMode PlaybackMode = JukeboxPlaybackMode.Single;
// End Frontier: Shuffle & Repeat
[DataField, AutoNetworkedField]
public EntityUid? AudioStream;
/// <summary>
/// RSI state for the jukebox being on.
/// </summary>
[DataField]
public string? OnState;
/// <summary>
/// RSI state for the jukebox being on.
/// </summary>
[DataField]
public string? OffState;
/// <summary>
/// RSI state for the jukebox track being selected.
/// </summary>
[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<JukeboxPrototype> songId) : BoundUserInterfaceMessage
{
public ProtoId<JukeboxPrototype> 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
}