Skip to content

Commit 99581a9

Browse files
authored
Add map reveal trigger C# script
Introduces a TriggersChanged event to the Map class, refactors trigger and tag addition/removal to use new methods, and updates TriggersWindow to handle trigger changes more robustly. This improves consistency and maintainability when managing triggers and their associated tags, and ensures UI updates correctly in response to trigger changes.
1 parent ace19c1 commit 99581a9

File tree

4 files changed

+124
-8
lines changed

4 files changed

+124
-8
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Script for adding a map reveal trigger
2+
3+
// Using clauses.
4+
// Unless you know what's in the WAE code-base, you want to always include
5+
// these "standard usings".
6+
using System;
7+
using TSMapEditor;
8+
using TSMapEditor.Models;
9+
using TSMapEditor.CCEngine;
10+
using TSMapEditor.Rendering;
11+
using TSMapEditor.GameMath;
12+
using TSMapEditor.UI.Windows;
13+
14+
namespace WAEScript
15+
{
16+
public class AddMapRevealTrigger
17+
{
18+
/// <summary>
19+
/// Returns the description of this script.
20+
/// All scripts must contain this function.
21+
/// </summary>
22+
public string GetDescription() => "This script will create a new map reveal trigger. Continue?";
23+
24+
/// <summary>
25+
/// Returns the message that is presented to the user if running this script succeeded.
26+
/// All scripts must contain this function.
27+
/// </summary>
28+
public string GetSuccessMessage()
29+
{
30+
if (error == null)
31+
return $"Successfully created a map reveal trigger with name \"{mapRevealTriggerName}\". You can locate it in the Triggers window.";
32+
33+
return error;
34+
}
35+
36+
private string error;
37+
38+
private const string mapRevealTriggerName = "Map Reveal Trigger";
39+
40+
/// <summary>
41+
/// The function that actually does the magic.
42+
/// </summary>
43+
/// <param name="map">Map argument that allows us to access map data.</param>
44+
public void Perform(Map map)
45+
{
46+
var trigger = new Trigger(map.GetNewUniqueInternalId());
47+
trigger.Name = mapRevealTriggerName;
48+
trigger.HouseType = "Neutral";
49+
50+
var timeElapsedCondition = new TriggerCondition();
51+
timeElapsedCondition.ConditionIndex = 13;
52+
timeElapsedCondition.Parameters[0] = "0";
53+
trigger.Conditions.Add(timeElapsedCondition);
54+
55+
var mapRevealAction = new TriggerAction();
56+
mapRevealAction.ActionIndex = 16;
57+
mapRevealAction.Parameters[0] = "0";
58+
trigger.Actions.Add(mapRevealAction);
59+
60+
map.AddTrigger(trigger);
61+
62+
map.AddTag(new Tag()
63+
{
64+
ID = map.GetNewUniqueInternalId(),
65+
Name = trigger.Name + " (tag)",
66+
Trigger = trigger,
67+
Repeating = 0
68+
});
69+
}
70+
}
71+
}

src/TSMapEditor/Initialization/IMap.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ public interface IMap
5454
void AddWaypoint(Waypoint waypoint);
5555
void AddTaskForce(TaskForce taskForce);
5656
void AddTrigger(Trigger trigger);
57+
void RemoveTrigger(Trigger trigger);
58+
void RemoveTagsAssociatedWithTrigger(Trigger trigger);
5759
void AddTag(Tag tag);
5860
void AddCellTag(CellTag cellTag);
5961
void RemoveCellTagFrom(Point2D cellCoords);

src/TSMapEditor/Models/Map.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ public class Map : IMap
5555
/// </summary>
5656
public event EventHandler TeamTypesChanged;
5757

58+
/// <summary>
59+
/// Raised when a trigger is added or removed.
60+
/// NOT raised when an individual trigger's data is modified.
61+
/// </summary>
62+
public event EventHandler TriggersChanged;
63+
5864
public IniFile LoadedINI { get; private set; }
5965

6066
public bool ReloadINI()
@@ -792,13 +798,25 @@ public void ClearTaskForces()
792798
public void AddTrigger(Trigger trigger)
793799
{
794800
Triggers.Add(trigger);
801+
TriggersChanged?.Invoke(this, EventArgs.Empty);
802+
}
803+
804+
public void RemoveTrigger(Trigger trigger)
805+
{
806+
Triggers.Remove(trigger);
807+
TriggersChanged?.Invoke(this, EventArgs.Empty);
795808
}
796809

797810
public void AddTag(Tag tag)
798811
{
799812
Tags.Add(tag);
800813
}
801814

