Skip to content

Commit 26e22d4

Browse files
authored
Merge pull request #80 from ELDment/beta-1
2 parents d279eb2 + d1e8916 commit 26e22d4

File tree

15 files changed

+129
-95
lines changed

15 files changed

+129
-95
lines changed

managed/src/SwiftlyS2.Core/Modules/Menus/Menu.cs

Lines changed: 53 additions & 61 deletions
Large diffs are not rendered by default.

managed/src/SwiftlyS2.Core/Modules/Menus/MenuManager.cs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,12 @@ internal class MenuManager : IMenuManager
4747
private SoundEvent _exitSound = new();
4848
private SoundEvent _scrollSound = new();
4949

50-
public MenuManager(ISwiftlyCore core)
50+
public MenuManager( ISwiftlyCore core )
5151
{
5252
_Core = core;
5353
var settings = NativeEngineHelpers.GetMenuSettings();
5454
var parts = settings.Split('\x01');
55-
Settings = new MenuSettings
56-
{
55+
Settings = new MenuSettings {
5756
NavigationPrefix = parts[0],
5857
InputMode = parts[1],
5958
ButtonsUse = parts[2],
@@ -92,7 +91,7 @@ public MenuManager(ISwiftlyCore core)
9291
_Core.Event.OnMapUnload -= OnMapUnload;
9392
}
9493

95-
void KeyStateChange(IOnClientKeyStateChangedEvent @event)
94+
void KeyStateChange( IOnClientKeyStateChangedEvent @event )
9695
{
9796
var player = _Core.PlayerManager.GetPlayer(@event.PlayerId);
9897
var menu = GetMenu(player);
@@ -106,6 +105,17 @@ void KeyStateChange(IOnClientKeyStateChangedEvent @event)
106105
var exitKey = menu.ButtonOverrides?.Exit ?? StringToKeyKind.GetValueOrDefault(Settings.ButtonsExit);
107106
var useKey = menu.ButtonOverrides?.Select ?? StringToKeyKind.GetValueOrDefault(Settings.ButtonsUse);
108107

108+
new Dictionary<string, KeyKind> { { "Scroll", scrollKey }, { "ScrollBack", scrollBackKey }, { "Exit", exitKey }, { "Use", useKey } }
109+
.GroupBy(kvp => kvp.Value)
110+
.Where(g => g.Count() > 1 && @event.Key.HasFlag(g.Key))
111+
.ToList()
112+
.ForEach(group =>
113+
{
114+
Spectre.Console.AnsiConsole.WriteException(
115+
new InvalidOperationException($"Duplicate key binding detected in menu '{menu.Title}': Key '{group.Key}' is used by: {string.Join(", ", group.Select(kvp => kvp.Key))}")
116+
);
117+
});
118+
109119
if (@event.Key == scrollKey)
110120
{
111121
menu.MoveSelection(player, 1);
@@ -201,7 +211,7 @@ void KeyStateChange(IOnClientKeyStateChangedEvent @event)
201211
}
202212
}
203213

204-
public void OnClientDisconnected(IOnClientDisconnectedEvent @event)
214+
public void OnClientDisconnected( IOnClientDisconnectedEvent @event )
205215
{
206216
var player = _Core.PlayerManager.GetPlayer(@event.PlayerId);
207217
if (player == null)
@@ -221,7 +231,7 @@ public void OnClientDisconnected(IOnClientDisconnectedEvent @event)
221231
}
222232
}
223233

224-
public void OnMapUnload(IOnMapUnloadEvent _)
234+
public void OnMapUnload( IOnMapUnloadEvent _ )
225235
{
226236
CloseAllMenus();
227237
}
@@ -242,7 +252,7 @@ public void CloseAllMenus()
242252
OpenMenus.Clear();
243253
}
244254

245-
public void CloseMenu(IMenu menu)
255+
public void CloseMenu( IMenu menu )
246256
{
247257
foreach (var kvp in OpenMenus)
248258
{
@@ -256,7 +266,7 @@ public void CloseMenu(IMenu menu)
256266
}
257267
}
258268

259-
public void CloseMenuByTitle(string title, bool exact = false)
269+
public void CloseMenuByTitle( string title, bool exact = false )
260270
{
261271
foreach (var kvp in OpenMenus)
262272
{
@@ -270,7 +280,7 @@ public void CloseMenuByTitle(string title, bool exact = false)
270280
}
271281
}
272282

