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); } } }
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 { } }