Skip to content

Commit 2f5d467

Browse files
committed
Add superweapon selector window and support for superweapon ID parameter type
1 parent 646a65a commit 2f5d467

5 files changed

Lines changed: 133 additions & 8 deletions

File tree

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
[SelectSuperWeaponTypeWindow]
2+
$Width=400
3+
$Height=RESOLUTION_HEIGHT - 100
4+
$CC0=lblDescription:XNALabel
5+
$CC1=tbSearch:EditorSuggestionTextBox
6+
$CC2=btnSelect:EditorButton
7+
$CC3=lbObjectList:EditorListBox
8+
HasCloseButton=true
9+
10+
11+
[lblDescription]
12+
$X=EMPTY_SPACE_SIDES
13+
$Y=EMPTY_SPACE_TOP
14+
FontIndex=1
15+
Text=Select SuperWeapon:
16+
17+
[tbSearch]
18+
$X=EMPTY_SPACE_SIDES
19+
$Y=getBottom(lblDescription) + EMPTY_SPACE_TOP
20+
$Width=getWidth(SelectSuperWeaponTypeWindow) - (EMPTY_SPACE_SIDES * 2)
21+
Suggestion=Search SuperWeapon...
22+
23+
[btnSelect]
24+
$Width=100
25+
$X=(getWidth(SelectSuperWeaponTypeWindow) - getWidth(btnSelect)) / 2
26+
$Y=getHeight(SelectSuperWeaponTypeWindow) - EMPTY_SPACE_BOTTOM - getHeight(btnSelect)
27+
Text=Select
28+
29+
[lbObjectList]
30+
$X=EMPTY_SPACE_SIDES
31+
$Y=getBottom(tbSearch) + VERTICAL_SPACING
32+
$Width=getWidth(tbSearch)
33+
$Height=getY(btnSelect) - getY(lbObjectList) - EMPTY_SPACE_TOP
34+

src/TSMapEditor/Models/Enums/TriggerParamType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public enum TriggerParamType
2525
Theme,
2626
Speech,
2727
SuperWeapon,
28+
SuperWeaponName,
2829
Animation,
2930
ParticleSystem,
3031
Waypoint,

src/TSMapEditor/TSMapEditor.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,9 @@
231231
<None Update="Config\Default\UI\Windows\SelectLocalVariableWindow.ini">
232232
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
233233
</None>
234+
<None Update="Config\UI\Windows\SelectSuperWeaponTypeWindow.ini">
235+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
236+
</None>
234237
<None Update="Config\Default\UI\Windows\SelectScriptActionWindow.ini">
235238
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
236239
</None>
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using Rampastring.XNAUI;
2+
using Rampastring.XNAUI.XNAControls;
3+
using System;
4+
using TSMapEditor.Models;
5+
6+
namespace TSMapEditor.UI.Windows
7+
{
8+
public class SelectSuperWeaponTypeWindow : SelectObjectWindow<SuperWeaponType>
9+
{
10+
public SelectSuperWeaponTypeWindow(WindowManager windowManager, Map map) : base(windowManager)
11+
{
12+
this.map = map;
13+
}
14+
15+
private readonly Map map;
16+
public bool UseININameAsValue { get; set; }
17+
18+
public override void Initialize()
19+
{
20+
Name = nameof(SelectSuperWeaponTypeWindow);
21+
base.Initialize();
22+
}
23+
24+
protected override void LbObjectList_SelectedIndexChanged(object sender, EventArgs e)
25+
{
26+
if (lbObjectList.SelectedItem == null)
27+
{
28+
SelectedObject = null;
29+
return;
30+
}
31+
32+
SelectedObject = (SuperWeaponType)lbObjectList.SelectedItem.Tag;
33+
}
34+
35+
protected override void ListObjects()
36+
{
37+
lbObjectList.Clear();
38+
39+
foreach (var swType in map.Rules.SuperWeaponTypes)
40+
{
41+
lbObjectList.AddItem(new XNAListBoxItem() { Text = swType.GetDisplayString(), Tag = swType });
42+
if (swType == SelectedObject)
43+
lbObjectList.SelectedIndex = lbObjectList.Items.Count - 1;
44+
}
45+
}
46+
}
47+
}

