Skip to content

Commit d4d2365

Browse files
committed
Add support for modifying suitable trigger event and action parameter values with the mouse scroll wheel
1 parent 1310a3e commit d4d2365

File tree

2 files changed

+184
-2
lines changed

2 files changed

+184
-2
lines changed

src/TSMapEditor/Constants.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace TSMapEditor
44
{
55
public static class Constants
66
{
7-
public const string ReleaseVersion = "1.7.5";
7+
public const string ReleaseVersion = "1.7.6";
88

99
public static int CellSizeX = 48;
1010
public static int CellSizeY = 24;

src/TSMapEditor/UI/Windows/TriggersWindow.cs

Lines changed: 183 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ public override void Initialize()
167167
panelEventDescription = FindChild<EditorDescriptionPanel>(nameof(panelEventDescription));
168168
lbEventParameters = FindChild<EditorListBox>(nameof(lbEventParameters));
169169
tbEventParameterValue = FindChild<EditorTextBox>(nameof(tbEventParameterValue));
170-
btnActionGoToTarget = FindChild<EditorButton>(nameof(btnActionGoToTarget));
170+
tbEventParameterValue.MouseScrolled += TbEventParameterValue_MouseScrolled;
171171

172172
ctxEventParameterPresetValues = new XNAContextMenu(WindowManager);
173173
ctxEventParameterPresetValues.Name = nameof(ctxEventParameterPresetValues);
@@ -180,6 +180,8 @@ public override void Initialize()
180180
panelActionDescription = FindChild<EditorDescriptionPanel>(nameof(panelActionDescription));
181181
lbActionParameters = FindChild<EditorListBox>(nameof(lbActionParameters));
182182
tbActionParameterValue = FindChild<EditorTextBox>(nameof(tbActionParameterValue));
183+
tbActionParameterValue.MouseScrolled += TbActionParameterValue_MouseScrolled;
184+
btnActionGoToTarget = FindChild<EditorButton>(nameof(btnActionGoToTarget));
183185

184186
ctxActionParameterPresetValues = new XNAContextMenu(WindowManager);
185187
ctxActionParameterPresetValues.Name = nameof(ctxActionParameterPresetValues);
@@ -371,6 +373,186 @@ public override void Initialize()
371373
WindowManager.WindowSizeChangedByUser += WindowManager_WindowSizeChangedByUser;
372374
}
373375

376+
#region Support for handling scroll wheel input on event and action parameter text boxes
377+
private void HandleScrollWheelOnTextBoxAndList<T>(List<T> list, Func<T, string> idGetter, string currentParameterValue, EditorTextBox textBox)
378+
{
379+
int existingIndex = list.FindIndex(item => idGetter(item) == currentParameterValue);
380+
if (existingIndex > -1)
381+
{
382+
if (Cursor.ScrollWheelValue < 0 && existingIndex < list.Count - 1)
383+
{
384+
textBox.Text = idGetter(list[existingIndex + 1]);
385+
EditTrigger(editedTrigger);
386+
}
387+
else if (Cursor.ScrollWheelValue > 0 && existingIndex > 0)
388+
{
389+
textBox.Text = idGetter(list[existingIndex - 1]);
390+
EditTrigger(editedTrigger);
391+
}
392+
}
393+
}
394+
395+
private void HandleScrollOnEventOrActionParameterTextBox(string currentParameterValue, List<string> presetOptions, TriggerParamType paramType, EditorTextBox textBox)
396+
{
397+
// If the parameter has preset options defined, allow scrolling them
398+
if (presetOptions != null && presetOptions.Count > 0)
399+
{
400+
int currentPresetOptionIndex = presetOptions.FindIndex(po => po.StartsWith(currentParameterValue + " "));
401+
402+
if (currentPresetOptionIndex > 0 && Cursor.ScrollWheelValue > 0)
403+
{
404+
textBox.Text = presetOptions[currentPresetOptionIndex - 1];
405+
}
406+
else if (currentPresetOptionIndex > -1 && currentPresetOptionIndex < presetOptions.Count - 1 && Cursor.ScrollWheelValue < 0)
407+
{
408+
textBox.Text = presetOptions[currentPresetOptionIndex + 1];
409+
}
410+
411+
EditTrigger(editedTrigger);
412+
return;
413+
}
414+
415+
switch (paramType)
416+
{
417+
case TriggerParamType.TeamType:
418+
HandleScrollWheelOnTextBoxAndList(map.TeamTypes, tt => tt.ININame, currentParameterValue, textBox);
419+
break;
420+
case TriggerParamType.Trigger:
421+
HandleScrollWheelOnTextBoxAndList(map.Triggers, trigger => trigger.ID, currentParameterValue, textBox);
422+
break;
423+
case TriggerParamType.GlobalVariable:
424+
HandleScrollWheelOnTextBoxAndList(map.Rules.GlobalVariables, gv => gv.Index.ToString(CultureInfo.InvariantCulture), currentParameterValue, textBox);
425+
break;
426+
case TriggerParamType.LocalVariable:
427+
HandleScrollWheelOnTextBoxAndList(map.LocalVariables, lv => lv.Index.ToString(CultureInfo.InvariantCulture), currentParameterValue, textBox);
428+
break;
429+
case TriggerParamType.HouseType:
430+
HandleScrollWheelOnTextBoxAndList(map.GetHouseTypes(), housetype => housetype.Index.ToString(CultureInfo.InvariantCulture), currentParameterValue, textBox);
431+
break;
432+
case TriggerParamType.House:
433+
HandleScrollWheelOnTextBoxAndList(map.GetHouses(), house => house.ID.ToString(CultureInfo.InvariantCulture), currentParameterValue, textBox);
434+
break;
435+
case TriggerParamType.Text:
436+
if (int.TryParse(currentParameterValue, CultureInfo.InvariantCulture, out int textLineIndex))
437+
{
438+
if (Cursor.ScrollWheelValue < 0 && !string.IsNullOrEmpty(map.Rules.TutorialLines.GetStringByIdOrEmptyString(textLineIndex + 1)))
439+
{
440+
textBox.Text = (textLineIndex + 1).ToString(CultureInfo.InvariantCulture);
441+
EditTrigger(editedTrigger);
442+
}
443+
else if (Cursor.ScrollWheelValue > 0 && !string.IsNullOrEmpty(map.Rules.TutorialLines.GetStringByIdOrEmptyString(textLineIndex - 1)))
444+
{
445+
textBox.Text = (textLineIndex - 1).ToString(CultureInfo.InvariantCulture);
446+
EditTrigger(editedTrigger);
447+
}
448+
}
449+
break;
450+
case TriggerParamType.Tag:
451+
HandleScrollWheelOnTextBoxAndList(map.Tags, tag => tag.ID, currentParameterValue, textBox);
452+
break;
453+
case TriggerParamType.WaypointZZ:
454+
int waypointIdentifier = Helpers.GetWaypointNumberFromAlphabeticalString(currentParameterValue);
455+
if (Cursor.ScrollWheelValue < 0 && map.Waypoints.Exists(wp => wp.Identifier == waypointIdentifier + 1))
456+
{
457+
textBox.Text = Helpers.WaypointNumberToAlphabeticalString(waypointIdentifier + 1);
458+
EditTrigger(editedTrigger);
459+
}
460+
else if (Cursor.ScrollWheelValue > 0 && map.Waypoints.Exists(wp => wp.Identifier == waypointIdentifier - 1))
461+
{
462+
textBox.Text = Helpers.WaypointNumberToAlphabeticalString(waypointIdentifier - 1);
463+
EditTrigger(editedTrigger);
464+
}
465+
break;
466+
case TriggerParamType.Waypoint:
467+
HandleScrollWheelOnTextBoxAndList(map.Waypoints, wp => wp.Identifier.ToString(CultureInfo.InvariantCulture), currentParameterValue, textBox);
468+
break;
469+
case TriggerParamType.SuperWeapon:
470+
HandleScrollWheelOnTextBoxAndList(map.Rules.SuperWeaponTypes, sw => sw.Index.ToString(CultureInfo.InvariantCulture), currentParameterValue, textBox);
471+
break;
472+
case TriggerParamType.ParticleSystem:
473+
HandleScrollWheelOnTextBoxAndList(map.Rules.ParticleSystemTypes, pst => pst.ININame, currentParameterValue, textBox);
474+
break;
475+
case TriggerParamType.Speech:
476+
if (!Constants.IsRA2YR && int.TryParse(currentParameterValue, CultureInfo.InvariantCulture, out int speechIndex))
477+
{
478+
if (Cursor.ScrollWheelValue < 0 && map.EditorConfig.Speeches.List.Exists(speech => speech.Index == speechIndex + 1))
479+
{
480+
textBox.Text = (speechIndex + 1).ToString(CultureInfo.InvariantCulture);
481+
EditTrigger(editedTrigger);
482+
}
483+
else if (Cursor.ScrollWheelValue > 0 && map.EditorConfig.Speeches.List.Exists(speech => speech.Index == speechIndex - 1))
484+
{
485+
textBox.Text = (speechIndex - 1).ToString(CultureInfo.InvariantCulture);
486+
EditTrigger(editedTrigger);
487+
}
488+
}
489+
break;
490+
case TriggerParamType.Sound:
491+
if (!Constants.IsRA2YR && int.TryParse(currentParameterValue, CultureInfo.InvariantCulture, out int soundIndex))
492+
{
493+
if (Cursor.ScrollWheelValue < 0 && map.Rules.Sounds.List.Exists(sound => sound.Index == soundIndex + 1))
494+
{
495+
textBox.Text = (soundIndex + 1).ToString(CultureInfo.InvariantCulture);
496+
EditTrigger(editedTrigger);
497+
}
498+
else if (Cursor.ScrollWheelValue > 0 && map.Rules.Sounds.List.Exists(sound => sound.Index == soundIndex - 1))
499+
{
500+
textBox.Text = (soundIndex - 1).ToString(CultureInfo.InvariantCulture);
501+
EditTrigger(editedTrigger);
502+
}
503+
}
504+
break;
505+
case TriggerParamType.Color:
506+
HandleScrollWheelOnTextBoxAndList(map.Rules.Colors, c => c.Index.ToString(CultureInfo.InvariantCulture), currentParameterValue, textBox);
507+
break;
508+
default:
509+
break;
510+
}
511+
}
512+
513+
private void TbEventParameterValue_MouseScrolled(object sender, InputEventArgs e)
514+
{
515+
e.Handled = true;
516+
517+
if (editedTrigger == null || lbEvents.SelectedItem == null || lbEventParameters.SelectedItem == null)
518+
return;
519+
520+
var triggerEvent = (TriggerCondition)lbEvents.SelectedItem.Tag;
521+
var triggerEventType = GetTriggerEventType(triggerEvent.ConditionIndex);
522+
int paramIndex = (int)lbEventParameters.SelectedItem.Tag;
523+
524+
if (triggerEventType == null)
525+
return;
526+
527+
TriggerEventParam parameter = triggerEventType.Parameters[paramIndex];
528+
529+
string currentParameterValue = triggerEvent.Parameters[paramIndex];
530+
531+
HandleScrollOnEventOrActionParameterTextBox(currentParameterValue, parameter.PresetOptions, parameter.TriggerParamType, tbEventParameterValue);
532+
}
533+
534+
private void TbActionParameterValue_MouseScrolled(object sender, InputEventArgs e)
535+
{
536+
e.Handled = true;
537+
538+
if (editedTrigger == null || lbActions.SelectedItem == null || lbActionParameters.SelectedItem == null)
539+
return;
540+
541+
var triggerAction = (TriggerAction)lbActions.SelectedItem.Tag;
542+
var triggerActionType = GetTriggerActionType(triggerAction.ActionIndex);
543+
int paramIndex = (int)lbActionParameters.SelectedItem.Tag;
544+
545+
if (triggerActionType == null)
546+
return;
547+
548+
TriggerActionParam parameter = triggerActionType.Parameters[paramIndex];
549+
550+
string currentParameterValue = triggerAction.Parameters[paramIndex];
551+
552+
HandleScrollOnEventOrActionParameterTextBox(currentParameterValue, parameter.PresetOptions, parameter.TriggerParamType, tbActionParameterValue);
553+
}
554+
#endregion
555+
374556
private void CreateRandomTriggerSetWindow_RandomTriggersSetCreated(object sender, RandomTriggerSetTriggersCreatedEventArgs e)
375557
{
376558
ListTriggers();

0 commit comments

Comments
 (0)