dockClass makeDockClass(Vector2 Centre, Vector2 Dimension, DockScript DockScriptReference)
    {
        dockClass newDockClass = new dockClass();

        newDockClass.m_dockCentre    = Centre;
        newDockClass.m_dockDimension = Dimension;
        newDockClass.m_dockObject    = DockScriptReference;

        return(newDockClass);
    }
    public dockClass CheckDocks(Vector2 inPos)
    {
        dockClass closestDock = new dockClass();

        bool success = false;

        for (int i = 0; i < m_dockWindows.Count; ++i)
        {
            // Is this a horizontal or a vertical boundary?
            if (m_dockWindows[i].m_dockDimension.x != 0)
            {
                float yCheck = Mathf.Abs(inPos.y - m_dockWindows[i].m_dockCentre.y);
                if (yCheck < m_dockPixelProximity)
                {
                    //Candidate is in range, is it the closest?
                    if (yCheck <= Mathf.Abs(inPos.y - closestDock.m_dockCentre.y) && yCheck < Mathf.Abs(inPos.x - closestDock.m_dockCentre.x))
                    {
                        closestDock = m_dockWindows[i];
                        success     = true;
                    }
                }
            }
            else
            {
                float xCheck = Mathf.Abs(inPos.x - m_dockWindows[i].m_dockCentre.x);

                if (xCheck < m_dockPixelProximity)
                {
                    //Candidate is in range, is it the closest?
                    if (xCheck <= Mathf.Abs(inPos.x - closestDock.m_dockCentre.x) && xCheck < Mathf.Abs(inPos.y - closestDock.m_dockCentre.y))
                    {
                        closestDock = m_dockWindows[i];
                        success     = true;
                    }
                }
            }
        }

        if (success)
        {
            return(closestDock);
        }
        else
        {
            //Use this clunky method to imply a null return
            dockClass blankDock = new dockClass();
            blankDock.m_dockDimension = new Vector2(-1, 0);

            // Failed (not in dock range - width should never be -1 if dock is possible, so this is a safe way to check
            return(blankDock);
        }
    }
Beispiel #3
0
    // Test if a window is within a dock range, if so Dock and resize scroll area appropriately
    void TestForDock()
    {
        dockClass dockTest = m_windowController.GetComponent <WindowController> ().CheckDocks(new Vector2(m_dragBarCombinedDimensions.position.x + (m_dragBarCombinedDimensions.width / 2), m_dragBarCombinedDimensions.position.y + (m_dragBarCombinedDimensions.height / 2)));

        // Valid rect, possible dock in range - snap to
        if (dockTest.m_dockDimension.x != -1)
        {
            float xDrift = 0;
            float yDrift = 0;


            // BEFORE ACTUAL DOCK OCCURS
            if (dockTest.m_dockDimension.x == 0)
            {
                // Docked right or left, use vertical scroll bar
                m_horizontallyDocked = true;

                m_myTransform.sizeDelta = new Vector2(m_initialWindowDimensions.x, dockTest.m_dockDimension.y);

                //vertical, check if bottom
                xDrift = dockTest.m_dockObject.DockDirection.x;
            }
            else
            {
                // Docked top or bot, use horizontal scroll bar
                m_horizontallyDocked = false;

                m_myTransform.sizeDelta = new Vector2(dockTest.m_dockDimension.x, m_initialWindowDimensions.x + m_dragBarCombinedDimensions.height);

                //horizontal, check if right
                yDrift = dockTest.m_dockObject.DockDirection.y;
            }

            transform.position = new Vector3(dockTest.m_dockCentre.x + (xDrift * (m_myTransform.rect.width / 2)), dockTest.m_dockCentre.y + (yDrift * (m_myTransform.rect.height / 2)), 0);

            m_dragStartVector = Input.mousePosition;

            m_currentState = WindowState.Docked;

            ResizeScrollArea();
            ScrollOffset(m_horizontallyDocked);
        }
    }