src/TSMapEditor/UI/Windows/TriggersWindow.cs

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ public TriggersWindow(WindowManager windowManager, Map map, EditorState editorSt
102102
private SelectStringWindow selectStringWindow;
103103
private SelectSpeechWindow selectSpeechWindow;
104104
private SelectSoundWindow selectSoundWindow;
105+
private SelectSuperWeaponTypeWindow selectSuperWeaponTypeWindow;
105106
private SelectParticleSystemTypeWindow selectParticleSystemTypeWindow;
106107
private CreateRandomTriggerSetWindow createRandomTriggerSetWindow;
107108

@@ -307,6 +308,10 @@ public override void Initialize()
307308
var particleSystemTypeDarkeningPanel = DarkeningPanel.InitializeAndAddToParentControlWithChild(WindowManager, Parent, selectParticleSystemTypeWindow);
308309
particleSystemTypeDarkeningPanel.Hidden += ParticleSystemTypeDarkeningPanel_Hidden;
309310

311+
selectSuperWeaponTypeWindow = new SelectSuperWeaponTypeWindow(WindowManager, map);
312+
var swDarkeningPanel = DarkeningPanel.InitializeAndAddToParentControlWithChild(WindowManager, Parent, selectSuperWeaponTypeWindow);
313+
swDarkeningPanel.Hidden += SuperWeaponDarkeningPanel_Hidden;
314+
310315
createRandomTriggerSetWindow = new CreateRandomTriggerSetWindow(WindowManager, map);
311316
var createRandomTriggersSetDarkeningPanel = DarkeningPanel.InitializeAndAddToParentControlWithChild(WindowManager, Parent, createRandomTriggerSetWindow);
312317
createRandomTriggerSetWindow.RandomTriggerSetTriggersCreated += CreateRandomTriggerSetWindow_RandomTriggersSetCreated;
@@ -937,10 +942,17 @@ private void BtnEventParameterValuePreset_LeftClick(object sender, EventArgs e)
937942
ctxEventParameterPresetValues.Open(GetCursorPoint());
938943
break;
939944
case TriggerParamType.SuperWeapon:
940-
ctxEventParameterPresetValues.ClearItems();
941-
ctxEventParameterPresetValues.Width = 250;
942-
map.Rules.SuperWeaponTypes.ForEach(sw => ctxEventParameterPresetValues.AddItem(sw.GetDisplayString()));
943-
ctxEventParameterPresetValues.Open(GetCursorPoint());
945+
int swTypeIndex = Conversions.IntFromString(triggerEvent.Parameters[paramIndex], -1);
946+
selectSuperWeaponTypeWindow.IsForEvent = true;
947+
selectSuperWeaponTypeWindow.UseININameAsValue = false;
948+
if (swTypeIndex > -1 && swTypeIndex < map.Rules.SuperWeaponTypes.Count)
949+
selectSuperWeaponTypeWindow.Open(map.Rules.SuperWeaponTypes[swTypeIndex]);
950+
break;
951+
case TriggerParamType.SuperWeaponName:
952+
string swTypeID = triggerEvent.Parameters[paramIndex];
953+
selectSuperWeaponTypeWindow.IsForEvent = true;
954+
selectSuperWeaponTypeWindow.UseININameAsValue = true;
955+
selectSuperWeaponTypeWindow.Open(map.Rules.SuperWeaponTypes.Find(swType => swType.ININame.Equals(swTypeID, StringComparison.Ordinal)));
944956
break;
945957
case TriggerParamType.TeamType:
946958
TeamType existingTeamType = map.TeamTypes.Find(tt => tt.ININame == triggerEvent.Parameters[paramIndex]);
@@ -1058,10 +1070,18 @@ private void BtnActionParameterValuePreset_LeftClick(object sender, EventArgs e)
10581070
selectStringWindow.Open(existingString);
10591071
break;
10601072
case TriggerParamType.SuperWeapon:
1061-
ctxActionParameterPresetValues.ClearItems();
1062-
ctxActionParameterPresetValues.Width = 250;
1063-
map.Rules.SuperWeaponTypes.ForEach(sw => ctxActionParameterPresetValues.AddItem(sw.GetDisplayString()));
1064-
ctxActionParameterPresetValues.Open(GetCursorPoint());
1073+
int swTypeIndex = Conversions.IntFromString(triggerAction.Parameters[paramIndex], -1);
1074+
selectSuperWeaponTypeWindow.IsForEvent = false;
1075+
selectSuperWeaponTypeWindow.UseININameAsValue = false;
1076+
if (swTypeIndex > -1 && swTypeIndex < map.Rules.SuperWeaponTypes.Count)
1077+
selectSuperWeaponTypeWindow.Open(map.Rules.SuperWeaponTypes[swTypeIndex]);
1078+
break;
1079+
case TriggerParamType.SuperWeaponName:
1080+
string swTypeID = triggerAction.Parameters[paramIndex];
1081+
selectSuperWeaponTypeWindow.IsForEvent = false;
1082+
selectSuperWeaponTypeWindow.UseININameAsValue = true;
1083+
if (!string.IsNullOrEmpty(swTypeID))
1084+
selectSuperWeaponTypeWindow.Open(map.Rules.SuperWeaponTypes.Find(swType => swType.ININame.Equals(swTypeID, StringComparison.Ordinal)));
10651085
break;
10661086
case TriggerParamType.ParticleSystem:
10671087
ParticleSystemType existingParticleSystemType = map.Rules.ParticleSystemTypes.Find(pst => pst.Index == Conversions.IntFromString(triggerAction.Parameters[paramIndex], -1));
@@ -1272,6 +1292,19 @@ private void ParticleSystemTypeDarkeningPanel_Hidden(object sender, EventArgs e)
12721292
AssignParamValue(selectParticleSystemTypeWindow.IsForEvent, selectParticleSystemTypeWindow.SelectedObject.Index);
12731293
}
12741294

