-
Notifications
You must be signed in to change notification settings - Fork 618
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into rework-races-guidebook
- Loading branch information
Showing
2,271 changed files
with
288,048 additions
and
81,675 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
119 changes: 119 additions & 0 deletions
119
Content.Client/Audio/Jukebox/JukeboxBoundUserInterface.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
using Content.Shared.Audio.Jukebox; | ||
using Robust.Client.Audio; | ||
using Robust.Client.Player; | ||
using Robust.Shared.Audio.Components; | ||
using Robust.Shared.Player; | ||
using Robust.Shared.Prototypes; | ||
|
||
namespace Content.Client.Audio.Jukebox; | ||
|
||
public sealed class JukeboxBoundUserInterface : BoundUserInterface | ||
{ | ||
[Dependency] private readonly IPlayerManager _player = default!; | ||
[Dependency] private readonly IPrototypeManager _protoManager = default!; | ||
|
||
[ViewVariables] | ||
private JukeboxMenu? _menu; | ||
|
||
public JukeboxBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) | ||
{ | ||
IoCManager.InjectDependencies(this); | ||
} | ||
|
||
protected override void Open() | ||
{ | ||
base.Open(); | ||
|
||
_menu = new JukeboxMenu(); | ||
_menu.OnClose += Close; | ||
_menu.OpenCentered(); | ||
|
||
_menu.OnPlayPressed += args => | ||
{ | ||
if (args) | ||
{ | ||
SendMessage(new JukeboxPlayingMessage()); | ||
} | ||
else | ||
{ | ||
SendMessage(new JukeboxPauseMessage()); | ||
} | ||
}; | ||
|
||
_menu.OnStopPressed += () => | ||
{ | ||
SendMessage(new JukeboxStopMessage()); | ||
}; | ||
|
||
_menu.OnSongSelected += SelectSong; | ||
|
||
_menu.SetTime += SetTime; | ||
PopulateMusic(); | ||
Reload(); | ||
} | ||
|
||
/// <summary> | ||
/// Reloads the attached menu if it exists. | ||
/// </summary> | ||
public void Reload() | ||
{ | ||
if (_menu == null || !EntMan.TryGetComponent(Owner, out JukeboxComponent? jukebox)) | ||
return; | ||
|
||
_menu.SetAudioStream(jukebox.AudioStream); | ||
|
||
if (_protoManager.TryIndex(jukebox.SelectedSongId, out var songProto)) | ||
{ | ||
var length = EntMan.System<AudioSystem>().GetAudioLength(songProto.Path.Path.ToString()); | ||
_menu.SetSelectedSong(songProto.Name, (float) length.TotalSeconds); | ||
} | ||
else | ||
{ | ||
_menu.SetSelectedSong(string.Empty, 0f); | ||
} | ||
} | ||
|
||
public void PopulateMusic() | ||
{ | ||
_menu?.Populate(_protoManager.EnumeratePrototypes<JukeboxPrototype>()); | ||
} | ||
|
||
public void SelectSong(ProtoId<JukeboxPrototype> songid) | ||
{ | ||
SendMessage(new JukeboxSelectedMessage(songid)); | ||
} | ||
|
||
public void SetTime(float time) | ||
{ | ||
var sentTime = time; | ||
|
||
// You may be wondering, what the fuck is this | ||
// Well we want to be able to predict the playback slider change, of which there are many ways to do it | ||
// We can't just use SendPredictedMessage because it will reset every tick and audio updates every frame | ||
// so it will go BRRRRT | ||
// Using ping gets us close enough that it SHOULD, MOST OF THE TIME, fall within the 0.1 second tolerance | ||
// that's still on engine so our playback position never gets corrected. | ||
if (EntMan.TryGetComponent(Owner, out JukeboxComponent? jukebox) && | ||
EntMan.TryGetComponent(jukebox.AudioStream, out AudioComponent? audioComp)) | ||
{ | ||
audioComp.PlaybackPosition = time; | ||
} | ||
|
||
SendMessage(new JukeboxSetTimeMessage(sentTime)); | ||
} | ||
|
||
protected override void Dispose(bool disposing) | ||
{ | ||
base.Dispose(disposing); | ||
if (!disposing) | ||
return; | ||
|
||
if (_menu == null) | ||
return; | ||
|
||
_menu.OnClose -= Close; | ||
_menu.Dispose(); | ||
_menu = null; | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<ui:FancyWindow xmlns="https://spacestation14.io" xmlns:ui="clr-namespace:Content.Client.UserInterface.Controls" | ||
SetSize="400 500" Title="{Loc 'jukebox-menu-title'}"> | ||
<BoxContainer Margin="4 0" Orientation="Vertical"> | ||
<ItemList Name="MusicList" SelectMode="Button" Margin="3 3 3 3" | ||
HorizontalExpand="True" VerticalExpand="True" SizeFlagsStretchRatio="8"/> | ||
<BoxContainer Orientation="Vertical"> | ||
<Label Name="SongSelected" Text="{Loc 'jukebox-menu-selectedsong'}" /> | ||
<Label Name="SongName" Text="---" /> | ||
<Slider Name="PlaybackSlider" HorizontalExpand="True" /> | ||
</BoxContainer> | ||
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" | ||
VerticalExpand="False" SizeFlagsStretchRatio="1"> | ||
<Button Name="PlayButton" Text="{Loc 'jukebox-menu-buttonplay'}" /> | ||
<Button Name="StopButton" Text="{Loc 'jukebox-menu-buttonstop'}" /> | ||
<Label Name="DurationLabel" Text="00:00 / 00:00" HorizontalAlignment="Right" HorizontalExpand="True"/> | ||
</BoxContainer> | ||
</BoxContainer> | ||
</ui:FancyWindow> |
Oops, something went wrong.