Skip to content

Commit 2ecb92a

Browse files
authored
Add Home Cell and Theme options to Basic Options window
1 parent f565d7e commit 2ecb92a

8 files changed

Lines changed: 115 additions & 39 deletions

File tree

src/TSMapEditor/Config/UI/Windows/BasicSectionConfigWindow.ini

Lines changed: 57 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,27 @@ $CC06=tbPercent:EditorNumberTextBox
1111
$CC07=lblPercent:XNALabel
1212
$CC08=tbInitialTime:EditorNumberTextBox
1313
$CC09=lblInitialTime:XNALabel
14-
$CC10=chkEndOfGame:XNACheckBox
15-
$CC11=chkOneTimeOnly:XNACheckBox
16-
$CC12=chkSkipScore:XNACheckBox
17-
$CC13=chkSkipMapSelect:XNACheckBox
18-
$CC14=chkIgnoreGlobalAITriggers:XNACheckBox
14+
$CC10=tbHomeCell:EditorNumberTextBox
15+
$CC11=lblHomeCell:XNALabel
16+
$CC12=selTheme:EditorPopUpSelector
17+
$CC13=lblTheme:XNALabel
18+
$CC14=chkEndOfGame:XNACheckBox
19+
$CC15=chkOneTimeOnly:XNACheckBox
20+
$CC16=chkSkipScore:XNACheckBox
21+
$CC17=chkSkipMapSelect:XNACheckBox
1922
; Second column
20-
$CC15=chkOfficial:XNACheckBox
21-
$CC16=chkTruckCrate:XNACheckBox
22-
$CC17=chkTrainCrate:XNACheckBox
23-
$CC18=chkMultiplayerOnly:XNACheckBox
24-
$CC19=chkGrowingTiberium:XNACheckBox
25-
$CC20=chkGrowingVeins:XNACheckBox
26-
$CC21=chkGrowingIce:XNACheckBox
27-
$CC22=chkTiberiumDeathToVisceroid:XNACheckBox
28-
$CC23=chkFreeRadar:XNACheckBox
29-
$CC24=chkRequiredAddOn:XNACheckBox
30-
$CC25=btnApply:EditorButton
23+
$CC18=chkIgnoreGlobalAITriggers:XNACheckBox
24+
$CC19=chkOfficial:XNACheckBox
25+
$CC20=chkTruckCrate:XNACheckBox
26+
$CC21=chkTrainCrate:XNACheckBox
27+
$CC22=chkMultiplayerOnly:XNACheckBox
28+
$CC23=chkGrowingTiberium:XNACheckBox
29+
$CC24=chkGrowingVeins:XNACheckBox
30+
$CC25=chkGrowingIce:XNACheckBox
31+
$CC26=chkTiberiumDeathToVisceroid:XNACheckBox
32+
$CC27=chkFreeRadar:XNACheckBox
33+
$CC28=chkRequiredAddOn:XNACheckBox
34+
$CC29=btnApply:EditorButton
3135
$Height=getBottom(btnApply) + EMPTY_SPACE_BOTTOM
3236
HasCloseButton=true
3337

@@ -87,9 +91,29 @@ $X=EMPTY_SPACE_SIDES
8791
$Y=getY(tbInitialTime) + 1
8892
Text=Initial time:
8993

94+
[tbHomeCell]
95+
$X=getX(tbName)
96+
$Width=getWidth(tbName)
97+
$Y=getBottom(tbInitialTime) + VERTICAL_SPACING
98+
99+
[lblHomeCell]
100+
$X=EMPTY_SPACE_SIDES
101+
$Y=getY(tbHomeCell) + 1
102+
Text=Home Cell:
103+
104+
[selTheme]
105+
$X=getX(tbName)
106+
$Width=getWidth(tbName)
107+
$Y=getBottom(tbHomeCell) + VERTICAL_SPACING
108+
109+
[lblTheme]
110+
$X=EMPTY_SPACE_SIDES
111+
$Y=getY(selTheme) + 1
112+
Text=Theme:
113+
90114
[chkEndOfGame]
91115
$X=EMPTY_SPACE_SIDES
92-
$Y=getBottom(tbInitialTime) + VERTICAL_SPACING
116+
$Y=getBottom(selTheme) + VERTICAL_SPACING
93117
Text=End of Game
94118

95119
[chkOneTimeOnly]
@@ -107,62 +131,62 @@ $X=EMPTY_SPACE_SIDES
107131
$Y=getBottom(chkSkipScore) + VERTICAL_SPACING
108132
Text=Skip Map Select
109133

110-
[chkIgnoreGlobalAITriggers]
111-
$X=EMPTY_SPACE_SIDES
112-
$Y=getBottom(chkSkipMapSelect) + VERTICAL_SPACING
113-
Text=Ignore Global AI Triggers
114-
115134
; *************
116135
; Second column
117136
; *************
118137

