Ejemplo n.º 1
0
 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;
         }
     }
 }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }