private HandlerFuture GetSingleHandler(ScriptTree.Node node) { Debug.Assert(!node.Base.Contains("Event")); HandlerFuture handler = null; if (node.Members == null) { Type t = Type.GetType("Assets.Core.Handler." + node.Base); handler = Activator.CreateInstance(t, new Params(node.Params)) as HandlerFuture; } else { var start = node.Members.Find(m => m.Name == node.StartMember); handler = GetSingleHandler(start); var curr = start; while (curr.Name != node.EndMember) { Debug.Assert(curr.Succ != null && curr.Succ.Count == 1 && curr.Succ[0].Condition.Count == 0); var nextTree = node.Members.Find(m => m.Name == curr.Succ[0].Dest); var next = GetSingleHandler(nextTree); handler.GroupAfter((_) => next); curr = nextTree; } } return(handler); }
public StackElement(string name, HandlerFuture handler, ScriptTree.Node tree, ScriptTree.Succ prevSucc) { this.Name = name; this.Handler = handler; this.Node = tree; this.PrevSucc = prevSucc; }
private void ApplySucc(Dictionary <string, EventPromise> eventMap, HandlerFuture curr, ScriptTree.Succ succ, HandlerFuture next) { if (succ.Condition == null || succ.Condition.Count == 0) { curr.AddAfter((_) => next); } else if (succ.Condition.Count == 1) { curr.AddExternalCondition(eventMap[succ.Condition[0]], (_) => next, succ.EndPrev); } else { var combined = new OrEvent(eventMap[succ.Condition[0]], eventMap[succ.Condition[1]]); for (int i = 2; i < succ.Condition.Count; i++) { combined = new OrEvent(combined, eventMap[succ.Condition[i]]); } curr.AddExternalCondition(combined, (_) => next, succ.EndPrev); } }
public CycleElement(HandlerFuture a, ScriptTree.Succ succ, HandlerFuture b) { this.A = a; this.Succ = succ; this.B = b; }