internal static void ValidateCurrentGraph(bool force = false)
        {
            var shouldRun = k_Cooldown.Update(DateTime.Now);

            if (!force && !shouldRun)
            {
                return;
            }

            foreach (var recorder in Current.RecordersBySystem.Values)
            {
                recorder.Update();
            }

            var graph = new PlayerLoopSystemGraph();

            ParsePlayerLoopSystem(PlayerLoop.GetCurrentPlayerLoop(), graph);
            if (!DidChange(Current, graph))
            {
                graph.Reset();
                return;
            }

            Current.Reset();
            Current = graph;
            OnGraphChanged?.Invoke();
        }
Esempio n. 2
0
        /// <summary>
        /// Callback for the 'duplicate arc' context menu option.
        /// </summary>
        /// <remarks>
        /// Does this belong in the presenter?
        /// </remarks>
        /// <param name="sender">Sending object.</param>
        /// <param name="args">Event data.</param>
        private void OnDuplicateArc(object sender, EventArgs args)
        {
            try
            {
                if (graphView.SelectedObject is DGArc arc)
                {
                    RuleAction newArc = new RuleAction(arc.ToArc());
                    newArc.Name     = graphView.DirectedGraph.NextArcID();
                    newArc.Location = new System.Drawing.Point(newArc.Location.X + 10, newArc.Location.Y);

                    // Copy across rules and actions from selected arc.
                    if (rules.ContainsKey(arc.Name))
                    {
                        rules[newArc.Name] = rules[arc.Name];
                    }
                    if (actions.ContainsKey(arc.Name))
                    {
                        actions[newArc.Name] = actions[arc.Name];
                    }

                    List <RuleAction> arcs = Arcs;
                    arcs.Add(newArc);
                    OnGraphChanged?.Invoke(this, new GraphChangedEventArgs(arcs, Nodes));
                }
            }
            catch (Exception err)
            {
                ShowError(err);
            }
        }
Esempio n. 3
0
        public void LoadGraph(CGraph graph)
        {
            CGraph oldGraph = ScriptGraph;

            ScriptGraph = graph;
            GraphName   = ScriptGraph.Name;

            Dictionary <CNode, CScriptNodeViewmodel> nodeToViewModel = new Dictionary <CNode, CScriptNodeViewmodel>();
            List <CScriptNodeViewmodel> newNodes = new List <CScriptNodeViewmodel>();

            foreach (CNode graphNode in ScriptGraph.m_nodes)
            {
                CScriptNodeViewmodel viewmodel = new CScriptNodeViewmodel(graphNode, this);
                nodeToViewModel.Add(graphNode, viewmodel);
                newNodes.Add(viewmodel);
            }

            m_selectedNodes.Clear();
            Nodes = new ObservableCollection <CScriptNodeViewmodel>(newNodes);
            Connections.Clear();

            ResolveScriptNodeConnections(ScriptGraph.m_nodes, nodeToViewModel);
            UndoRedoUtility.Purge(null);

            OnGraphChanged?.Invoke(this, oldGraph, ScriptGraph);
        }
Esempio n. 4
0
 public void AddNode(INode n)
 {
     Nodes.Add(n);
     OnGraphChanged?.Invoke();
     OnNodeAdded?.Invoke(n);
     n.OnConnectorAdded   += ConnectorAdded;
     n.OnConnectorRemoved += ConnectorRemoved;
     n.OnNodeRemoved      += RemoveNode;
 }
Esempio n. 5
0
 /// <summary>
 /// The user has moved an object (node or arc) in the directed graph.
 /// </summary>
 /// <remarks>This is called from the directed graph code (not directly by gtk).</remarks>
 /// <param name="sender">Sending object.</param>
 /// <param name="args">Event data.</param>
 private void OnGraphObjectMoved(object sender, ObjectMovedArgs args)
 {
     try
     {
         OnGraphChanged?.Invoke(this, new GraphChangedEventArgs(Arcs, Nodes));
     }
     catch (Exception err)
     {
         ShowError(err);
     }
 }
Esempio n. 6
0
        public void CreateNewGraph()
        {
            Connections.Clear();
            Nodes.Clear();

            CGraph oldGraph = ScriptGraph;

            ScriptGraph = new CGraph();

            OnGraphChanged?.Invoke(this, oldGraph, ScriptGraph);
        }
