Skip to content

Commit 5ce8651

Browse files
committed
Implement smart trigger event and action parameter default value selection
1 parent e964ddf commit 5ce8651

File tree

5 files changed

+156
-30
lines changed

5 files changed

+156
-30
lines changed

src/TSMapEditor/Config/Default/UI/Windows/SettingsPanel.ini

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ $CC11=chkBorderless:XNACheckBox
1616
$CC12=chkUseBoldFont:XNACheckBox
1717
$CC13=chkGraphicsLevel:XNACheckBox
1818
$CC14=chkSmartScriptActionCloning:XNACheckBox
19-
$CC15=chkQuickTriggerParameterSelection:XNACheckBox
20-
$CC16=lblTextEditorPath:XNALabel
21-
$CC17=tbTextEditorPath:EditorTextBox
19+
$CC15=chkSmartScriptDefaultValues:XNACheckBox
20+
$CC16=chkQuickTriggerParameterSelection:XNACheckBox
21+
$CC17=lblTextEditorPath:XNALabel
22+
$CC18=tbTextEditorPath:EditorTextBox
2223
; $Height=getBottom(tbTextEditorPath) + EMPTY_SPACE_BOTTOM
2324

2425
[lblHeader]
@@ -97,9 +98,14 @@ $X=EMPTY_SPACE_SIDES
9798
$Y=getBottom(chkGraphicsLevel) + VERTICAL_SPACING
9899
$Text=translate(Smart Script Action Cloning)
99100

100-
[chkQuickTriggerParameterSelection]
101+
[chkSmartScriptDefaultValues]
101102
$X=EMPTY_SPACE_SIDES
102103
$Y=getBottom(chkSmartScriptActionCloning) + VERTICAL_SPACING
104+
$Text=translate(Smart Script Default Values)
105+
106+
[chkQuickTriggerParameterSelection]
107+
$X=EMPTY_SPACE_SIDES
108+
$Y=getBottom(chkSmartScriptDefaultValues) + VERTICAL_SPACING
103109
$Text=translate(Quick Trigger Parameter Selection)
104110

105111
[lblTextEditorPath]

src/TSMapEditor/Config/Translations/en/Translation_en.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ SettingsPanel.chkBorderless.Text=Start In Borderless Mode
4848
SettingsPanel.chkUseBoldFont.Text=Use Bold Font
4949
SettingsPanel.chkGraphicsLevel.Text=Enhanced Graphical Quality
5050
SettingsPanel.chkSmartScriptActionCloning.Text=Smart Script Action Cloning
51+
SettingsPanel.chkSmartScriptDefaultValues.Text=Smart Script Default Values
52+
SettingsPanel.chkQuickTriggerParameterSelection.Text=Quick Trigger Parameter Selection
5153
SettingsPanel.lblTextEditorPath.Text=Text Editor Path:
5254
SettingsPanel.ScrollRateFastest=Fastest
5355
SettingsPanel.ScrollRateFaster=Faster

src/TSMapEditor/Models/TriggerCondition.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public TriggerCondition()
2626

