mirror of
https://github.com/spiffcode/hostile-takeover.git
synced 2025-12-16 12:08:36 +00:00
109 lines
1.9 KiB
C#
109 lines
1.9 KiB
C#
using System;
|
|
using System.Collections;
|
|
using SpiffLib;
|
|
|
|
namespace m {
|
|
[Serializable]
|
|
public class Trigger {
|
|
int m_nfSides;
|
|
ArrayList m_alsConditions;
|
|
ArrayList m_alsActions;
|
|
|
|
public Trigger() {
|
|
m_nfSides = 0;
|
|
m_alsConditions = new ArrayList();
|
|
m_alsActions = new ArrayList();
|
|
}
|
|
|
|
public virtual Trigger Clone() {
|
|
Trigger tgr = new Trigger();
|
|
tgr.Sides = Sides;
|
|
foreach (CaBase cab in Conditions)
|
|
tgr.Conditions.Add(cab.Clone());
|
|
foreach (CaBase cab in Actions)
|
|
tgr.Actions.Add(cab.Clone());
|
|
return tgr;
|
|
}
|
|
|
|
public bool IsValid() {
|
|
return GetError() == null;
|
|
}
|
|
|
|
public string GetError() {
|
|
// Invalid if 0 sides
|
|
|
|
if (m_nfSides == 0)
|
|
return "No Sides selected";
|
|
|
|
// Invalid if 0 conditions
|
|
|
|
if (m_alsConditions.Count == 0)
|
|
return "No Conditions Entered";
|
|
|
|
// All conditions must be valid
|
|
|
|
int n = 0;
|
|
foreach (CaBase cab in m_alsConditions) {
|
|
if (!cab.IsValid()) {
|
|
return "Condition " + n + " is invalid";
|
|
}
|
|
n++;
|
|
}
|
|
|
|
// Invalid if 0 actions
|
|
|
|
if (m_alsActions.Count == 0)
|
|
return "No Actions Entered";
|
|
|
|
// All actions must be valid
|
|
|
|
n = 0;
|
|
foreach (CaBase cab in m_alsActions) {
|
|
if (!cab.IsValid()) {
|
|
return "Action " + n + " is invalid";
|
|
}
|
|
n++;
|
|
}
|
|
|
|
// Looks good
|
|
|
|
return null;
|
|
}
|
|
|
|
public ArrayList Conditions {
|
|
get {
|
|
return m_alsConditions;
|
|
}
|
|
}
|
|
|
|
public ArrayList Actions {
|
|
get {
|
|
return m_alsActions;
|
|
}
|
|
}
|
|
|
|
public int Sides {
|
|
get {
|
|
return m_nfSides;
|
|
}
|
|
set {
|
|
m_nfSides = value;
|
|
}
|
|
}
|
|
|
|
public void AddIniProperties(Ini.Section sec) {
|
|
// Save conditions & actions
|
|
|
|
foreach (CaBase cab in m_alsConditions) {
|
|
if (!(cab is CommentCondition))
|
|
sec.Add(new Ini.Property("C", cab.ToSaveString()));
|
|
}
|
|
|
|
foreach (CaBase cab in m_alsActions) {
|
|
if (!(cab is CommentTriggerAction))
|
|
sec.Add(new Ini.Property("A", cab.ToSaveString()));
|
|
}
|
|
}
|
|
}
|
|
}
|