public void RemoveEmptyConnection() { if (ImGuiHelper.CurrentActive == this) { if (justStarted) { justStarted = false; } else if (ImGui.IsMouseClicked(0) && CurrentActive != null) { CurrentActive.Active = false; CurrentActive = null; ImGuiHelper.CurrentActive = null; } } }
public void RemoveConnection(ImConnection connection, bool remove = false) { if (ImGuiHelper.CurrentActive == this) { ImGuiHelper.CurrentActive = null; } else { foreach (var to in connection.ConnectedTo) { if (ImGuiHelper.CurrentActive == to.Parent) { ImGuiHelper.CurrentActive = null; break; } } } foreach (var to in connection.ConnectedTo) { to.Active = false; to.ConnectedTo.Remove(connection); to.Parent.CurrentActive = null; } connection.ConnectedTo.Clear(); connection.Active = false; CurrentActive = null; if (remove) { if (connection.Input) { Inputs.Remove(connection); } else { Outputs.Remove(connection); } } }
private unsafe void RenderConnector(ImDrawListPtr list, ImConnection connection, Vector2 connector) { var hovered = IsConnectorHovered(connector); list.AddCircleFilled(connector, connectorRadius, (hovered ? hoveredConnectorColor : connectorColor).PackedValue); if ((connection.ConnectedTo.Count == 0 || connection.Input) && !OnScreen) { return; } if (!OnScreen) { var found = false; foreach (var c in connection.ConnectedTo) { if (c.Parent.OnScreen) { found = true; break; } } if (!found) { return; } } if (hovered) { if (ImGui.IsMouseClicked(0)) { justStarted = true; if (CurrentActive != null && CurrentActive == connection) { CurrentActive.Active = false; CurrentActive = null; } else { if (CurrentActive != null) { CurrentActive.Active = false; } CurrentActive = connection; CurrentActive.Active = true; if (ImGuiHelper.CurrentActive == null) { ImGuiHelper.CurrentActive = this; } else { var active = ImGuiHelper.CurrentActive; ImGuiHelper.CurrentActive = null; if (active.CurrentActive != CurrentActive && active.CurrentActive.Input != CurrentActive.Input) { active.CurrentActive.ConnectedTo.Add(CurrentActive); CurrentActive.ConnectedTo.Add(active.CurrentActive); } active.justStarted = true; active.CurrentActive.Active = false; active.CurrentActive = null; if (CurrentActive != null) { CurrentActive.Active = false; CurrentActive = null; } } } } else if (ImGui.IsMouseClicked(1) && connection.ConnectedTo.Count > 0) { RemoveConnection(connection); } } if (!connection.Input && connection.ConnectedTo.Count > 0) { foreach (var to in connection.ConnectedTo) { var p = to.Parent.Position + to.Offset; DrawHermite(ImGui.GetBackgroundDrawList(), connector, p, 12, hovered || IsConnectorHovered(p) ? hoveredConnectionColor : connectionColor); } } if (CurrentActive == connection) { DrawHermite(ImGui.GetBackgroundDrawList(), connector, ImGui.GetIO().MousePos, 12, hovered ? hoveredConnectionColor : connectionColor); } }