public void clear() { instance = null; evt = null; runner = null; parentRunner = null; }
/** 执行触发器(检查条件) */ protected void runTrigger(TriggerInstance instance, TriggerActionRunner runner) { TriggerArg arg = _argPool.getOne(); arg.instance = instance; arg.parentRunner = runner; toRunTrigger(arg); }
private TriggerInstance doCreateInstance(int id) { TriggerConfigData config = _configDic.get(id); if (config == null) { warnLog("不该找不到配置", id); return(null); } TriggerInstance one = _instancePool.getOne(); one.config = config; initInstance(one); return(one); }
public void TestAddSubscriber() { List <TriggerInstance> listeners = new List <TriggerInstance>(); Assert.AreEqual(0, manager.subscribers.Count); // We subscribe a trigger string trigger_description = "{\"scope\": \"ADJACENT\", \"when\": \"ALWAYS\", \"effect\": {\"resource\": \"MONEY\", \"value\": 2}, \"type\": \"GREEN\"}"; Trigger trigger_ = Trigger.LoadFromJson(JSON.Parse(trigger_description) as JSONClass); TriggerInstance trigger = new TriggerInstance(trigger_, suburbs); // Bogus TileInstance manager.AddSubscriber(trigger); Assert.AreEqual(1, manager.subscribers.Count); TileType type_green = new TileType(ETileColor.GREEN); Assert.AreEqual(true, manager.subscribers.ContainsKey(type_green)); manager.subscribers.TryGetValue(type_green, out listeners); Assert.AreEqual(1, listeners.Count); Assert.AreEqual(true, listeners.Contains(trigger)); // We subscribe a tile with a trigger manager = new TileManager(); Assert.AreEqual(0, manager.subscribers.Count); string mint_description = "{\"name\": \"Mint\", \"triggers\": [{\"scope\": \"OWN\", \"when\": \"ALWAYS\", \"effect\": {\"resource\": \"MONEY\", \"value\": 2}, \"type\": \"GREY\"}], \"color\": \"GREY\", \"price\": 15, \"number\": 2, \"immediate\": {\"resource\": \"INCOME\", \"value\": 3}, \"letter\": \"A\", \"icon\": \"NONE\"}"; Tile mint_ = GetTileFromString(mint_description); TileInstance mint = new TileInstance(mint_); mint.position = new TilePosition(0, 6); mint.owner = player; manager.AddSubscriber(mint); Assert.AreEqual(1, manager.subscribers.Count); TileType type_grey = new TileType(ETileColor.GREY); Assert.AreEqual(true, manager.subscribers.ContainsKey(type_grey)); manager.subscribers.TryGetValue(type_grey, out listeners); Assert.AreEqual(true, listeners.Contains(mint.triggers[0])); // We subscribe a tile with no trigger manager = new TileManager(); Assert.AreEqual(0, manager.subscribers.Count); manager.AddSubscriber(suburbs); Assert.AreEqual(0, manager.subscribers.Count); }
public void AddSubscriber(TriggerInstance p_trigger) { TileType type_trigger = p_trigger.trigger.type; List <TriggerInstance> list; if (!m_subscribers.ContainsKey(type_trigger)) { list = new List <TriggerInstance> (); list.Add(p_trigger); m_subscribers.Add(type_trigger, list); } else { m_subscribers.TryGetValue(type_trigger, out list); list.Add(p_trigger); } }
public static bool TriggerIsValid(LevelSettings levelSettings, TriggerInstance trigger) { if (!GetTriggerTypeRange(levelSettings).Contains(trigger.TriggerType)) { return(false); } if (!GetTargetTypeRange(levelSettings, trigger.TriggerType).Contains(trigger.TargetType)) { return(false); } if (!GetTargetRange(levelSettings, trigger.TriggerType, trigger.TargetType, trigger.Timer).ParameterMatches(trigger.Target, false)) { return(false); } if (!GetTimerRange(levelSettings, trigger.TriggerType, trigger.TargetType, trigger.Target).ParameterMatches(trigger.Timer, false)) { return(false); } if (!GetExtraRange(levelSettings, trigger.TriggerType, trigger.TargetType, trigger.Target, trigger.Timer).ParameterMatches(trigger.Extra, false)) { return(false); } return(true); }
public void clear() { instance = null; delay = 0; current = 0; }
public static string ExportToScriptTrigger(Level level, TriggerInstance trigger, bool withComment = false) { checked { string result = null; switch (trigger.TriggerType) { case TriggerType.ConditionNg: { if (!TriggerIsValid(level.Settings, trigger)) { throw new Exception("Trigger is invalid."); } ushort conditionId = GetValue(level, trigger.Timer); NgTriggerSubtype conditionTrigger = NgCatalog.ConditionTrigger.MainList[conditionId]; ushort firstValue = GetValue(level, trigger.Target); ushort secondValue = conditionId; if (!conditionTrigger.Extra.IsEmpty) { secondValue |= (ushort)(GetValue(level, trigger.Extra) << 8); } result = trigger.Target is ObjectInstance ? "$9000," : "$8000,"; result += firstValue + ",$" + secondValue.ToString("X4"); break; } default: switch (trigger.TargetType) { case TriggerTargetType.FlipEffect: { if (!TriggerIsValid(level.Settings, trigger)) { throw new Exception("Trigger is invalid."); } ushort flipeffectId = GetValue(level, trigger.Target); NgTriggerSubtype flipeffectTrigger = NgCatalog.FlipEffectTrigger.MainList[flipeffectId]; ushort firstValue = flipeffectId; ushort secondValue = GetValue(level, trigger.Timer); if (!flipeffectTrigger.Extra.IsEmpty) { secondValue |= (ushort)(GetValue(level, trigger.Extra) << 8); } result = "$2000," + firstValue + ",$" + secondValue.ToString("X4"); break; } case TriggerTargetType.ActionNg: { if (!TriggerIsValid(level.Settings, trigger)) { throw new Exception("Trigger is invalid."); } ushort actionId = GetValue(level, trigger.Timer); NgTriggerSubtype actionTrigger = NgCatalog.ActionTrigger.MainList[actionId]; ushort firstValue = GetValue(level, trigger.Target); ushort secondValue = actionId; if (!actionTrigger.Extra.IsEmpty) { secondValue |= (ushort)(GetValue(level, trigger.Extra) << 8); } result = trigger.Target is StaticInstance ? "$4000," : "$5000,"; result += firstValue + ",$" + secondValue.ToString("X4"); break; } } break; } if (!string.IsNullOrEmpty(result)) { return((withComment ? "; " + trigger.TriggerType + " for " + trigger.TargetType + "\n; <#> " + trigger.Target + "\n; <&> " + trigger.Timer + (trigger.Extra == null ? "" : "\n; <E> " + trigger.Extra) + "\n; Copy following values to your script:" + "\n; " : "") + result); } } throw new ExceptionScriptNotSupported(); }
public FormTrigger(Level level, TriggerInstance trigger, Action <ObjectInstance> selectObject, Action <Room> selectRoom) { InitializeComponent(); _level = level; _trigger = trigger; // Setup events foreach (var control in panelClassicTriggerControls.Controls.OfType <TriggerParameterControl>()) { control.ViewObject += selectObject; control.ViewRoom += selectRoom; control.Level = level; } foreach (Control control in scriptExportPanel.Controls) { control.Click += scriptExportPanel_Click; } scriptExportPanel.Click += scriptExportPanel_Click; this.SetActualSize(); this.LockHeight(); if (_level.Settings.GameVersion == TRVersion.Game.TR5Main) { Text = "Legacy trigger editor"; } else { Text = "Trigger editor"; } // Set window property handlers Configuration.LoadWindowProperties(this, Editor.Instance.Configuration); FormClosing += new FormClosingEventHandler((s, e) => Configuration.SaveWindowProperties(this, Editor.Instance.Configuration)); // Update the dialog UpdateDialog(); // Set values cbBit1.Checked = (_trigger.CodeBits & (1 << 0)) != 0; cbBit2.Checked = (_trigger.CodeBits & (1 << 1)) != 0; cbBit3.Checked = (_trigger.CodeBits & (1 << 2)) != 0; cbBit4.Checked = (_trigger.CodeBits & (1 << 3)) != 0; cbBit5.Checked = (_trigger.CodeBits & (1 << 4)) != 0; cbOneShot.Checked = _trigger.OneShot; paramTriggerType.Parameter = new TriggerParameterUshort((ushort)_trigger.TriggerType); paramTargetType.Parameter = new TriggerParameterUshort((ushort)_trigger.TargetType); // HACK: Change order of population based on target type. if (_trigger.TriggerType == TriggerType.ConditionNg) { paramTimer.Parameter = _trigger.Timer; paramTarget.Parameter = _trigger.Target; } else { paramTarget.Parameter = _trigger.Target; paramTimer.Parameter = _trigger.Timer; } paramExtra.Parameter = _trigger.Extra; }
/** 初始化当前instance */ protected void initInstance(TriggerInstance instance) { }
public void AddSubscriber(TriggerInstance p_trigger) { TileType type_trigger = p_trigger.trigger.type; List<TriggerInstance> list; if (!m_subscribers.ContainsKey (type_trigger)) { list = new List<TriggerInstance> (); list.Add (p_trigger); m_subscribers.Add (type_trigger, list); } else { m_subscribers.TryGetValue (type_trigger, out list); list.Add (p_trigger); } }
public void TestAddSubscriber() { List<TriggerInstance> listeners = new List<TriggerInstance>(); Assert.AreEqual(0, manager.subscribers.Count); // We subscribe a trigger string trigger_description = "{\"scope\": \"ADJACENT\", \"when\": \"ALWAYS\", \"effect\": {\"resource\": \"MONEY\", \"value\": 2}, \"type\": \"GREEN\"}"; Trigger trigger_ = Trigger.LoadFromJson(JSON.Parse(trigger_description) as JSONClass); TriggerInstance trigger = new TriggerInstance(trigger_, suburbs); // Bogus TileInstance manager.AddSubscriber(trigger); Assert.AreEqual(1, manager.subscribers.Count); TileType type_green = new TileType(ETileColor.GREEN); Assert.AreEqual(true, manager.subscribers.ContainsKey(type_green)); manager.subscribers.TryGetValue(type_green, out listeners); Assert.AreEqual(1, listeners.Count); Assert.AreEqual(true, listeners.Contains(trigger)); // We subscribe a tile with a trigger manager = new TileManager(); Assert.AreEqual(0, manager.subscribers.Count); string mint_description = "{\"name\": \"Mint\", \"triggers\": [{\"scope\": \"OWN\", \"when\": \"ALWAYS\", \"effect\": {\"resource\": \"MONEY\", \"value\": 2}, \"type\": \"GREY\"}], \"color\": \"GREY\", \"price\": 15, \"number\": 2, \"immediate\": {\"resource\": \"INCOME\", \"value\": 3}, \"letter\": \"A\", \"icon\": \"NONE\"}"; Tile mint_ = GetTileFromString(mint_description); TileInstance mint = new TileInstance(mint_); mint.position = new TilePosition(0, 6); mint.owner = player; manager.AddSubscriber(mint); Assert.AreEqual(1, manager.subscribers.Count); TileType type_grey = new TileType(ETileColor.GREY); Assert.AreEqual(true, manager.subscribers.ContainsKey(type_grey)); manager.subscribers.TryGetValue(type_grey, out listeners); Assert.AreEqual(true, listeners.Contains(mint.triggers[0])); // We subscribe a tile with no trigger manager = new TileManager(); Assert.AreEqual(0, manager.subscribers.Count); manager.AddSubscriber(suburbs); Assert.AreEqual(0, manager.subscribers.Count); }