119-
[chkOfficial]
138+
[chkIgnoreGlobalAITriggers]
120139
$X=EMPTY_SPACE_SIDES + 300 + EMPTY_SPACE_SIDES
121140
$Y=getBottom(lblHeader) + EMPTY_SPACE_TOP
141+
Text=Ignore Global AI Triggers
142+
143+
[chkOfficial]
144+
$X=getX(chkIgnoreGlobalAITriggers)
145+
$Y=getBottom(chkIgnoreGlobalAITriggers) + VERTICAL_SPACING
122146
Text=Official
123147

124148
[chkTruckCrate]
125-
$X=getX(chkOfficial)
149+
$X=getX(chkIgnoreGlobalAITriggers)
126150
$Y=getBottom(chkOfficial) + VERTICAL_SPACING
127151
Text=Crate From Destroyed Trucks
128152

129153
[chkTrainCrate]
130-
$X=getX(chkOfficial)
154+
$X=getX(chkIgnoreGlobalAITriggers)
131155
$Y=getBottom(chkTruckCrate) + VERTICAL_SPACING
132156
Text=Crate From Destroyed Trains
133157

134158
[chkMultiplayerOnly]
135-
$X=getX(chkOfficial)
159+
$X=getX(chkIgnoreGlobalAITriggers)
136160
$Y=getBottom(chkTrainCrate) + VERTICAL_SPACING
137161
Text=Multiplayer Only
138162

139163
[chkGrowingTiberium]
140-
$X=getX(chkOfficial)
164+
$X=getX(chkIgnoreGlobalAITriggers)
141165
$Y=getBottom(chkMultiplayerOnly) + VERTICAL_SPACING
142166
Text=Growing Tiberium
143167

144168
[chkGrowingVeins]
145-
$X=getX(chkOfficial)
169+
$X=getX(chkIgnoreGlobalAITriggers)
146170
$Y=getBottom(chkGrowingTiberium) + VERTICAL_SPACING
147171
Text=Growing Veins
148172

149173
[chkGrowingIce]
150-
$X=getX(chkOfficial)
174+
$X=getX(chkIgnoreGlobalAITriggers)
151175
$Y=getBottom(chkGrowingVeins) + VERTICAL_SPACING
152176
Text=Growing Ice
153177

154178
[chkTiberiumDeathToVisceroid]
155-
$X=getX(chkOfficial)
179+
$X=getX(chkIgnoreGlobalAITriggers)
156180
$Y=getBottom(chkGrowingIce) + VERTICAL_SPACING
157181
Text=Visceroid From Death In Tiberium
158182

159183
[chkFreeRadar]
160-
$X=getX(chkOfficial)
184+
$X=getX(chkIgnoreGlobalAITriggers)
161185
$Y=getBottom(chkTiberiumDeathToVisceroid) + VERTICAL_SPACING
162186
Text=Free Radar
163187

164188
[chkRequiredAddOn]
165-
$X=getX(chkOfficial)
189+
$X=getX(chkIgnoreGlobalAITriggers)
166190
$Y=getBottom(chkFreeRadar) + VERTICAL_SPACING
167191
Text=Enhanced Mode
168192
$Enabled=1 - IS_RA2YR
@@ -172,6 +196,6 @@ $Enabled=1 - IS_RA2YR
172196
[btnApply]
173197
$Width=100
174198
$X=(getWidth(BasicSectionConfigWindow) - getWidth(btnApply)) / 2
175-
$Y=getBottom(chkIgnoreGlobalAITriggers) + EMPTY_SPACE_TOP
199+
$Y=getBottom(chkSkipMapSelect) + EMPTY_SPACE_TOP
176200
Text=Apply
177201

src/TSMapEditor/Config/UI/Windows/PlaceWaypointWindow.ini

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[PlaceWaypointWindow]
2+
$Width=215
23
$CC0=lblDescription:XNALabel
3-
$Width=getRight(lblDescription) + EMPTY_SPACE_SIDES + 30
44
$CC1=tbWaypointNumber:EditorNumberTextBox
55
$CC2=lblWaypointColor:XNALabel
66
$CC3=ddWaypointColor:XNADropDown
@@ -11,7 +11,7 @@ HasCloseButton=yes
1111
[lblDescription]
1212
$X=EMPTY_SPACE_SIDES
1313
$Y=EMPTY_SPACE_TOP
14-
Text=Input waypoint number (0-99):
14+
Text=Input waypoint number:
1515

1616
[tbWaypointNumber]
1717
$X=EMPTY_SPACE_SIDES

