internal INode GetNodeInstance(DataNode node)
        {
            var ret   = Nodes.FirstOrDefault(d => d.Topic == node.Topic);
            var isNew = false;

            if (ret == null)
            {
                ret = Helpers.StateHelper.Instance.CreateNodeFromData(node);

                isNew = true;
            }


            ret.Parse(node);
            if (isNew)
            {
                Nodes.Add(ret);
                AllNodesContainer.Nodes.Add(ret);
            }

            NodeChanged?.Invoke(ret);


            return(ret);
        }
Exemple #2
0
        Task CreateNodeAsync(byte[] newBytes, string newPath)
        {
            return(Task.Run(() =>
            {
                Solid csg;
                if (newBytes.Length > 0)
                {
                    switch (Path.GetExtension(newPath).ToLowerInvariant())
                    {
                    case ".cs":
                        csg = CreateCsgFromCSharp(newBytes, newPath);
                        break;

                    default:
                        throw new Exception($"Don't know how to open {newPath}.");
                    }
                }
                else
                {
                    csg = new Solid();
                }
                var newNode = csg.ToSCNNode();

                if (path == newPath && Object.ReferenceEquals(bytes, newBytes))
                {
                    node = newNode;
                    NodeChanged?.Invoke();
                }
            }));
        }
Exemple #3
0
 public void RaiseNodeChanged(BuildOutputNode node)
 {
     if (node != null)
     {
         NodeChanged?.Invoke(this, new TreeNodeEventArgs(node));
     }
 }
Exemple #4
0
        ////////
        //
        //  IToolServices public API implementation
        //
        //  - this is intended to be used only by ITools.
        ////////

        public void SetNode(GameTreeNode node)
        {
            if (node == null)
            {
                throw new ArgumentException($"{nameof(node)} cant be null");
            }

            Node = node;
            NodeChanged?.Invoke(this, node);
        }
Exemple #5
0
        private void OnNodeChanged(object sender, NodeChangedEventArgs nodeChangedEventArgs)
        {
            if (IsLoading)
            {
                return;
            }

            NodeChanged?.Invoke(sender, nodeChangedEventArgs);
            OnGraphChanged(nameof(Members));
        }
Exemple #6
0
 private void _ports_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
 {
     if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
     {
         NodeChanged?.Invoke(this, new NodeChangedEventArgs(NodeChangeEventType.PortAdded));
     }
     else if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
     {
         NodeChanged?.Invoke(this, new NodeChangedEventArgs(NodeChangeEventType.PortRemoved));
     }
 }
Exemple #7
0
 /// <summary>
 /// Processes the specified event.
 /// </summary>
 /// <param name="event">the watched event.</param>
 /// <returns></returns>
 public override Task process(WatchedEvent @event)
 {
     if (@event.get_Type() == Event.EventType.None)
     {
         StateChanged?.Invoke(@event);
     }
     else
     {
         NodeChanged?.Invoke(@event);
     }
     return(Task.CompletedTask);
 }
Exemple #8
0
        /// <summary>
        /// Called when public properties changed.
        /// </summary>
        /// <param name="name">The name of the property.</param>
        public void OnPropertyChanged([CallerMemberName] string name = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));

            if (name == nameof(IsSelected))
            {
                SelectionChanged?.Invoke(this, EventArgs.Empty);
            }
            else if (name == nameof(Name))
            {
                NodeChanged?.Invoke(this, new NodeChangedEventArgs(NodeChangeEventType.NodeNameChanged));
            }
            else if (name == nameof(Comment))
            {
                NodeChanged?.Invoke(this, new NodeChangedEventArgs(NodeChangeEventType.NodeCommentChanged));
            }
        }
Exemple #9
0
 private void _ports_PortChanged(object sender, PortChangedEventArgs e)
 {
     if (e.PropertyName == nameof(IPort.Text))
     {
         NodeChanged?.Invoke(this, new NodeChangedEventArgs(NodeChangeEventType.PortTextChanged));
     }
     if (e.PropertyName == nameof(IPort.Comment))
     {
         NodeChanged?.Invoke(this, new NodeChangedEventArgs(NodeChangeEventType.PortCommentChanged));
     }
     else if (e.PropertyName == nameof(IPort.Value))
     {
         NodeChanged?.Invoke(this, new NodeChangedEventArgs(NodeChangeEventType.PortValueChanged));
     }
     else if (e.PropertyName == nameof(IPort.ConnectedPorts))
     {
         NodeChanged?.Invoke(this, new NodeChangedEventArgs(NodeChangeEventType.PortValueChanged));
     }
 }
