Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions src/TSMapEditor/Config/Scripts/Add Map Reveal Trigger.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
// Script for adding a map reveal trigger

// Using clauses.
// Unless you know what's in the WAE code-base, you want to always include
// these "standard usings".
using System;
using TSMapEditor;
using TSMapEditor.Models;
using TSMapEditor.CCEngine;
using TSMapEditor.Rendering;
using TSMapEditor.GameMath;
using TSMapEditor.UI.Windows;

namespace WAEScript
{
public class AddMapRevealTrigger
{
/// <summary>
/// Returns the description of this script.
/// All scripts must contain this function.
/// </summary>
public string GetDescription() => "This script will create a new map reveal trigger. Continue?";

/// <summary>
/// Returns the message that is presented to the user if running this script succeeded.
/// All scripts must contain this function.
/// </summary>
public string GetSuccessMessage()
{
if (error == null)
return $"Successfully created a map reveal trigger with name \"{mapRevealTriggerName}\". You can locate it in the Triggers window.";

return error;
}

private string error;

Check warning on line 36 in src/TSMapEditor/Config/Scripts/Add Map Reveal Trigger.cs

View workflow job for this annotation

GitHub Actions / build-editor

Field 'AddMapRevealTrigger.error' is never assigned to, and will always have its default value null

private const string mapRevealTriggerName = "Map Reveal Trigger";

/// <summary>
/// The function that actually does the magic.
/// </summary>
/// <param name="map">Map argument that allows us to access map data.</param>
public void Perform(Map map)
{
var trigger = new Trigger(map.GetNewUniqueInternalId());
trigger.Name = mapRevealTriggerName;
trigger.HouseType = "Neutral";

var timeElapsedCondition = new TriggerCondition();
timeElapsedCondition.ConditionIndex = 13;
timeElapsedCondition.Parameters[0] = "0";
trigger.Conditions.Add(timeElapsedCondition);

var mapRevealAction = new TriggerAction();
mapRevealAction.ActionIndex = 16;
mapRevealAction.Parameters[0] = "0";
trigger.Actions.Add(mapRevealAction);

map.AddTrigger(trigger);

map.AddTag(new Tag()
{
ID = map.GetNewUniqueInternalId(),
Name = trigger.Name + " (tag)",
Trigger = trigger,
Repeating = 0
});
}
}
}
2 changes: 2 additions & 0 deletions src/TSMapEditor/Initialization/IMap.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ public interface IMap
void AddWaypoint(Waypoint waypoint);
void AddTaskForce(TaskForce taskForce);
void AddTrigger(Trigger trigger);
void RemoveTrigger(Trigger trigger);
void RemoveTagsAssociatedWithTrigger(Trigger trigger);
void AddTag(Tag tag);
void AddCellTag(CellTag cellTag);
void RemoveCellTagFrom(Point2D cellCoords);
Expand Down
18 changes: 18 additions & 0 deletions src/TSMapEditor/Models/Map.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,12 @@ public class Map : IMap
/// </summary>
public event EventHandler TeamTypesChanged;

/// <summary>
/// Raised when a trigger is added or removed.
/// NOT raised when an individual trigger's data is modified.
/// </summary>
public event EventHandler TriggersChanged;

public IniFile LoadedINI { get; private set; }

public bool ReloadINI()
Expand Down Expand Up @@ -792,13 +798,25 @@ public void ClearTaskForces()
public void AddTrigger(Trigger trigger)
{
Triggers.Add(trigger);
TriggersChanged?.Invoke(this, EventArgs.Empty);
}

public void RemoveTrigger(Trigger trigger)
{
Triggers.Remove(trigger);
TriggersChanged?.Invoke(this, EventArgs.Empty);
}

public void AddTag(Tag tag)
{
Tags.Add(tag);
}

public void RemoveTagsAssociatedWithTrigger(Trigger trigger)
{
Tags.RemoveAll(t => t.Trigger == trigger);
}

