Small improvements for 3 screens (#934)

* Improve profile and player selection screens

- Ask before deleting a profile, Delete only removes a character while editing the name
- Ask to save or discard unsaved profile changes when leaving the profile screen
- Restore the previous name with Escape and prevent empty profile names
- Stop the webcam when leaving the profile screen and discard snapshots on avatar change
- Show inactive profiles dimmed in the profile screen
- Play the missing mic/profile warning each time the player selection is shown
- Fix crash when clicking a profile after removing a player with Delete in fast selection
- Keep the duet part selection when profiles are reloaded
- Only save the player number when it has changed

* Use party mode selection look in statistics screens

- Tiles and selection use the ButtonTile skin like the party mode selection, the selected tile uses the selection color of the skin
- The detail list uses the CoverTextBackground skin, inner cards and row stripes the ButtonTile skin
- More space between the title and the columns of the best list
- Show the date in the recently sung list left aligned inside the list

* Changelog

* Improve sing screen and redesign pause menu

- Fix jumping to the old pause position after restarting or skipping a song in vocals mode
- Keep name and avatar hidden for players without a valid profile
- Show the placeholder avatar for profiles without avatar image
- Hide player information and rating popups during the start countdown
- Fix pause select slides not being shown or hidden
- Show "no more songs" only when Ctrl+S is pressed
- Select "Continue" when opening the pause menu with Escape
- Darken the game behind the pause menu
- Pause buttons as vertical list with icons, hidden buttons leave no gaps (visible buttons are placed in the slots of all pause buttons)
- New PauseButton skin with rounded corners for wide buttons, used for the pause buttons and the vocals volume selection
- Larger pause title centered above the pause panels
- Info panel with cover, title, artist, song progress and player scores
- Vocals volume selection with icon and centered caption in the full width of the info panel, showing five values
- Pause panels and icons are animated together with the pause buttons

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
This commit is contained in:
McSchneidarandFlorian Ostertag authored and GitHub committed 2026-10-21 12:05:18 +02:00
1 parent c8213bdcda
commit 2cdd30c6fc
22 files changed
+1324 -429

No files matched your search

+14 -1
View File
@@ -99,6 +99,9 @@ namespace VocaluxeLib.Menu
private readonly List<Guid> _VisibleProfiles;
private readonly List<Guid> _UsedProfiles;
private readonly HashSet<Guid> _InactiveProfiles = new HashSet<Guid>();
public bool ShowInactive;
private CStatic _PlayerSelector;
@@ -378,8 +381,10 @@ namespace VocaluxeLib.Menu
{
if (i + offset * _Theme.Tiles.NumW < _VisibleProfiles.Count)
{
var alpha = _InactiveProfiles.Contains(_VisibleProfiles[i + offset * _Theme.Tiles.NumW]) ? 0.4f : 1f;
_Tiles[i].Avatar.Texture = CBase.Profiles.GetAvatar(_VisibleProfiles[i + offset * _Theme.Tiles.NumW]);
_Tiles[i].Avatar.Color = new SColorF(1, 1, 1, 1);
_Tiles[i].Avatar.Color = new SColorF(1, 1, 1, alpha);
_Tiles[i].Name.Alpha = alpha;
_Tiles[i].Name.Text = CBase.Profiles.GetPlayerName(_VisibleProfiles[i + offset * _Theme.Tiles.NumW]);
_Tiles[i].ProfileId = _VisibleProfiles.ElementAt(i + offset * _Theme.Tiles.NumW);
}
@@ -387,6 +392,7 @@ namespace VocaluxeLib.Menu
{
_Tiles[i].Avatar.Texture = TextureEmptyTile;
_Tiles[i].Avatar.Color = _ColorEmptyTile;
_Tiles[i].Name.Alpha = 1f;
_Tiles[i].Name.Text = "";
_Tiles[i].ProfileId = Guid.Empty;
}
@@ -514,11 +520,18 @@ namespace VocaluxeLib.Menu
private void _UpdateVisibleProfiles()
{
_VisibleProfiles.Clear();
_InactiveProfiles.Clear();
var profiles = CBase.Profiles.GetProfiles();
foreach (var profile in profiles)
{
var visible = profile.Active == EOffOn.TR_CONFIG_ON;
if (!visible && ShowInactive)
{
visible = true;
_InactiveProfiles.Add(profile.Id);
}
if (visible)
{
if (_UsedProfiles.Contains(profile.Id) && (int)profile.UserRole >= (int)EUserRole.TR_USERROLE_NORMAL)