src/TSMapEditor/Models/BasicSection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class BasicSection : INIDefineable
1313
public string GameModes { get; set; }
1414
public int HomeCell { get; set; } = 98;
1515
public int AltHomeCell { get; set; } = 99;
16+
public string Theme { get; set; }
1617
public int InitTime { get; set; }
1718
public bool Official { get; set; }
1819
public bool EndOfGame { get; set; }

src/TSMapEditor/Models/Themes.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ public Theme Get(string name)
5757
return List.Find(theme => theme.Name == name);
5858
}
5959

60+
public Theme GetByININame(string iniName)
61+
{
62+
return List.Find(theme => theme.ININame == iniName);
63+
}
64+
6065
private void Initialize(IniFileEx themeIni)
6166
{
6267
var themes = new List<Theme>();

src/TSMapEditor/UI/Windows/BasicSectionConfigWindow.cs

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using Rampastring.XNAUI;
22
using Rampastring.XNAUI.XNAControls;
3+
using System;
4+
using System.Globalization;
35
using TSMapEditor.Models;
46
using TSMapEditor.UI.Controls;
57

@@ -22,6 +24,8 @@ public BasicSectionConfigWindow(WindowManager windowManager, Map map) : base(win
2224
private EditorNumberTextBox tbCarryOverCap;
2325
private EditorNumberTextBox tbPercent;
2426
private EditorNumberTextBox tbInitialTime;
27+
private EditorNumberTextBox tbHomeCell;
28+
private EditorPopUpSelector selTheme;
2529
private XNACheckBox chkEndOfGame;
2630
private XNACheckBox chkOneTimeOnly;
2731
private XNACheckBox chkSkipScore;
@@ -36,8 +40,9 @@ public BasicSectionConfigWindow(WindowManager windowManager, Map map) : base(win
3640
private XNACheckBox chkGrowingIce;
3741
private XNACheckBox chkTiberiumDeathToVisceroid;
3842
private XNACheckBox chkFreeRadar;
39-
private XNACheckBox chkRequiredAddOn;
43+
private XNACheckBox chkRequiredAddOn;
4044

45+
private SelectThemeWindow selectThemeWindow;
4146

4247
public override void Initialize()
4348
{
@@ -49,6 +54,11 @@ public override void Initialize()
4954
tbCarryOverCap = FindChild<EditorNumberTextBox>(nameof(tbCarryOverCap));
5055
tbPercent = FindChild<EditorNumberTextBox>(nameof(tbPercent));
5156
tbInitialTime = FindChild<EditorNumberTextBox>(nameof(tbInitialTime));
57+
58+
tbHomeCell = FindChild<EditorNumberTextBox>(nameof(tbHomeCell));
59+
tbHomeCell.MaximumTextLength = (Constants.MaxWaypoint - 1).ToString(CultureInfo.InvariantCulture).Length;
60+
61+
selTheme = FindChild<EditorPopUpSelector>(nameof(selTheme));
5262
chkEndOfGame = FindChild<XNACheckBox>(nameof(chkEndOfGame));
5363
chkOneTimeOnly = FindChild<XNACheckBox>(nameof(chkOneTimeOnly));
5464
chkSkipScore = FindChild<XNACheckBox>(nameof(chkSkipScore));
@@ -63,7 +73,13 @@ public override void Initialize()
6373
chkGrowingIce = FindChild<XNACheckBox>(nameof(chkGrowingIce));
6474
chkTiberiumDeathToVisceroid = FindChild<XNACheckBox>(nameof(chkTiberiumDeathToVisceroid));
6575
chkFreeRadar = FindChild<XNACheckBox>(nameof(chkFreeRadar));
66-
chkRequiredAddOn = FindChild<XNACheckBox>(nameof(chkRequiredAddOn));
76+
chkRequiredAddOn = FindChild<XNACheckBox>(nameof(chkRequiredAddOn));
77+
78+
selectThemeWindow = new SelectThemeWindow(WindowManager, map, true);
79+
var themeDarkeningPanel = DarkeningPanel.InitializeAndAddToParentControlWithChild(WindowManager, Parent, selectThemeWindow);
80+
themeDarkeningPanel.Hidden += ThemeDarkeningPanel_Hidden;
81+
82+
selTheme.LeftClick += SelTheme_LeftClick;
6783

6884
FindChild<EditorButton>("btnApply").LeftClick += BtnApply_LeftClick;
6985
}
@@ -77,6 +93,11 @@ public void Open()
7793
tbCarryOverCap.Value = map.Basic.CarryOverCap;
7894
tbPercent.Value = map.Basic.Percent;
7995
tbInitialTime.Value = map.Basic.InitTime;
96+
tbHomeCell.Value = map.Basic.HomeCell;
97+
98+
selTheme.Tag = map.Rules.Themes.GetByININame(map.Basic.Theme);
99+
selTheme.Text = selTheme.Tag != null ? selTheme.Tag.ToString() : Constants.NoneValue2;
100+
80101
chkEndOfGame.Checked = map.Basic.EndOfGame;
81102
chkOneTimeOnly.Checked = map.Basic.OneTimeOnly;
82103
chkSkipScore.Checked = map.Basic.SkipScore;
@@ -103,6 +124,8 @@ private void BtnApply_LeftClick(object sender, System.EventArgs e)
103124
map.Basic.CarryOverCap = tbCarryOverCap.Value;
104125
map.Basic.Percent = tbPercent.Value;
105126
map.Basic.InitTime = tbInitialTime.Value;
127+
map.Basic.HomeCell = tbHomeCell.Value;
128+
map.Basic.Theme = selTheme.Tag != null ? ((Theme)selTheme.Tag).ININame : null;
106129
map.Basic.EndOfGame = chkEndOfGame.Checked;
107130
map.Basic.OneTimeOnly = chkOneTimeOnly.Checked;
108131
map.Basic.SkipScore = chkSkipScore.Checked;
@@ -122,5 +145,17 @@ private void BtnApply_LeftClick(object sender, System.EventArgs e)
122145
map.Basic.RequiredAddOn = chkRequiredAddOn.Checked ? 1 : 0;
123146
}
124147
}
148+
149+
private void ThemeDarkeningPanel_Hidden(object sender, EventArgs e)
150+
{
151+
selTheme.Tag = selectThemeWindow.SelectedObject;
152+
selTheme.Text = selTheme.Tag != null ? selectThemeWindow.SelectedObject.ToString() : Constants.NoneValue2;
153+
}
154+
155+
private void SelTheme_LeftClick(object sender, EventArgs e)
156+
{
157+
Theme theme = (Theme)selTheme.Tag;
158+
selectThemeWindow.Open(theme);
159+
}
125160
}
126161
}