public void AddCellTag(CellTag cellTag)
{
var tile = GetTile(cellTag.Position);
Expand Down
41 changes: 33 additions & 8 deletions src/TSMapEditor/UI/Windows/TriggersWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -686,6 +686,8 @@ private TeamType FindOrCloneTeamTypeForDifficulty(TeamType hardTeamType, Difficu

private void DoCloneForEasierDifficulties(bool cloneDependencies)
{
map.TriggersChanged -= Map_TriggersChanged;

var originalTag = map.Tags.Find(t => t.Trigger == editedTrigger);

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

map.Tags.Add(new Tag()
map.AddTag(new Tag()
{
ID = map.GetNewUniqueInternalId(),
Name = mediumDifficultyTrigger.Name + " (tag)",
Trigger = mediumDifficultyTrigger,
Repeating = originalTag == null ? 0 : originalTag.Repeating
});

map.Tags.Add(new Tag()
map.AddTag(new Tag()
{
ID = map.GetNewUniqueInternalId(),
Name = easyDifficultyTrigger.Name + " (tag)",
Expand Down Expand Up @@ -806,6 +808,8 @@ private void DoCloneForEasierDifficulties(bool cloneDependencies)
}

ListTriggers();

map.TriggersChanged += Map_TriggersChanged;
}

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

private void BtnNewTrigger_LeftClick(object sender, EventArgs e)
{
map.TriggersChanged -= Map_TriggersChanged;

var newTrigger = new Trigger(map.GetNewUniqueInternalId()) { Name = "New trigger", HouseType = "Neutral" };
map.Triggers.Add(newTrigger);
map.Tags.Add(new Tag() { ID = map.GetNewUniqueInternalId(), Name = "New tag", Trigger = newTrigger });
map.AddTrigger(newTrigger);
map.AddTag(new Tag() { ID = map.GetNewUniqueInternalId(), Name = "New tag", Trigger = newTrigger });
ListTriggers();
SelectTrigger(newTrigger);

map.TriggersChanged += Map_TriggersChanged;
}

private void BtnCloneTrigger_LeftClick(object sender, EventArgs e)
{
if (editedTrigger == null)
return;

map.TriggersChanged -= Map_TriggersChanged;

var originalTag = map.Tags.Find(t => t.Trigger == editedTrigger);

var clone = editedTrigger.Clone(map.GetNewUniqueInternalId());
map.Triggers.Add(clone);
map.Tags.Add(new Tag() { ID = map.GetNewUniqueInternalId(), Name = clone.Name + " (tag)", Trigger = clone, Repeating = originalTag == null ? 0 : originalTag.Repeating });
map.AddTrigger(clone);
map.AddTag(new Tag() { ID = map.GetNewUniqueInternalId(), Name = clone.Name + " (tag)", Trigger = clone, Repeating = originalTag == null ? 0 : originalTag.Repeating });
ListTriggers();
SelectTrigger(clone);

map.TriggersChanged += Map_TriggersChanged;
}

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

private void DeleteTrigger()
{
map.Triggers.Remove(editedTrigger);
map.TriggersChanged -= Map_TriggersChanged;

map.RemoveTrigger(editedTrigger);
map.Triggers.ForEach(t => { if (t.LinkedTrigger == editedTrigger) t.LinkedTrigger = null; });
map.Tags.RemoveAll(t => t.Trigger == editedTrigger);
map.RemoveTagsAssociatedWithTrigger(editedTrigger);
editedTrigger = null;

ListTriggers();

map.TriggersChanged += Map_TriggersChanged;
}

public void SelectTrigger(Trigger trigger)
Expand Down Expand Up @@ -2342,5 +2358,14 @@ private void OpenCreateRandomTriggersSetWindow()
createRandomTriggerSetWindow.Open();
PutOnBackground();
}

private void Map_TriggersChanged(object sender, EventArgs e)
{
if (Visible)
{
ListTriggers();
SelectTrigger(editedTrigger);
}
}
}
}
Loading