示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
            }
        }