public void OnClickedHook(HookAttachment hookWidget) { if (CurrentSelectedHook == null) { CurrentSelectedHook = hookWidget; CreatingConnection = CurrentSelectedHook.Hook.CreateConnection(); CurrentConnectionWidget = Instantiate(ConnectionElement.Get(), workspace).GetComponent <ConnectionAttachment> (); CurrentConnectionWidget.Initialize(CreatingConnection, CurrentSelectedHook.image.color); } else { if (CreatingConnection.Connect(CurrentSelectedHook.Hook, hookWidget.Hook)) { CurrentConnectionWidget.Connect(CurrentSelectedHook, hookWidget); } else { if (CurrentSelectedHook.Hook.IsConnectedTo(hookWidget.Hook)) { CurrentSelectedHook.Hook.GetConnectionTo(hookWidget.Hook).Delete(); } Destroy(CurrentConnectionWidget.gameObject); } CurrentSelectedHook = null; CurrentConnectionWidget = null; CreatingConnection = null; } }
public override void LoadFrom(Node source) { void InstantiateValueHooks(IEnumerable <IVariableHook> hooks, GameObject prefabObject, Transform parent) { foreach (var hook in hooks) { InstantiateHook(hook, prefabObject, parent, TypeColors.GetColor(hook.ValueType)); } } void InstantiateHook(IHook hook, GameObject prefabObject, Transform parent, Color color) { GameObject newHookWidget = Instantiate(prefabObject, parent); HookAttachment hookAttachment = newHookWidget.GetComponent <HookAttachment>(); hookAttachment.Initialize(hook, color); } if (source is IHasInput input) { InstantiateValueHooks(input.InputHooks, HookAttachment.LeftHookWidget.Get(), inputSide); } else { Destroy(inputSide.gameObject); } if (source is IHasOutput output) { InstantiateValueHooks(output.OutputHooks, HookAttachment.RightHookWidget.Get(), outputSide); } else { Destroy(outputSide.gameObject); } if (source is IFlowNode flowNode) { foreach (var hook in flowNode.PossibleRoutes) { InstantiateHook(hook, FlowOutputHook.Get(), flowSide, Color.white); } } else { Destroy(flowSide.gameObject); } }
public void CreateValueWidgetFor(HookAttachment inputWidget, InputHook inputHook) { GameObject widgetPrefab = FindCorrectValueWidget(inputHook.ValueType); object value = inputHook.ValueType.IsValueType ? Activator.CreateInstance(inputHook.ValueType) : null; Console.WriteLine(value); ValueNode valueNode = new ValueNode().SetPosition(new VectorPosition(0, 0)).SetProgram(ProgramEditor.CurrentEditor.CurrentProgram) as ValueNode; valueNode.InitChildren(); valueNode.SetValue(value).SetType(inputHook.ValueType); GameObject newWidget = Instantiate(widgetPrefab, workspace.transform); newWidget.transform.position = Input.mousePosition; IValueWidget widget = newWidget.GetComponent <IValueWidget> (); widget.Initialize(valueNode); OnClickedHook(widget.OutputHookWidget); }