Start modifying gallery, add icons to game filter listbox

This commit is contained in:
trawzified 2023-12-27 16:25:59 +01:00
parent 0baba1bfff
commit e6b746a6ec
6 changed files with 135 additions and 104 deletions

View File

@ -32,7 +32,7 @@ namespace Wabbajack
public ReadOnlyObservableCollection<ModListMetadataVM> ModLists => _filteredModLists;
private const string ALL_GAME_TYPE = "All";
private const string ALL_GAME_IDENTIFIER = "All games";
[Reactive] public IErrorResponse Error { get; set; }
@ -48,15 +48,20 @@ namespace Wabbajack
public class GameTypeEntry
{
public GameTypeEntry(string humanFriendlyName, int amount)
public GameTypeEntry(GameMetaData gameMetaData, int amount)
{
HumanFriendlyName = humanFriendlyName;
GameMetaData = gameMetaData;
IsAllGamesEntry = gameMetaData == null;
GameIdentifier = IsAllGamesEntry ? ALL_GAME_IDENTIFIER : gameMetaData?.HumanFriendlyGameName;
Amount = amount;
FormattedName = $"{HumanFriendlyName} ({Amount})";
FormattedName = IsAllGamesEntry ? $"{ALL_GAME_IDENTIFIER} ({Amount})" : $"{gameMetaData.HumanFriendlyGameName} ({Amount})";
}
public string HumanFriendlyName { get; set; }
public int Amount { get; set; }
public string FormattedName { get; set; }
public bool IsAllGamesEntry { get; set; }
public GameMetaData GameMetaData { get; private set; }
public int Amount { get; private set; }
public string FormattedName { get; private set; }
public string GameIdentifier { get; private set; }
public static GameTypeEntry GetAllGamesEntry(int amount) => new(null, amount);
}
[Reactive] public List<GameTypeEntry> GameTypeEntries { get; set; }
@ -68,8 +73,8 @@ namespace Wabbajack
get => _selectedGameTypeEntry;
set
{
RaiseAndSetIfChanged(ref _selectedGameTypeEntry, value == null ? GameTypeEntries?.FirstOrDefault(gte => gte.HumanFriendlyName == ALL_GAME_TYPE) : value);
GameType = _selectedGameTypeEntry?.HumanFriendlyName;
RaiseAndSetIfChanged(ref _selectedGameTypeEntry, value == null ? GameTypeEntries?.FirstOrDefault(gte => gte.IsAllGamesEntry) : value);
GameType = _selectedGameTypeEntry?.GameIdentifier;
}
}
@ -156,7 +161,7 @@ namespace Wabbajack
.Select<string, Func<ModListMetadataVM, bool>>(selected =>
{
_filteringOnGame = true;
if (selected is null or ALL_GAME_TYPE) return _ => true;
if (selected is null or ALL_GAME_IDENTIFIER) return _ => true;
return item => item.Metadata.Game.MetaData().HumanFriendlyGameName == selected;
})
.StartWith(_ => true);
@ -176,8 +181,8 @@ namespace Wabbajack
var previousGameType = GameType;
SelectedGameTypeEntry = null;
GameTypeEntries = new(GetGameTypeEntries());
var nextEntry = GameTypeEntries.FirstOrDefault(gte => previousGameType == gte.HumanFriendlyName);
SelectedGameTypeEntry = nextEntry != default ? nextEntry : GameTypeEntries.FirstOrDefault(gte => GameType == ALL_GAME_TYPE);
var nextEntry = GameTypeEntries.FirstOrDefault(gte => previousGameType == gte.GameIdentifier);
SelectedGameTypeEntry = nextEntry != default ? nextEntry : GameTypeEntries.FirstOrDefault(gte => GameType == ALL_GAME_IDENTIFIER);
}
_filteringOnGame = false;
})
@ -217,7 +222,7 @@ namespace Wabbajack
RxApp.MainThreadScheduler.Schedule(await _settingsManager.Load<FilterSettings>("modlist_gallery"),
(_, s) =>
{
SelectedGameTypeEntry = GameTypeEntries?.FirstOrDefault(gte => gte.HumanFriendlyName.Equals(s.GameType));
SelectedGameTypeEntry = GameTypeEntries?.FirstOrDefault(gte => gte.GameIdentifier.Equals(s.GameType));
ShowNSFW = s.ShowNSFW;
ShowUnofficialLists = s.ShowUnofficialLists;
Search = s.Search;
@ -251,9 +256,9 @@ namespace Wabbajack
{
return ModLists.Select(fm => fm.Metadata)
.GroupBy(m => m.Game)
.Select(g => new GameTypeEntry(g.Key.MetaData().HumanFriendlyGameName, g.Count()))
.OrderBy(gte => gte.HumanFriendlyName)
.Prepend(new GameTypeEntry(ALL_GAME_TYPE, ModLists.Count))
.Select(g => new GameTypeEntry(g.Key.MetaData(), g.Count()))
.OrderBy(gte => gte.GameMetaData.HumanFriendlyGameName)
.Prepend(GameTypeEntry.GetAllGamesEntry(ModLists.Count))
.ToList();
}
}

View File

@ -24,8 +24,9 @@ namespace Wabbajack
private readonly ILogger<HomeVM> _logger;
private readonly Client _wjClient;
public HomeVM(Client wjClient)
public HomeVM(ILogger<HomeVM> logger, Client wjClient)
{
_logger = logger;
_wjClient = wjClient;
BrowseCommand = ReactiveCommand.Create(() => NavigateToGlobal.Send(ScreenType.ModListGallery));
VisitModlistWizardCommand = ReactiveCommand.Create(() =>

View File

@ -9,31 +9,22 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:rxui="http://reactiveui.net"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:ic="clr-namespace:FluentIcons.WPF;assembly=FluentIcons.WPF"
d:DesignHeight="450"
d:DesignWidth="900"
x:TypeArguments="local:ModListGalleryVM"
mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="47" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Rectangle Grid.Row="1" Grid.RowSpan="3"
Margin="6,0">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Offset="0" Color="#123700B3" />
<GradientStop Offset="1" Color="#00000000" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Border Grid.Row="1"
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
<Border Grid.Column="1"
BorderBrush="Transparent"
BorderThickness="1,0,1,1">
BorderThickness="0">
<ScrollViewer Background="Transparent" VerticalScrollBarVisibility="Auto">
<ItemsControl
x:Name="ModListGalleryControl"
Margin="0,10,0,0"
HorizontalAlignment="Center"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<ItemsControl.ItemsPanel>
@ -49,26 +40,28 @@
</ItemsControl>
</ScrollViewer>
</Border>
<mahapps:ProgressRing Grid.Row="1"
<mahapps:ProgressRing Grid.Column="1"
x:Name="LoadingRing"
Visibility="Collapsed" />
<StackPanel Grid.Row="1"
<StackPanel Grid.Column="1"
x:Name="NoneFound"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Orientation="Vertical"
Visibility="Collapsed">
<iconPacks:PackIconControl
Width="50"
Height="50"
Margin="0,0,0,10"
HorizontalAlignment="Center"
<ic:SymbolIcon
Grid.Column="1"
Foreground="{StaticResource Triadic2Brush}"
Kind="{x:Static iconPacks:PackIconMaterialKind.Cancel}" />
VerticalAlignment="Top"
Symbol="DismissCircle"
IsFilled="False"
FontSize="72"
/>
<TextBlock
FontSize="14"
FontSize="24"
Margin="0, 10, 0, 0"
Foreground="{StaticResource ForegroundBrush}"
Text="No Matches" />
Text="No modlists matching specified criteria" />
</StackPanel>
<iconPacks:PackIconControl Grid.Row="1"
x:Name="ErrorIcon"
@ -80,29 +73,30 @@
Kind="{x:Static iconPacks:PackIconMaterialKind.AlertCircle}"
ToolTip="Error loading modlist gallery"
Visibility="Collapsed" />
<local:TopProgressView Grid.Row="0" Grid.RowSpan="2"
<!--<local:TopProgressView Grid.Row="0" Grid.RowSpan="2"
Title="Browsing Modlists"
ShadowMargin="False" />
<WrapPanel Grid.Row="0"
Height="25"
Margin="5,5,5,10"
HorizontalAlignment="Right"
Orientation="Horizontal">
<Label
Margin="0,0,0,0"
VerticalAlignment="Center"
Content="Game"
ToolTip="Select a game" />
ShadowMargin="False" />-->
<StackPanel Grid.Row="0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Background="Green"
Orientation="Vertical">
<ComboBox
Width="150"
Margin="0,0,10,0"
VerticalAlignment="Center"
Foreground="{StaticResource ForegroundBrush}"
ItemsSource="{Binding GameTypeEntries, Mode=TwoWay}"
SelectedItem="{Binding SelectedGameTypeEntry, Mode=TwoWay}"
DisplayMemberPath="FormattedName"
IsSynchronizedWithCurrentItem="True"
ToolTip="Select a game" />
ToolTip="Filter modlists on game">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding GameMetaData.IconSource}" Stretch="UniformToFill" Height="32" Width="32"/>
<TextBlock Margin="10, 0, 0, 0" Text="{Binding FormattedName}" VerticalAlignment="Center" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock
Margin="0,0,5,0"
VerticalAlignment="Center"
@ -140,21 +134,16 @@
<Button
x:Name="ClearFiltersButton"
Margin="0,0,10,0"
Style="{StaticResource IconBareButtonStyle}"
ToolTip="Clear All Filters">
<iconPacks:Material Kind="FilterRemove" />
Style="{StaticResource LargeButtonStyle}"
ToolTip="Reset filters to the default options"
FontSize="24">
<Button.Content>
<StackPanel Orientation="Horizontal">
<ic:SymbolIcon Symbol="FilterDismiss" />
<TextBlock Margin="10, 0, 0, 0">Reset filters</TextBlock>
</StackPanel>
</Button.Content>
</Button>
</WrapPanel>
<Button Grid.Row="0"
x:Name="BackButton"
Width="30"
Height="30"
Margin="7,5,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Style="{StaticResource IconCircleButtonStyle}"
ToolTip="Back to main menu">
<iconPacks:PackIconMaterial Foreground="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}" Kind="ArrowLeft" />
</Button>
</StackPanel>
</Grid>
</rxui:ReactiveUserControl>

View File

@ -13,9 +13,11 @@ namespace Wabbajack
this.WhenActivated(dispose =>
{
/*
this.WhenAny(x => x.ViewModel.BackCommand)
.BindToStrict(this, x => x.BackButton.Command)
.DisposeWith(dispose);
*/
this.WhenAny(x => x.ViewModel.ModLists)
.BindToStrict(this, x => x.ModListGalleryControl.ItemsSource)
.DisposeWith(dispose);

View File

@ -51,4 +51,8 @@ public class GameMetaData
public Game[] CanSourceFrom { get; set; } = Array.Empty<Game>();
public string HumanFriendlyGameName => Game.GetDescription();
/// <summary>
/// Can be an URI to an ICO / PNG, preferred size 32x32
/// </summary>
public string IconSource { get; set; } = @"Resources/Icons/wabbajack.ico";
}

View File

@ -26,7 +26,8 @@ public static class GameRegistry
{
"Morrowind.exe".ToRelativePath()
},
MainExecutable = "Morrowind.exe".ToRelativePath()
MainExecutable = "Morrowind.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/661c1c090ff5831a647202397c61d73c/24/32x32.png"
}
},
{
@ -43,7 +44,8 @@ public static class GameRegistry
{
"oblivion.exe".ToRelativePath()
},
MainExecutable = "Oblivion.exe".ToRelativePath()
MainExecutable = "Oblivion.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/e403262769f74b83009bffb6e3c0a3b7/32/32x32.png"
}
},
@ -61,7 +63,8 @@ public static class GameRegistry
{
"Fallout3.exe".ToRelativePath()
},
MainExecutable = "Fallout3.exe".ToRelativePath()
MainExecutable = "Fallout3.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/9fc14d103064494b6a2be4dbd1dcdf32/32/32x32.png"
}
},
{
@ -78,7 +81,8 @@ public static class GameRegistry
{
"FalloutNV.exe".ToRelativePath()
},
MainExecutable = "FalloutNV.exe".ToRelativePath()
MainExecutable = "FalloutNV.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/f7c0dc716cd86f8d162c366d370baf14/32/32x32.png"
}
},
{
@ -95,7 +99,8 @@ public static class GameRegistry
"tesv.exe".ToRelativePath()
},
MainExecutable = "TESV.exe".ToRelativePath(),
CommonlyConfusedWith = new[] {Game.SkyrimSpecialEdition, Game.SkyrimVR}
CommonlyConfusedWith = new[] {Game.SkyrimSpecialEdition, Game.SkyrimVR},
IconSource = "https://cdn2.steamgriddb.com/icon/58ee2794cc87707943624dc8db2ff5a0/8/32x32.png"
}
},
{
@ -118,7 +123,8 @@ public static class GameRegistry
"SkyrimSE.exe".ToRelativePath()
},
MainExecutable = "SkyrimSE.exe".ToRelativePath(),
CommonlyConfusedWith = new[] {Game.Skyrim, Game.SkyrimVR}
CommonlyConfusedWith = new[] {Game.Skyrim, Game.SkyrimVR},
IconSource = "https://cdn2.steamgriddb.com/icon/e1b90346c92331860b1391257a106bb1/32/32x32.png"
}
},
{
@ -136,7 +142,8 @@ public static class GameRegistry
"Fallout4.exe".ToRelativePath()
},
MainExecutable = "Fallout4.exe".ToRelativePath(),
CommonlyConfusedWith = new[] {Game.Fallout4VR}
CommonlyConfusedWith = new[] {Game.Fallout4VR},
IconSource = "https://cdn2.steamgriddb.com/icon/73640de25b7d656733ce2f808a330f18/32/32x32.png"
}
},
{
@ -154,7 +161,8 @@ public static class GameRegistry
},
MainExecutable = "SkyrimVR.exe".ToRelativePath(),
CommonlyConfusedWith = new[] {Game.Skyrim, Game.SkyrimSpecialEdition},
CanSourceFrom = new[] {Game.SkyrimSpecialEdition}
CanSourceFrom = new[] {Game.SkyrimSpecialEdition},
IconSource = "https://cdn2.steamgriddb.com/icon/0e003154a81256e3cf5732f8d0d7efaa/32/32x32.png"
}
},
{
@ -171,7 +179,8 @@ public static class GameRegistry
"TESV.exe".ToRelativePath()
},
MainExecutable = "TESV.exe".ToRelativePath(),
CommonlyConfusedWith = new[] {Game.EnderalSpecialEdition}
CommonlyConfusedWith = new[] {Game.EnderalSpecialEdition},
IconSource = "https://cdn2.steamgriddb.com/icon/6505e8a0c0e1a90d8da8879e49a437f0.png"
}
},
{
@ -189,7 +198,8 @@ public static class GameRegistry
"SkyrimSE.exe".ToRelativePath()
},
MainExecutable = "SkyrimSE.exe".ToRelativePath(),
CommonlyConfusedWith = new[] {Game.Enderal}
CommonlyConfusedWith = new[] {Game.Enderal},
IconSource = "https://cdn2.steamgriddb.com/icon/104c6f99020b85465ae361a92d09a8d1.png"
}
},
{
@ -206,7 +216,8 @@ public static class GameRegistry
},
MainExecutable = "Fallout4VR.exe".ToRelativePath(),
CommonlyConfusedWith = new[] {Game.Fallout4},
CanSourceFrom = new[] {Game.Fallout4}
CanSourceFrom = new[] {Game.Fallout4},
IconSource = "https://cdn2.steamgriddb.com/icon/5f9ce39aec46f3e8e8aebbc722d8ceeb/32/32x32.png"
}
},
{
@ -224,7 +235,8 @@ public static class GameRegistry
{
@"_windowsnosteam\Darkest.exe".ToRelativePath()
},
MainExecutable = @"_windowsnosteam\Darkest.exe".ToRelativePath()
MainExecutable = @"_windowsnosteam\Darkest.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/b1d2128cee734a257c5e0d5c73bbdd1b.png"
}
},
{
@ -241,7 +253,8 @@ public static class GameRegistry
{
@"Binaries\Win32\Dishonored.exe".ToRelativePath()
},
MainExecutable = @"Binaries\Win32\Dishonored.exe".ToRelativePath()
MainExecutable = @"Binaries\Win32\Dishonored.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/6fcd734d28ae00944f8f7c68a219bbc5/32/32x32.png"
}
},
{
@ -258,7 +271,8 @@ public static class GameRegistry
{
@"System\witcher.exe".ToRelativePath()
},
MainExecutable = @"System\witcher.exe".ToRelativePath()
MainExecutable = @"System\witcher.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/fd72ecaa23aa0a514a53c6a16eabb9c6.png"
}
},
{
@ -276,7 +290,8 @@ public static class GameRegistry
{
@"bin\x64\witcher3.exe".ToRelativePath()
},
MainExecutable = @"bin\x64\witcher3.exe".ToRelativePath()
MainExecutable = @"bin\x64\witcher3.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/2af9b1a840b4ecd522fe1cda88c8385e/32/32x32.png"
}
},
{
@ -294,7 +309,8 @@ public static class GameRegistry
{
"Stardew Valley.exe".ToRelativePath()
},
MainExecutable = "Stardew Valley.exe".ToRelativePath()
MainExecutable = "Stardew Valley.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/2119b8d43eafcf353e07d7cb5554170b/32/32x32.png"
}
},
{
@ -312,7 +328,8 @@ public static class GameRegistry
{
@"bin\Win64\KingdomCome.exe".ToRelativePath()
},
MainExecutable = @"bin\Win64\KingdomCome.exe".ToRelativePath()
MainExecutable = @"bin\Win64\KingdomCome.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/1bdde90ebfdef547440410e79b1877bf.png"
}
},
{
@ -329,7 +346,8 @@ public static class GameRegistry
{
@"MW5Mercs\Binaries\Win64\MechWarrior-Win64-Shipping.exe".ToRelativePath()
},
MainExecutable = @"MW5Mercs\Binaries\Win64\MechWarrior-Win64-Shipping.exe".ToRelativePath()
MainExecutable = @"MW5Mercs\Binaries\Win64\MechWarrior-Win64-Shipping.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/c59bb6bab3096620efe78bdeb031f027/8/32x32.png"
}
},
{
@ -345,7 +363,8 @@ public static class GameRegistry
{
@"Binaries\NMS.exe".ToRelativePath()
},
MainExecutable = @"Binaries\NMS.exe".ToRelativePath()
MainExecutable = @"Binaries\NMS.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/970e789e0a92eab99bcabf36dfa6050c/32/32x32.png"
}
},
{
@ -362,7 +381,8 @@ public static class GameRegistry
{
@"bin_ship\daorigins.exe".ToRelativePath()
},
MainExecutable = @"bin_ship\daorigins.exe".ToRelativePath()
MainExecutable = @"bin_ship\daorigins.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/b55d7ce2adb9449fc4dae6115cbbe30f/32/32x32.png"
}
},
{
@ -378,7 +398,8 @@ public static class GameRegistry
{
@"bin_ship\DragonAge2.exe".ToRelativePath()
},
MainExecutable = @"bin_ship\DragonAge2.exe".ToRelativePath()
MainExecutable = @"bin_ship\DragonAge2.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/a6a946f7265ed7f28a6425ee76621c3a/32/32x32.png"
}
},
{
@ -394,7 +415,8 @@ public static class GameRegistry
{
@"DragonAgeInquisition.exe".ToRelativePath()
},
MainExecutable = @"DragonAgeInquisition.exe".ToRelativePath()
MainExecutable = @"DragonAgeInquisition.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/b98004311446c60521a8831075423c20.png"
}
},
{
@ -411,7 +433,8 @@ public static class GameRegistry
{
@"KSP_x64.exe".ToRelativePath()
},
MainExecutable = @"KSP_x64.exe".ToRelativePath()
MainExecutable = @"KSP_x64.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/2ee4162f4a89db5fa43b3b08900ee370.png"
}
},
{
@ -425,7 +448,8 @@ public static class GameRegistry
{
@"tModLoader.exe".ToRelativePath()
},
MainExecutable = @"tModLoader.exe".ToRelativePath()
MainExecutable = @"tModLoader.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/e658047c67a80c47b5ba982ab520b59a.png"
}
},
{
@ -443,7 +467,8 @@ public static class GameRegistry
{
@"bin\x64\Cyberpunk2077.exe".ToRelativePath()
},
MainExecutable = @"bin\x64\Cyberpunk2077.exe".ToRelativePath()
MainExecutable = @"bin\x64\Cyberpunk2077.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/2d45da15db966ba887cf4e573989fcc8/32/32x32.png"
}
},
{
@ -459,7 +484,8 @@ public static class GameRegistry
{
@"Game\Bin\TS4_x64.exe".ToRelativePath()
},
MainExecutable = @"Game\Bin\TS4_x64.exe".ToRelativePath()
MainExecutable = @"Game\Bin\TS4_x64.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/9fc664916bce863561527f06a96f5ff3/32/32x32.png"
}
},
{
@ -477,7 +503,8 @@ public static class GameRegistry
{
@"DDDA.exe".ToRelativePath()
},
MainExecutable = @"DDDA.exe".ToRelativePath()
MainExecutable = @"DDDA.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/a830839bbb4a4022a84ff2b8af5c46e0.png"
}
},
{
@ -492,7 +519,8 @@ public static class GameRegistry
{
"nw.exe".ToRelativePath()
},
MainExecutable = "nw.exe".ToRelativePath()
MainExecutable = "nw.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/37286bc401299e97a564f6b42792eb6d.png"
}
},
{
@ -509,7 +537,8 @@ public static class GameRegistry
{
"valheim.exe".ToRelativePath()
},
MainExecutable = "valheim.exe".ToRelativePath()
MainExecutable = "valheim.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/dd055f53a45702fe05e449c30ac80df9/32/32x32.png"
}
},
{
@ -531,7 +560,8 @@ public static class GameRegistry
{
@"bin\Win64_Shipping_Client\Bannerlord.exe".ToRelativePath()
},
MainExecutable = @"bin\Win64_Shipping_Client\Bannerlord.exe".ToRelativePath()
MainExecutable = @"bin\Win64_Shipping_Client\Bannerlord.exe".ToRelativePath(),
IconSource = "https://cdn2.steamgriddb.com/icon/811cf46d61c9ae564bf7fa4b5abc639b.png"
}
},
{