private ULink BuildLink(UGraphLink link) { ULink ln = _uflow.Build <UGraphLink, ULink>(link); int linkIndex = Array.IndexOf(_graph.LinkData, link); ln._origin = _graph.Links[linkIndex].x; ln._target = _graph.Links[linkIndex].y; ln._machine = this; ln.Initialize(); return(ln); }
private UGraphLink AddLinkToGraph(UGraphLink link, string machineID, string originState, string targetState) { UMachineGraph graph; if (!_machines.TryGetValue(machineID, out graph)) { return(null); } int from = Array.FindIndex(graph.Nodes, n => n.ID == originState); int to = Array.FindIndex(graph.Nodes, n => n.ID == targetState); graph.Link(from, to, link); return(link); }
public void RegisterLink <T, D>(string machineID, string originState, string targetState, D data) where T : ULink <D>, new() { UGraphLink <T, D> link = ((UGraphLink <T, D>)AddLinkToGraph(new UGraphLink <T, D>(), machineID, originState, targetState)); link.Data = data; if (!_instantiators.ContainsKey(typeof(UGraphLink <T, D>))) { Func <UGraphLink <T, D>, T> Create = l => { T t = new T(); t.SetValue(l.Data); return(t); }; _instantiators.Add(typeof(UGraphLink <T, D>), Create); } }