Skip to content

Commit b8bbdbd

Browse files
committed
added some conditions for addons
1 parent 134250a commit b8bbdbd

File tree

7 files changed

+64
-13
lines changed

7 files changed

+64
-13
lines changed

src/Avalonia/Core/Controls/CampaignsControl.axaml.cs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using BuildLauncher.Helpers;
44
using BuildLauncher.ViewModels;
55
using Common.Enums;
6+
using Common.Enums.Addons;
67
using Common.Helpers;
78
using Common.Interfaces;
89
using CommunityToolkit.Mvvm.Input;
@@ -60,9 +61,33 @@ private void AddPortsButtons()
6061
Content = sp,
6162
Command = new RelayCommand(() =>
6263
_viewModel.StartCampaignCommand.Execute(port),
63-
() => port.IsInstalled && CampaignsList.SelectedItem is not null &&
64-
(((IAddon)CampaignsList.SelectedItem).RequiredFeatures is null || !((IAddon)CampaignsList.SelectedItem).RequiredFeatures!.Except(port.SupportedFeatures).Any())
65-
),
64+
() =>
65+
{
66+
if (!port.IsInstalled)
67+
{
68+
return false;
69+
}
70+
71+
if (CampaignsList.SelectedItem is null)
72+
{
73+
return false;
74+
}
75+
76+
var selectedCampaign = (IAddon)CampaignsList.SelectedItem;
77+
78+
if (port.PortEnum is PortEnum.BuildGDX &&
79+
(selectedCampaign.Type is not AddonTypeEnum.Official || selectedCampaign.Id.Equals(DukeAddonEnum.DukeNW.ToString(), StringComparison.InvariantCultureIgnoreCase)))
80+
{
81+
return false;
82+
}
83+
84+
if (selectedCampaign.RequiredFeatures is null || !selectedCampaign.RequiredFeatures!.Except(port.SupportedFeatures).Any())
85+
{
86+
return true;
87+
}
88+
89+
return false;
90+
}),
6691
Margin = new(5),
6792
Padding = new(5),
6893
};

src/Avalonia/Core/Controls/MapsControl.axaml.cs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,32 @@ private void AddPortsButtons()
6060
Content = sp,
6161
Command = new RelayCommand(() =>
6262
_viewModel.StartMapCommand.Execute(port),
63-
() => port.IsInstalled && MapsList.SelectedItem is not null &&
64-
(((IAddon)MapsList.SelectedItem)?.RequiredFeatures is null || !((IAddon)MapsList.SelectedItem).RequiredFeatures!.Except(port.SupportedFeatures).Any())
65-
),
63+
() =>
64+
{
65+
if (!port.IsInstalled)
66+
{
67+
return false;
68+
}
69+
70+
if (MapsList.SelectedItem is null)
71+
{
72+
return false;
73+
}
74+
75+
var selectedMap = (IAddon)MapsList.SelectedItem;
76+
77+
if (port.PortEnum is PortEnum.BuildGDX)
78+
{
79+
return false;
80+
}
81+
82+
if (selectedMap.RequiredFeatures is null || !selectedMap.RequiredFeatures!.Except(port.SupportedFeatures).Any())
83+
{
84+
return true;
85+
}
86+
87+
return false;
88+
}),
6689
Margin = new(5),
6790
Padding = new(5),
6891
};

src/Common/Enums/FeatureEnum.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ public enum FeatureEnum
88
Sloped_Sprites,
99
TROR,
1010
Wall_Rotate_Cstat,
11-
CustomDude
11+
CustomDude,
12+
WorldTourSupport,
13+
[Obsolete]
14+
VacaDcSupport
1215
}
1316
}

src/Games/Games/DukeGame.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ Duke Nukem 3D is a first-person shooter developed and published by **3D Realms**
131131
""",
132132
Version = null,
133133
SupportedGame = new(GameEnum.Duke3D, DukeVersionEnum.Duke3D_WT),
134-
RequiredFeatures = null,
134+
RequiredFeatures = [FeatureEnum.WorldTourSupport],
135135
PathToFile = null,
136136
DependentAddons = null,
137137
IncompatibleAddons = null,
@@ -166,7 +166,7 @@ Duke Nukem 3D is a first-person shooter developed and published by **3D Realms**
166166
""",
167167
Version = null,
168168
SupportedGame = new(GameEnum.Duke3D, DukeVersionEnum.Duke3D_Atomic),
169-
RequiredFeatures = null,
169+
RequiredFeatures = [FeatureEnum.VacaDcSupport],
170170
PathToFile = null,
171171
DependentAddons = new() { {DukeAddonEnum.DukeVaca.ToString(), null } },
172172
IncompatibleAddons = null,
@@ -232,7 +232,7 @@ Duke Nukem must travel to the North Pole in order to stop the brainwashed Santa
232232
""",
233233
Version = null,
234234
SupportedGame = new(GameEnum.Duke3D, DukeVersionEnum.Duke3D_Atomic),
235-
RequiredFeatures = null,
235+
RequiredFeatures = [FeatureEnum.VacaDcSupport],
236236
PathToFile = null,
237237
DependentAddons = new() { { DukeAddonEnum.DukeDC.ToString(), null } },
238238
IncompatibleAddons = null,

src/Ports/Ports/BuildGDX.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public sealed class BuildGDX : BasePort
4545
public override bool IsInstalled => File.Exists(Path.Combine(PathToExecutableFolder, "BuildGDX.jar"));
4646

4747
/// <inheritdoc/>
48-
public override List<FeatureEnum> SupportedFeatures => [];
48+
public override List<FeatureEnum> SupportedFeatures => [FeatureEnum.WorldTourSupport];
4949

5050

5151
/// <inheritdoc/>

src/Ports/Ports/EDuke32/EDuke32.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public class EDuke32 : BasePort
5656
];
5757

5858
/// <inheritdoc/>
59-
public override List<FeatureEnum> SupportedFeatures => [FeatureEnum.EDuke32_CON];
59+
public override List<FeatureEnum> SupportedFeatures => [FeatureEnum.EDuke32_CON, FeatureEnum.WorldTourSupport];
6060

6161
/// <inheritdoc/>
6262
public override string? InstalledVersion

src/Ports/Ports/Raze.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public sealed class Raze : BasePort
6969
protected override string AddGrpParam => throw new NotImplementedException();
7070

7171
/// <inheritdoc/>
72-
public override List<FeatureEnum> SupportedFeatures => [];
72+
public override List<FeatureEnum> SupportedFeatures => [FeatureEnum.WorldTourSupport, FeatureEnum.VacaDcSupport];
7373

7474
/// <inheritdoc/>
7575
protected override void GetSkipIntroParameter(StringBuilder sb) => sb.Append(" -quick");

0 commit comments

Comments
 (0)