2727
public TriggerCondition(TriggerEventType triggerEventType)
2828
{
29+
ConditionIndex = triggerEventType.ID;
30+
2931
for (int i = 0; i < Parameters.Length; i++)
3032
{
3133
if (i < DEF_PARAM_COUNT)

src/TSMapEditor/UI/SettingsPanel.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public SettingsPanel(WindowManager windowManager) : base(windowManager)
8585
private XNACheckBox chkUseBoldFont;
8686
private XNACheckBox chkGraphicsLevel;
8787
private XNACheckBox chkSmartScriptActionCloning;
88+
private XNACheckBox chkSmartScriptDefaultValues;
8889
private XNACheckBox chkQuickTriggerParameterSelection;
8990
private EditorTextBox tbTextEditorPath;
9091

@@ -153,6 +154,8 @@ public override void Initialize()
153154

154155
chkSmartScriptActionCloning = FindChild<XNACheckBox>(nameof(chkSmartScriptActionCloning));
155156

157+
chkSmartScriptDefaultValues = FindChild<XNACheckBox>(nameof(chkSmartScriptDefaultValues));
158+
156159
chkQuickTriggerParameterSelection = FindChild<XNACheckBox>(nameof(chkQuickTriggerParameterSelection));
157160

158161
tbTextEditorPath = FindChild<EditorTextBox>(nameof(tbTextEditorPath));
@@ -190,6 +193,7 @@ private void LoadSettings()
190193
chkUseBoldFont.Checked = userSettings.UseBoldFont;
191194
chkGraphicsLevel.Checked = userSettings.GraphicsLevel > 0;
192195
chkSmartScriptActionCloning.Checked = userSettings.SmartScriptActionCloning;
196+
chkSmartScriptDefaultValues.Checked = userSettings.SmartScriptActionDefaultValues;
193197
chkQuickTriggerParameterSelection.Checked = userSettings.QuickTriggerParameterSelection;
194198

195199
tbTextEditorPath.Text = userSettings.TextEditorPath;
@@ -203,6 +207,7 @@ public void ApplySettings()
203207
userSettings.UseBoldFont.UserDefinedValue = chkUseBoldFont.Checked;
204208
userSettings.GraphicsLevel.UserDefinedValue = chkGraphicsLevel.Checked ? 1 : 0;
205209
userSettings.SmartScriptActionCloning.UserDefinedValue = chkSmartScriptActionCloning.Checked;
210+
userSettings.SmartScriptActionDefaultValues.UserDefinedValue = chkSmartScriptDefaultValues.Checked;
206211
userSettings.QuickTriggerParameterSelection.UserDefinedValue = chkQuickTriggerParameterSelection.Checked;
207212

208213
userSettings.Theme.UserDefinedValue = ddTheme.SelectedItem.Text;

src/TSMapEditor/UI/Windows/TriggersWindow.cs

Lines changed: 137 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1285,18 +1285,14 @@ private void BtnEventParameterValuePreset_LeftClick(object sender, EventArgs e)
12851285
case TriggerParamType.HouseType:
12861286
selectHouseTypeWindow.IsForEvent = true;
12871287
paramValue = Conversions.IntFromString(triggerEvent.Parameters[paramIndex], -1);
1288-
if (paramValue > -1 && paramValue < map.GetHouseTypes().Count)
1289-
selectHouseTypeWindow.Open(map.GetHouseTypes()[paramValue]);
1290-
else
1291-
selectHouseTypeWindow.Open(null);
1288+
HouseType houseType = map.GetHouseTypes().Find(ht => ht.Index == paramValue);
1289+
selectHouseTypeWindow.Open(houseType);
12921290
break;
12931291
case TriggerParamType.House:
12941292
selectHouseWindow.IsForEvent = true;
12951293
paramValue = Conversions.IntFromString(triggerEvent.Parameters[paramIndex], -1);
1296-
if (paramValue > -1 && paramValue < map.GetHouses().Count)
1297-
selectHouseWindow.Open(map.GetHouses()[paramValue]);
1298-
else
1299-
selectHouseWindow.Open(null);
1294+
House house = map.GetHouses().Find(h => h.ID == paramValue);
1295+
selectHouseWindow.Open(house);
13001296
break;
13011297
case TriggerParamType.Building:
13021298
paramValue = Conversions.IntFromString(triggerEvent.Parameters[paramIndex], -1);
@@ -1845,6 +1841,41 @@ public void SelectTrigger(Trigger trigger)
18451841
lbTriggers.ScrollToSelectedElement();
18461842
}
18471843

1844+
private void SetDefaultParametersForNewTriggerEvent(TriggerCondition condition)
1845+
{
1846+
TriggerEventType triggerEventType = map.EditorConfig.TriggerEventTypes[condition.ConditionIndex];
1847+
1848+
for (int i = 0; i < lbEventParameters.Items.Count; i++)
1849+
{
1850+
int parameterIndex = (int)lbEventParameters.Items[i].Tag;
1851+
1852+
if (UserSettings.Instance.SmartScriptActionDefaultValues)
1853+
{
1854+
TriggerParamType triggerParamType = triggerEventType.Parameters[parameterIndex].TriggerParamType;
1855+
1856+
// Set default value if we can infer one from the trigger's name or from other information
1857+
switch (triggerParamType)
1858+
{
1859+
case TriggerParamType.HouseType:
1860+
HouseType houseType = map.GetHouseTypes().Find(ht => editedTrigger.Name.Contains(ht.ININame, StringComparison.OrdinalIgnoreCase));
1861+
if (houseType != null)
1862+
condition.Parameters[parameterIndex] = houseType.Index.ToString(CultureInfo.InvariantCulture);
1863+
break;
1864+
case TriggerParamType.House:
1865+
House house = map.GetHouses().Find(ht => editedTrigger.Name.Contains(ht.ININame, StringComparison.OrdinalIgnoreCase));
1866+
if (house != null)
1867+
condition.Parameters[parameterIndex] = house.ID.ToString(CultureInfo.InvariantCulture);
1868+
break;
1869+
case TriggerParamType.LocalVariable:
1870+
LocalVariable localVariable = map.LocalVariables.Find(lv => editedTrigger.Name.Contains(lv.Name, StringComparison.OrdinalIgnoreCase));
1871+
if (localVariable != null)
1872+
condition.Parameters[parameterIndex] = localVariable.Index.ToString(CultureInfo.InvariantCulture);
1873+
break;
1874+
}
1875+
}
1876+
}
1877+
}
1878+
18481879
private void EventWindowDarkeningPanel_Hidden(object sender, EventArgs e)
18491880
{
18501881
if (editedTrigger == null || selectEventWindow.SelectedObject == null)
@@ -1854,26 +1885,96 @@ private void EventWindowDarkeningPanel_Hidden(object sender, EventArgs e)
18541885

18551886
if (selectEventWindow.IsAddingNew)
18561887
{
1857-
editedTrigger.Conditions.Add(new TriggerCondition(triggerEventType));
1888+
var condition = new TriggerCondition(triggerEventType);
1889+
editedTrigger.Conditions.Add(condition);
18581890
EditTrigger(editedTrigger);
18591891
lbEvents.SelectedIndex = lbEvents.Items.Count - 1;
1892+
1893+
if (lbEventParameters.Items.Count > 0)
1894+
{
1895+
if (UserSettings.Instance.SmartScriptActionDefaultValues)
1896+
{
1897+
SetDefaultParametersForNewTriggerEvent(condition);
1898+
EditTrigger(editedTrigger);
1899+
}
1900+
1901+
lbEventParameters.SelectedIndex = 0;
1902+
1903+
if (UserSettings.Instance.QuickTriggerParameterSelection)
1904+
{
1905+
BtnEventParameterValuePreset_LeftClick(this, EventArgs.Empty);
1906+
}
1907+
}
18601908
}
18611909
else
18621910
{
18631911
if (lbEvents.SelectedItem == null)
18641912
return;
1865-
}
18661913

1867-
TriggerCondition condition = editedTrigger.Conditions[lbEvents.SelectedIndex];
1868-
condition.ConditionIndex = selectEventWindow.SelectedObject.ID;
1869-
SetTriggerEventHardcodedParameters(condition);
1914+
TriggerCondition condition = editedTrigger.Conditions[lbEvents.SelectedIndex];
1915+
condition.ConditionIndex = selectEventWindow.SelectedObject.ID;
1916+
SetTriggerEventHardcodedParameters(condition);
1917+
EditTrigger(editedTrigger);
1918+
}
1919+
}
18701920

