示例#1
0
        private void UpdateStatesFromLinks()
        {
            if (links == null)
            {
                return;
            }

            foreach (var link in links)
            {
                if (!started && !starting)
                {
                    return;
                }

                Input  input  = GetInput(link.InputId);
                Output output = GetOutput(link.OutputId);
                input.Value = output.Value;

                //update node internal logic
                Node node = GetInputOwner(input);
                node.CheckInputDataTypeIsCorrect(input);

                if (node.GetNodeOptions().ResetOutputsIfAnyInputIsNull &&
                    node.Inputs.Any(i => !i.IsOptional && i.Value == null))
                {
                    node.ResetOutputs();
                }
                else
                {
                    node.OnInputChange(input);
                }
            }
        }
示例#2
0
        public void OnInputChange(Input input)
        {
            if (!started)
            {
                return;
            }

            Node node = GetInputOwner(input.Id);

            if (node == null)
            {
                return;
            }

            ShowNodeActivity(node);

            if (changedInputsStack.Contains(input))
            {
                try
                {
                    changedInputsStack.Remove(input);
                }
                catch { }
                LogEngineError($"Event dropped in [{node.PanelName}: {node.Type}].");
                return;
            }
            changedInputsStack.Add(input);

            node.CheckInputDataTypeIsCorrect(input);

            OnInputStateUpdated?.Invoke(input);

            if (node.GetNodeOptions().ResetOutputsIfAnyInputIsNull &&
                node.Inputs.Any(i => !i.IsOptional && i.Value == null))
            {
                node.ResetOutputs();
            }
            else
            {
                node.OnInputChange(input);
            }

            try
            {
                if (changedInputsStack.Contains(input))
                {
                    changedInputsStack.Remove(input);
                }
            }
            catch { }
        }