Exemple #10
0
 protected virtual void OnNodeChanged(TreeNodeChangedEventArgs <T> eventArgs)
 {
     NodeChanged?.Invoke(this, eventArgs);
 }
Exemple #11
0
 internal void RaiseNodeChanged(FileSystemEntryId id, long size, double start, double end)
 {
     NodeChanged?.Invoke(id, size, start, end);
 }
Exemple #12
0
 private void OnBoardChanged()
 {
     NodeChanged?.Invoke(this, GameTreeNode);
 }
Exemple #13
0
 private void _ports_PortConnected(object sender, IPort e)
 {
     NodeChanged?.Invoke(this, new NodeChangedEventArgs(NodeChangeEventType.PortDisconnected, e));
 }
Exemple #14
0
 void IEventSink.NotifyNodeChanged(DataNode node, int index)
 {
     NodeChanged?.Invoke(this, new TreeNodeEventArgs(node, index));
 }
Exemple #15
0
        /// <summary>
        /// Called after the current node or the index of the current dialogue entry has changed.
        /// </summary>
        /// <remarks>
        /// Trigger events according to the current game state and how it is changed
        /// </remarks>
        /// <param name="nodeChanged"></param>
        /// <param name="dialogueChanged"></param>
        /// <param name="firstEntryOfNode"></param>
        /// <param name="dialogueStepped"></param>
        private void UpdateGameState(bool nodeChanged, bool dialogueChanged, bool firstEntryOfNode,
                                     bool dialogueStepped)
        {
            // Debug.LogFormat("UpdateGameState begin {0} {1} {2}", stepNumFromLastCheckpoint, restrainCheckpoint, forceCheckpoint);

            if (nodeChanged)
            {
                // Debug.Log($"Nova: node changed to {currentNode.name}");

                if (firstEntryOfNode)
                {
                    EnsureCheckpoint();                   // always get a checkpoint at the beginning of the node
                }
                NodeChanged?.Invoke(new NodeChangedData(currentNode.name));
            }

            if (dialogueChanged)
            {
                this.RuntimeAssert(currentIndex >= 0 && currentIndex < currentNode.dialogueEntryCount,
                                   "Dialogue index out of range.");

                if (!firstEntryOfNode && dialogueStepped)
                {
                    stepNumFromLastCheckpoint++;
                }

                var gameStateRestoreEntry = checkpointManager.IsReached(currentNode.name, currentIndex, variables.hash);
                if (gameStateRestoreEntry == null)
                {
                    // Tell the checkpoint manager a new dialogue entry has been reached
                    checkpointManager.SetReached(currentNode.name, currentIndex, variables,
                                                 GetGameStateStepRestoreEntry());
                }

                // Change states after creating or restoring from checkpoint
                if (shouldSaveRealCheckpoint)
                {
                    stepNumFromLastCheckpoint = 0;
                }

                if (gameStateRestoreEntry != null)
                {
                    this.RuntimeAssert(stepNumFromLastCheckpoint == gameStateRestoreEntry.stepNumFromLastCheckpoint,
                                       $"StepNumFromLastCheckpoint mismatch: {stepNumFromLastCheckpoint} {gameStateRestoreEntry.stepNumFromLastCheckpoint}");
                    this.RuntimeAssert(restrainCheckpoint == gameStateRestoreEntry.restrainCheckpointNum,
                                       $"RestrainCheckpointNum mismatch: {restrainCheckpoint} {gameStateRestoreEntry.restrainCheckpointNum}");
                }

                if (checkpointRestrained)
                {
                    restrainCheckpoint--;
                    if (restrainCheckpoint == 1)
                    {
                        Debug.LogWarning($"Nova: restrainCheckpoint reaches 1");
                    }
                }

                // As the action for this dialogue will be re-run, it's fine to just reset forceCheckpoint to false
                forceCheckpoint = false;

                DialogueWillChange?.Invoke();

                state = State.ActionRunning;
                lastVariablesHashBeforeAction = variables.hash;
                currentDialogueEntry          = currentNode.GetDialogueEntryAt(currentIndex);
                currentDialogueEntry.ExecuteAction();
                StartCoroutine(WaitActionEnd(gameStateRestoreEntry != null));
            }

            // Debug.LogFormat("UpdateGameState end {0} {1} {2} {3}", stepNumFromLastCheckpoint, restrainCheckpoint, forceCheckpoint, currentDialogueEntry?.displayData.FormatNameDialogue());
        }