src/TSMapEditor/UI/Windows/PlaceWaypointWindow.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public PlaceWaypointWindow(WindowManager windowManager, Map map, MutationManager
2424
private readonly IMutationTarget mutationTarget;
2525

2626
private EditorNumberTextBox tbWaypointNumber;
27+
private XNALabel lblDescription;
2728
private XNADropDown ddWaypointColor;
2829

2930
private Point2D cellCoords;
@@ -36,6 +37,9 @@ public override void Initialize()
3637
tbWaypointNumber = FindChild<EditorNumberTextBox>(nameof(tbWaypointNumber));
3738
tbWaypointNumber.MaximumTextLength = (Constants.MaxWaypoint - 1).ToString(CultureInfo.InvariantCulture).Length;
3839

40+
lblDescription = FindChild<XNALabel>(nameof(lblDescription));
41+
lblDescription.Text = $"Input waypoint number (0-{Constants.MaxWaypoint - 1}):";
42+
3943
FindChild<EditorButton>("btnPlace").LeftClick += BtnPlace_LeftClick;
4044

4145
// Init color dropdown options

src/TSMapEditor/UI/Windows/SelectThemeWindow.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ namespace TSMapEditor.UI.Windows
77
{
88
public class SelectThemeWindow : SelectObjectWindow<Theme>
99
{
10-
public SelectThemeWindow(WindowManager windowManager, Map map) : base(windowManager)
10+
public SelectThemeWindow(WindowManager windowManager, Map map, bool includeNone) : base(windowManager)
1111
{
1212
this.map = map;
13+
this.includeNone = includeNone;
1314
}
1415

1516
private readonly Map map;
17+
private readonly bool includeNone;
1618

1719
public override void Initialize()
1820
{
@@ -35,6 +37,11 @@ protected override void ListObjects()
3537
{
3638
lbObjectList.Clear();
3739

40+
if (includeNone)
41+
{
42+
lbObjectList.AddItem(new XNAListBoxItem() { Text = "None" });
43+
}
44+
3845
foreach (var theme in map.Rules.Themes.List)
3946
{
4047
lbObjectList.AddItem(new XNAListBoxItem() { Text = theme.ToString(), Tag = theme });

src/TSMapEditor/UI/Windows/TriggersWindow.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ public override void Initialize()
277277
var tutorialDarkeningPanel = DarkeningPanel.InitializeAndAddToParentControlWithChild(WindowManager, Parent, selectTutorialLineWindow);
278278
tutorialDarkeningPanel.Hidden += TutorialDarkeningPanel_Hidden;
279279

280-
selectThemeWindow = new SelectThemeWindow(WindowManager, map);
280+
selectThemeWindow = new SelectThemeWindow(WindowManager, map, false);
281281
var themeDarkeningPanel = DarkeningPanel.InitializeAndAddToParentControlWithChild(WindowManager, Parent, selectThemeWindow);
282282
themeDarkeningPanel.Hidden += ThemeDarkeningPanel_Hidden;
283283

0 commit comments

Comments
 (0)