1295+
private void SuperWeaponDarkeningPanel_Hidden(object sender, EventArgs e)
1296+
{
1297+
if (selectSuperWeaponTypeWindow.SelectedObject == null)
1298+
return;
1299+
1300+
var swType = selectSuperWeaponTypeWindow.SelectedObject;
1301+
1302+
if (selectSuperWeaponTypeWindow.UseININameAsValue)
1303+
AssignParamValue(selectSuperWeaponTypeWindow.IsForEvent, swType.ININame);
1304+
else
1305+
AssignParamValue(selectSuperWeaponTypeWindow.IsForEvent, swType.Index);
1306+
}
1307+
12751308
private void AssignParamValue(bool isForEvent, int paramValue)
12761309
{
12771310
if (isForEvent)
@@ -2252,6 +2285,13 @@ private string GetParamValueText(string paramValue, TriggerParamType paramType,
22522285
return intValue + " - nonexistent super weapon";
22532286

22542287
return intValue + " " + map.Rules.SuperWeaponTypes[intValue].GetDisplayStringWithoutIndex();
2288+
case TriggerParamType.SuperWeaponName:
2289+
var swType = map.Rules.SuperWeaponTypes.Find(sw => sw.ININame.Equals(paramValue, StringComparison.Ordinal));
2290+
2291+
if (swType == null)
2292+
return paramValue;
2293+
2294+
return swType.GetDisplayStringWithoutIndex();
22552295
case TriggerParamType.ParticleSystem:
22562296
if (!intParseSuccess)
22572297
return paramValue;

0 commit comments

Comments
 (0)