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