Esempio n. 7
0
		private static void RefreshMapMagic (bool all, Generator gen1, Generator gen2)
		/// makes current mapMagic to generate
		/// if gen not specified forcing re-generate
		{
			current.graph.changeVersion++;

			if (all) RelatedMapMagic?.Refresh();
			else RelatedMapMagic?.Refresh(gen1, gen2);

			EditorUtility.SetDirty(current.graph);

			OnGraphChanged?.Invoke(current.graph);
		}
Esempio n. 8
0
 /// <summary>
 /// Called when the user has changed an action.
 /// </summary>
 /// <param name="sender">Sender object.</param>
 /// <param name="args">Event data.</param>
 public void OnActionChanged(object sender, EventArgs args)
 {
     try
     {
         if (graphView.SelectedObject != null)
         {
             actions[graphView.SelectedObject.Name] = ActionList.Text.Split('\n').ToList();
             OnGraphChanged?.Invoke(this, new GraphChangedEventArgs(Arcs, Nodes));
         }
     }
     catch (Exception err)
     {
         ShowError(err);
     }
 }
Esempio n. 9
0
 /// <summary>
 /// Called when the user has changed a node's description.
 /// </summary>
 /// <param name="sender">Sender object.</param>
 /// <param name="args">Event data.</param>
 private void OnDescriptionChanged(object sender, EventArgs args)
 {
     try
     {
         if (graphView.SelectedObject != null)
         {
             nodeDescriptions[graphView.SelectedObject.Name] = descEntry.Text;
             OnGraphChanged?.Invoke(this, new GraphChangedEventArgs(Arcs, Nodes));
         }
     }
     catch (Exception err)
     {
         ShowError(err);
     }
 }
Esempio n. 10
0
 /// <summary>
 /// Called when the user has changed a node's colour.
 /// </summary>
 /// <param name="sender">Sending object.</param>
 /// <param name="args">Event data.</param>
 private void OnColourChanged(object sender, EventArgs args)
 {
     try
     {
         if (graphView.SelectedObject != null)
         {
             graphView.SelectedObject.Colour = Utility.Colour.GtkToOxyColor(colourChooser.Color);
             OnGraphChanged?.Invoke(this, new GraphChangedEventArgs(Arcs, Nodes));
         }
     }
     catch (Exception err)
     {
         ShowError(err);
     }
 }
Esempio n. 11
0
 public void RemoveNode(INode n)
 {
     try
     {
         Nodes.Remove(n);
         OnGraphChanged?.Invoke();
         OnNodeRemoved?.Invoke(n);
         n.OnConnectorAdded   -= ConnectorAdded;
         n.OnConnectorRemoved -= ConnectorRemoved;
         n.OnNodeRemoved      -= RemoveNode;
     }
     catch
     {
         throw new Exception();
     }
 }
Esempio n. 12
0
        /// <summary>
        /// Called when the user has changed a node's colour.
        /// </summary>
        /// <param name="sender">Sending object.</param>
        /// <param name="args">Event data.</param>
        private void OnColourChanged(object sender, EventArgs args)
        {
            try
            {
                if (graphView.SelectedObject != null)
                {
                    var colour = colourChooser.Rgba.ToColour().ToGdk();

                    graphView.SelectedObject.Colour = Utility.Colour.FromGtk(colour);
                    OnGraphChanged?.Invoke(this, new GraphChangedEventArgs(Arcs, Nodes));
                }
            }
            catch (Exception err)
            {
                ShowError(err);
            }
        }
Esempio n. 13
0
        /// <summary>
        /// Called when the user has changed a node's colour.
        /// </summary>
        /// <param name="sender">Sending object.</param>
        /// <param name="args">Event data.</param>
        private void OnColourChanged(object sender, EventArgs args)
        {
            try
            {
                if (graphView.SelectedObject != null)
                {
#if NETFRAMEWORK
                    var colour = colourChooser.Color;
#else
                    var colour = colourChooser.Rgba.ToColour().ToGdk();
#endif
                    graphView.SelectedObject.Colour = Utility.Colour.GtkToOxyColor(colour);
                    OnGraphChanged?.Invoke(this, new GraphChangedEventArgs(Arcs, Nodes));
                }
            }
            catch (Exception err)
            {
                ShowError(err);
            }
        }