815+
public void RemoveTagsAssociatedWithTrigger(Trigger trigger)
816+
{
817+
Tags.RemoveAll(t => t.Trigger == trigger);
818+
}
819+
802820
public void AddCellTag(CellTag cellTag)
803821
{
804822
var tile = GetTile(cellTag.Position);

src/TSMapEditor/UI/Windows/TriggersWindow.cs

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,8 @@ private TeamType FindOrCloneTeamTypeForDifficulty(TeamType hardTeamType, Difficu
686686

687687
private void DoCloneForEasierDifficulties(bool cloneDependencies)
688688
{
689+
map.TriggersChanged -= Map_TriggersChanged;
690+
689691
var originalTag = map.Tags.Find(t => t.Trigger == editedTrigger);
690692

691693
var mediumDifficultyTrigger = editedTrigger.Clone(map.GetNewUniqueInternalId());
@@ -716,15 +718,15 @@ private void DoCloneForEasierDifficulties(bool cloneDependencies)
716718
easyDifficultyTrigger.Name = editedTrigger.Name[..^2] + " E";
717719
}
718720

719-
map.Tags.Add(new Tag()
721+
map.AddTag(new Tag()
720722
{
721723
ID = map.GetNewUniqueInternalId(),
722724
Name = mediumDifficultyTrigger.Name + " (tag)",
723725
Trigger = mediumDifficultyTrigger,
724726
Repeating = originalTag == null ? 0 : originalTag.Repeating
725727
});
726728

727-
map.Tags.Add(new Tag()
729+
map.AddTag(new Tag()
728730
{
729731
ID = map.GetNewUniqueInternalId(),
730732
Name = easyDifficultyTrigger.Name + " (tag)",
@@ -806,6 +808,8 @@ private void DoCloneForEasierDifficulties(bool cloneDependencies)
806808
}
807809

808810
ListTriggers();
811+
812+
map.TriggersChanged += Map_TriggersChanged;
809813
}
810814

811815
#region Event and action context menus
@@ -1340,25 +1344,33 @@ private void GetTriggerEventAndParamIndex(out TriggerCondition triggerEvent, out
13401344

13411345
private void BtnNewTrigger_LeftClick(object sender, EventArgs e)
13421346
{
1347+
map.TriggersChanged -= Map_TriggersChanged;
1348+
13431349
var newTrigger = new Trigger(map.GetNewUniqueInternalId()) { Name = "New trigger", HouseType = "Neutral" };
1344-
map.Triggers.Add(newTrigger);
1345-
map.Tags.Add(new Tag() { ID = map.GetNewUniqueInternalId(), Name = "New tag", Trigger = newTrigger });
1350+
map.AddTrigger(newTrigger);
1351+
map.AddTag(new Tag() { ID = map.GetNewUniqueInternalId(), Name = "New tag", Trigger = newTrigger });
13461352
ListTriggers();
13471353
SelectTrigger(newTrigger);
1354+
1355+
map.TriggersChanged += Map_TriggersChanged;
13481356
}
13491357

13501358
private void BtnCloneTrigger_LeftClick(object sender, EventArgs e)
13511359
{
13521360
if (editedTrigger == null)
13531361
return;
13541362

1363+
map.TriggersChanged -= Map_TriggersChanged;
1364+
13551365
var originalTag = map.Tags.Find(t => t.Trigger == editedTrigger);
13561366

13571367
var clone = editedTrigger.Clone(map.GetNewUniqueInternalId());
1358-
map.Triggers.Add(clone);
1359-
map.Tags.Add(new Tag() { ID = map.GetNewUniqueInternalId(), Name = clone.Name + " (tag)", Trigger = clone, Repeating = originalTag == null ? 0 : originalTag.Repeating });
1368+
map.AddTrigger(clone);
1369+
map.AddTag(new Tag() { ID = map.GetNewUniqueInternalId(), Name = clone.Name + " (tag)", Trigger = clone, Repeating = originalTag == null ? 0 : originalTag.Repeating });
13601370
ListTriggers();
13611371
SelectTrigger(clone);
1372+
1373+
map.TriggersChanged += Map_TriggersChanged;
13621374
}
13631375

13641376
private void BtnDeleteTrigger_LeftClick(object sender, EventArgs e)
@@ -1383,12 +1395,16 @@ private void BtnDeleteTrigger_LeftClick(object sender, EventArgs e)
13831395

13841396
private void DeleteTrigger()
13851397
{
1386-
map.Triggers.Remove(editedTrigger);
1398+
map.TriggersChanged -= Map_TriggersChanged;
1399+
1400+
map.RemoveTrigger(editedTrigger);
13871401
map.Triggers.ForEach(t => { if (t.LinkedTrigger == editedTrigger) t.LinkedTrigger = null; });
1388-
map.Tags.RemoveAll(t => t.Trigger == editedTrigger);
1402+
map.RemoveTagsAssociatedWithTrigger(editedTrigger);
13891403
editedTrigger = null;
13901404

13911405
ListTriggers();
1406+
1407+
map.TriggersChanged += Map_TriggersChanged;
13921408
}
13931409

13941410
public void SelectTrigger(Trigger trigger)
@@ -2342,5 +2358,14 @@ private void OpenCreateRandomTriggersSetWindow()
23422358
createRandomTriggerSetWindow.Open();
23432359
PutOnBackground();
23442360
}
2361+
2362+
private void Map_TriggersChanged(object sender, EventArgs e)
2363+
{
2364+
if (Visible)
2365+
{
2366+
ListTriggers();
2367+
SelectTrigger(editedTrigger);
2368+
}
2369+
}
23452370
}
23462371
}

0 commit comments

Comments
 (0)