273-
public void CloseMenuForPlayer(IPlayer player)
283+
public void CloseMenuForPlayer( IPlayer player )
274284
{
275285
if (OpenMenus.TryRemove(player, out var menu))
276286
{
@@ -283,17 +293,17 @@ public void CloseMenuForPlayer(IPlayer player)
283293
}
284294
}
285295

286-
public IMenu CreateMenu(string title)
296+
public IMenu CreateMenu( string title )
287297
{
288298
return new Menu { Title = title, MenuManager = this, MaxVisibleOptions = Settings.ItemsPerPage, _Core = _Core };
289299
}
290300

291-
public IMenu? GetMenu(IPlayer player)
301+
public IMenu? GetMenu( IPlayer player )
292302
{
293303
return OpenMenus.TryGetValue(player, out var menu) ? menu : null;
294304
}
295305

296-
public void OpenMenu(IPlayer player, IMenu menu)
306+
public void OpenMenu( IPlayer player, IMenu menu )
297307
{
298308
if (OpenMenus.TryGetValue(player, out var currentMenu))
299309
{
@@ -306,7 +316,7 @@ public void OpenMenu(IPlayer player, IMenu menu)
306316
OnMenuOpened?.Invoke(player, menu);
307317
}
308318

309-
public bool HasMenuOpen(IPlayer player)
319+
public bool HasMenuOpen( IPlayer player )
310320
{
311321
return NativePlayer.HasMenuShown(player.PlayerID);
312322
}

managed/src/SwiftlyS2.Core/Modules/Menus/Options/AsyncButtonMenuOption.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public bool CanInteract(IPlayer player)
5050
return !IsLoading && (EnabledCheck?.Invoke(player) ?? true);
5151
}
5252

53-
public string GetDisplayText(IPlayer player)
53+
public string GetDisplayText(IPlayer player, bool updateHorizontalStyle = false)
5454
{
5555
var sizeClass = MenuSizeHelper.GetSizeClass(Size);
5656

@@ -59,7 +59,7 @@ public string GetDisplayText(IPlayer player)
5959
return $"<font class='{sizeClass}' color='#ffaa00'>{_loadingText ?? "Loading..."}</font>";
6060
}
6161

62-
var text = (Menu as Menus.Menu)?.ApplyHorizontalStyle(Text, OverflowStyle) ?? Text;
62+
var text = (Menu as Menus.Menu)?.ApplyHorizontalStyle(Text, OverflowStyle, updateHorizontalStyle) ?? Text;
6363
if (!CanInteract(player))
6464
{
6565
return $"<font class='{sizeClass}' color='grey'>{text}</font>";

managed/src/SwiftlyS2.Core/Modules/Menus/Options/ButtonMenuOption.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ public bool CanInteract(IPlayer player)
4747
return EnabledCheck?.Invoke(player) ?? true;
4848
}
4949

