// When processing (decompiling) a Trigger, current is a MegaloScriptTrigger // When processing (decompiling) a VirtualTrigger, current will be a MegaloScriptVirtualTrigger protected override bool PreProcessTrigger(MegaloScriptTrigger root, MegaloScriptTrigger parent, MegaloScriptTriggerBase current) { if (current.ObjectType != MegaloScriptModelObjectType.VirtualTrigger && string.IsNullOrEmpty(current.Name)) { current.Name = string.Format(Util.InvariantCultureInfo, "{0}_InnerLoop{1}", parent.Name, current.Id.ToString(Util.InvariantCultureInfo)); } return(true); }
protected override void PostProcessTrigger(MegaloScriptTrigger root, MegaloScriptTrigger parent, MegaloScriptTriggerBase current) { if (mCompileReferences) { mOwnerState.Compile(current.References); } }
protected override bool PreProcessTrigger(MegaloScriptTrigger root, MegaloScriptTrigger parent, MegaloScriptTriggerBase current) { mCompileReferences = true; var trigger = current as MegaloScriptTrigger; if (trigger != null) { if (!trigger.CommentOut) { mOwnerState.TriggerWriteOrder.Add(current.Id); mOwnerState.TriggerRemappings.Add(current.Id, mNextRemapIndex); mNextRemapIndex++; } else { mCompileReferences = false; } } return(mCompileReferences); }
void ProcessTriggerRecursive(MegaloScriptTrigger root, MegaloScriptTrigger parent, MegaloScriptTriggerBase current) { bool preprocessed = PreProcessTrigger(root, parent, current); if (preprocessed) { foreach (var handle in current.References) { if (handle.Type == MegaloScriptModelObjectType.Action) { var action = Model.Actions[handle.Id]; if (action.ProtoData == Database.ForEachAction) { var index_param = action.GetArgument <MegaloScriptIndexValue>(Model, 0); int trigger_index = index_param.Value; var recurse_parent = current as MegaloScriptTrigger ?? parent; ProcessTriggerRecursive(root, recurse_parent, Model.Triggers[trigger_index]); } else if (action.ProtoData == Database.BeginAction) { var index_param = action.GetArgument <MegaloScriptVirtualTriggerValue>(Model, 0); int trigger_index = index_param.VirtualTriggerHandle.Id; ProcessTriggerRecursive(root, parent, Model.VirtualTriggers[trigger_index]); } } } } PostProcessTrigger(root, parent, current); }
protected virtual void PostProcessTrigger(MegaloScriptTrigger root, MegaloScriptTrigger parent, MegaloScriptTriggerBase current) { }
// When processing a Trigger, current is a MegaloScriptTrigger // When processing a VirtualTrigger, current will be a MegaloScriptVirtualTrigger protected virtual bool PreProcessTrigger(MegaloScriptTrigger root, MegaloScriptTrigger parent, MegaloScriptTriggerBase current) { return(true); }