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(); }
/// <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); } }
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); }
public void AddNode(INode n) { Nodes.Add(n); OnGraphChanged?.Invoke(); OnNodeAdded?.Invoke(n); n.OnConnectorAdded += ConnectorAdded; n.OnConnectorRemoved += ConnectorRemoved; n.OnNodeRemoved += RemoveNode; }
/// <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); } }
public void CreateNewGraph() { Connections.Clear(); Nodes.Clear(); CGraph oldGraph = ScriptGraph; ScriptGraph = new CGraph(); OnGraphChanged?.Invoke(this, oldGraph, ScriptGraph); }
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); }
/// <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); } }
/// <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); } }
/// <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); } }
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(); } }
/// <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); } }
/// <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); } }
/// <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(); }
/// <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); } }