Esempio n. 14
0
 /// <summary>
 /// User has changed a node name.
 /// </summary>
 /// <param name="sender">Sender object.</param>
 /// <param name="args">Event arguments.</param>
 public void OnNameChanged(object sender, EventArgs args)
 {
     try
     {
         if (!string.IsNullOrEmpty(nameEntry.Text))
         {
             // We need to rename the node in the directed graph in order
             // for the Nodes property to return the correct name for the
             // changed node. We also need to add a description for the new
             // name to the dict.
             nodeDescriptions[nameEntry.Text] = nodeDescriptions[graphView.SelectedObject.Name];
             graphView.SelectedObject.Name    = nameEntry.Text;
             ctxFrame.Label = $"{nameEntry.Text} settings";
             OnGraphChanged?.Invoke(this, new GraphChangedEventArgs(Arcs, Nodes));
         }
     }
     catch (Exception err)
     {
         ShowError(err);
     }
 }
        static void ValidateCurrentGraph()
        {
            var now = DateTime.Now;

            if (now - s_LastValidate < s_OneSecond)
            {
                return;
            }

            s_LastValidate = now;

            var graph = new PlayerLoopSystemGraph();

            ParsePlayerLoopSystem(PlayerLoop.GetCurrentPlayerLoop(), graph);
            if (!DidChange(Current, graph))
            {
                graph.Reset();
                return;
            }

            Current.Reset();
            Current = graph;
            OnGraphChanged?.Invoke();
        }
Esempio n. 16
0
        /// <summary>
        /// Callback for the 'duplicate node' context menu option.
        /// </summary>
        /// <remarks>
        /// Does this belong in the presenter?
        /// </remarks>
        /// <param name="sender">Sending object.</param>
        /// <param name="args">Event data.</param>
        private void OnDuplicateNode(object sender, EventArgs args)
        {
            try
            {
                if (graphView.SelectedObject is DGNode node)
                {
                    List <StateNode>  nodes = Nodes;
                    List <RuleAction> arcs  = Arcs;

                    // Create a copy of the existing node.
                    StateNode newNode = new StateNode(node.ToNode());
                    newNode.Location = new System.Drawing.Point(newNode.Location.X + node.Width / 2, newNode.Location.Y);
                    newNode.Name     = graphView.DirectedGraph.NextNodeID();
                    if (nodeDescriptions.ContainsKey(node.Name))
                    {
                        newNode.Description = nodeDescriptions[node.Name];
                    }

                    nodes.Add(newNode);

                    // Copy all arcs moving to/from the existing node.
                    DirectedGraph graph = graphView.DirectedGraph;
                    foreach (var arc in graphView.DirectedGraph.Arcs.FindAll(arc => arc.SourceName == node.Name))
                    {
                        RuleAction newArc = new RuleAction(arc);
                        newArc.Name       = graph.NextArcID();
                        newArc.SourceName = newNode.Name;
                        if (rules.ContainsKey(arc.Name))
                        {
                            newArc.Conditions = rules[arc.Name];
                        }
                        if (actions.ContainsKey(arc.Name))
                        {
                            newArc.Actions = actions[arc.Name];
                        }
                        arcs.Add(newArc);

                        // Add the arc to the local copy of the directed graph.
                        // Need to do this to ensure that NextArcID() doesn't
                        // generate the same name when we call it multiple times.
                        graph.AddArc(newArc);
                    }
                    foreach (var arc in graphView.DirectedGraph.Arcs.FindAll(arc => arc.DestinationName == graphView.SelectedObject.Name))
                    {
                        RuleAction newArc = new RuleAction(arc);
                        newArc.Name            = graph.NextArcID();
                        newArc.DestinationName = newNode.Name;
                        if (rules.ContainsKey(arc.Name))
                        {
                            newArc.Conditions = rules[arc.Name];
                        }
                        if (actions.ContainsKey(arc.Name))
                        {
                            newArc.Actions = actions[arc.Name];
                        }
                        arcs.Add(newArc);

                        // Add the arc to the local copy of the directed graph.
                        // Need to do this to ensure that NextArcID() doesn't
                        // generate the same name when we call it multiple times.
                        graph.AddArc(newArc);
                    }

                    OnGraphChanged?.Invoke(this, new GraphChangedEventArgs(arcs, nodes));
                }
            }
            catch (Exception err)
            {
                ShowError(err);
            }
        }