1871-
EditTrigger(editedTrigger);
1921+
private void SetDefaultParametersForNewTriggerAction(TriggerAction action)
1922+
{
1923+
TriggerActionType triggerActionType = map.EditorConfig.TriggerActionTypes[action.ActionIndex];
18721924

1873-
if (UserSettings.Instance.QuickTriggerParameterSelection && selectEventWindow.IsAddingNew && lbEventParameters.Items.Count > 0)
1925+
for (int i = 0; i < lbActionParameters.Items.Count; i++)
18741926
{
1875-
lbEventParameters.SelectedIndex = 0;
1876-
BtnEventParameterValuePreset_LeftClick(this, EventArgs.Empty);
1927+
int parameterIndex = (int)lbActionParameters.Items[i].Tag;
1928+
1929+
TriggerParamType triggerParamType = triggerActionType.Parameters[parameterIndex].TriggerParamType;
1930+
1931+
// Set default values if we can infer ones from the trigger's name or from other information
1932+
switch (triggerParamType)
1933+
{
1934+
case TriggerParamType.HouseType:
1935+
HouseType houseType = map.GetHouseTypes().Find(ht => editedTrigger.Name.Contains(ht.ININame, StringComparison.OrdinalIgnoreCase));
1936+
if (houseType != null)
1937+
action.Parameters[parameterIndex] = houseType.Index.ToString(CultureInfo.InvariantCulture);
1938+
break;
1939+
case TriggerParamType.House:
1940+
House house = map.GetHouses().Find(ht => editedTrigger.Name.Contains(ht.ININame, StringComparison.OrdinalIgnoreCase));
1941+
if (house != null)
1942+
action.Parameters[parameterIndex] = house.ID.ToString(CultureInfo.InvariantCulture);
1943+
break;
1944+
case TriggerParamType.LocalVariable:
1945+
LocalVariable localVariable = map.LocalVariables.Find(lv => editedTrigger.Name.Contains(lv.Name, StringComparison.OrdinalIgnoreCase));
1946+
if (localVariable != null)
1947+
action.Parameters[parameterIndex] = localVariable.Index.ToString(CultureInfo.InvariantCulture);
1948+
break;
1949+
case TriggerParamType.TeamType:
1950+
TeamType teamType = map.TeamTypes.Count > 0 ? map.TeamTypes[0] : null;
1951+
if (teamType != null)
1952+
action.Parameters[parameterIndex] = teamType.ININame;
1953+
1954+
// Special case for action "Reinforcement at Waypoint" - assign the team's waypoint
1955+
if (!string.IsNullOrWhiteSpace(teamType.Waypoint) && triggerActionType.Parameters[TriggerActionType.MAX_PARAM_COUNT - 1].TriggerParamType == TriggerParamType.WaypointZZ)
1956+
{
1957+
action.Parameters[TriggerActionType.MAX_PARAM_COUNT - 1] = teamType.Waypoint;
1958+
return;
1959+
}
1960+
1961+
break;
1962+
case TriggerParamType.WaypointZZ:
1963+
if (map.Waypoints.Count > 0)
1964+
action.Parameters[parameterIndex] = Helpers.WaypointNumberToAlphabeticalString(map.Waypoints[map.Waypoints.Count - 1].Identifier);
1965+
break;
1966+
case TriggerParamType.Waypoint:
1967+
if (map.Waypoints.Count > 0)
1968+
action.Parameters[parameterIndex] = map.Waypoints[map.Waypoints.Count - 1].Identifier.ToString(CultureInfo.InvariantCulture);
1969+
break;
1970+
case TriggerParamType.Text:
1971+
if (selectTutorialLineWindow.SelectedObject.ID > -1 &&
1972+
!string.IsNullOrEmpty(map.Rules.TutorialLines.GetStringByIdOrEmptyString(selectTutorialLineWindow.SelectedObject.ID + 1)))
1973+
{
1974+
action.Parameters[parameterIndex] = (selectTutorialLineWindow.SelectedObject.ID + 1).ToString(CultureInfo.InvariantCulture);
1975+
}
1976+
break;
1977+
}
18771978
}
18781979
}
18791980