50-
public string GetDisplayText(IPlayer player)
50+
public string GetDisplayText(IPlayer player, bool updateHorizontalStyle = false)
5151
{
5252
var sizeClass = MenuSizeHelper.GetSizeClass(Size);
5353

54-
var text = (Menu as Menus.Menu)?.ApplyHorizontalStyle(Text, OverflowStyle) ?? Text;
54+
var text = (Menu as Menus.Menu)?.ApplyHorizontalStyle(Text, OverflowStyle, updateHorizontalStyle) ?? Text;
5555
if (!CanInteract(player))
5656
{
5757
return $"<font class='{sizeClass}' color='grey'>{text}</font>";

managed/src/SwiftlyS2.Core/Modules/Menus/Options/ChoiceMenuButton.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,13 @@ public bool CanInteract(IPlayer player)
6767
return EnabledCheck?.Invoke(player) ?? true;
6868
}
6969

70-
public string GetDisplayText(IPlayer player)
70+
public string GetDisplayText(IPlayer player, bool updateHorizontalStyle = false)
7171
{
7272
var sizeClass = MenuSizeHelper.GetSizeClass(Size);
7373

7474
var choice = $"<font color='{Menu!.RenderColor.ToHex(true)}'>[</font>{SelectedChoice}<font color='{Menu.RenderColor.ToHex(true)}'>]</font>";
7575

76-
var text = (Menu as Menus.Menu)?.ApplyHorizontalStyle(Text, OverflowStyle) ?? Text;
76+
var text = (Menu as Menus.Menu)?.ApplyHorizontalStyle(Text, OverflowStyle, updateHorizontalStyle) ?? Text;
7777
if (!CanInteract(player))
7878
{
7979
return $"<font class='{sizeClass}' color='grey'>{text}: {choice}</font>";

managed/src/SwiftlyS2.Core/Modules/Menus/Options/DynamicMenuOption.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public bool CanInteract(IPlayer player)
5656
return _onClick != null && (_enabledCheck?.Invoke(player) ?? true);
5757
}
5858

59-
public string GetDisplayText(IPlayer player)
59+
public string GetDisplayText(IPlayer player, bool updateHorizontalStyle = false)
6060
{
6161
var sizeClass = MenuSizeHelper.GetSizeClass(_size);
6262

@@ -69,7 +69,7 @@ public string GetDisplayText(IPlayer player)
6969

7070
if (oldText != _cachedText && Menu != null)
7171
{
72-
Menu.Rerender(player, true);
72+
Menu.Rerender(player, false);
7373
}
7474
}
7575

managed/src/SwiftlyS2.Core/Modules/Menus/Options/ProgressBarMenuButton.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ internal class ProgressBarMenuOption(string text, Func<float> progressProvider,
2222
public bool ShouldShow(IPlayer player) => true;
2323
public bool CanInteract(IPlayer player) => false;
2424

25-
public string GetDisplayText(IPlayer player)
25+
public string GetDisplayText(IPlayer player, bool updateHorizontalStyle = false)
2626
{
2727
var sizeClass = MenuSizeHelper.GetSizeClass(Size);
2828

@@ -37,7 +37,7 @@ public string GetDisplayText(IPlayer player)
3737
bar += $"<font color='#666666'>{EmptyChar}</font>";
3838

3939
var percentage = ShowPercentage ? $" {(int)(progress * 100)}%" : "";
40-
return $"<font class='{sizeClass}'>{((Menu as Menus.Menu)?.ApplyHorizontalStyle(Text, OverflowStyle) ?? Text)}: {bar}{percentage}</font>";
40+
return $"<font class='{sizeClass}'>{((Menu as Menus.Menu)?.ApplyHorizontalStyle(Text, OverflowStyle, updateHorizontalStyle) ?? Text)}: {bar}{percentage}</font>";
4141
}
4242

4343
public IMenuTextSize GetTextSize()

managed/src/SwiftlyS2.Core/Modules/Menus/Options/SeparatorMenuButton.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public SeparatorMenuOption()
2020
public bool ShouldShow(IPlayer player) => true;
2121
public bool CanInteract(IPlayer player) => false;
2222

23-
public string GetDisplayText(IPlayer player)
23+
public string GetDisplayText(IPlayer player, bool updateHorizontalStyle = false)
2424
{
2525
return $"<font color='{Menu!.RenderColor.ToHex(true)}'>{Text}</font>";
2626
}

managed/src/SwiftlyS2.Core/Modules/Menus/Options/SliderMenuButton.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public bool CanInteract(IPlayer player)
5757
return EnabledCheck?.Invoke(player) ?? true;
5858
}
5959

60-
public string GetDisplayText(IPlayer player)
60+
public string GetDisplayText(IPlayer player, bool updateHorizontalStyle = false)
6161
{
6262
var sizeClass = MenuSizeHelper.GetSizeClass(Size);
6363

@@ -75,7 +75,7 @@ public string GetDisplayText(IPlayer player)
7575
}
7676
slider += $"<font color='#ff3333'>)</font> {Value:F1}";
7777

78-
var text = (Menu as Menus.Menu)?.ApplyHorizontalStyle(Text, OverflowStyle) ?? Text;
78+
var text = (Menu as Menus.Menu)?.ApplyHorizontalStyle(Text, OverflowStyle, updateHorizontalStyle) ?? Text;
7979
if (!CanInteract(player))
8080
{
8181
return $"<font class='{sizeClass}' color='grey'>{text}: {slider}</font>";

managed/src/SwiftlyS2.Core/Modules/Menus/Options/SubmenuMenuOption.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public bool CanInteract(IPlayer player)
4242
return EnabledCheck?.Invoke(player) ?? true;
4343
}
4444

45-
public string GetDisplayText(IPlayer player)
45+
public string GetDisplayText(IPlayer player, bool updateHorizontalStyle = false)
4646
{
4747
var sizeClass = MenuSizeHelper.GetSizeClass(Size);
4848

0 commit comments

Comments
 (0)