@@ -1889,9 +1990,26 @@ private void ActionWindowDarkeningPanel_Hidden(object sender, EventArgs e)
18891990
if (triggerActionType == null)
18901991
return;
18911992

1892-
editedTrigger.Actions.Add(CreateTriggerAction(triggerActionType));
1993+
TriggerAction action = CreateTriggerAction(triggerActionType);
1994+
editedTrigger.Actions.Add(action);
18931995
EditTrigger(editedTrigger);
18941996
lbActions.SelectedIndex = lbActions.Items.Count - 1;
1997+
1998+
if (lbActionParameters.Items.Count > 0)
1999+
{
2000+
if (UserSettings.Instance.SmartScriptActionDefaultValues)
2001+
{
2002+
SetDefaultParametersForNewTriggerAction(action);
2003+
EditTrigger(editedTrigger);
2004+
}
2005+
2006+
lbActionParameters.SelectedIndex = 0;
2007+
2008+
if (UserSettings.Instance.QuickTriggerParameterSelection)
2009+
{
2010+
BtnActionParameterValuePreset_LeftClick(this, EventArgs.Empty);
2011+
}
2012+
}
18952013
}
18962014
else
18972015
{
@@ -1901,14 +2019,7 @@ private void ActionWindowDarkeningPanel_Hidden(object sender, EventArgs e)
19012019
TriggerAction existingAction = editedTrigger.Actions[lbActions.SelectedIndex];
19022020
existingAction.ActionIndex = selectActionWindow.SelectedObject.ID;
19032021
SetTriggerActionHardcodedParameters(existingAction);
1904-
}
1905-
1906-
EditTrigger(editedTrigger);
1907-
1908-
if (UserSettings.Instance.QuickTriggerParameterSelection && selectActionWindow.IsAddingNew && lbActionParameters.Items.Count > 0)
1909-
{
1910-
lbActionParameters.SelectedIndex = 0;
1911-
BtnActionParameterValuePreset_LeftClick(this, EventArgs.Empty);
2022+
EditTrigger(editedTrigger);
19122023
}
19132024
}
19142025

0 commit comments

Comments
 (0)