void Start() { menuButton = null; dragMenuButton = null; XmlElement unityElem = getReal3D.Plugin.getApplicationConfigXml(); if (unityElem == null) { return; } XmlNodeList menus = unityElem.GetElementsByTagName("menu"); if (menus.Count == 0) { return; } XmlElement menu = menus.Item(0) as XmlElement; width = readFromAttribute(menu, "width"); depth = readFromAttribute(menu, "depth"); maxRotationSpeed = readFromAttribute(menu, "max_rotation_speed"); maxTranslationSpeed = readFromAttribute(menu, "max_translation_speed"); menuButton = readStringFromAttribute(menu, "button"); dragMenuButton = readStringFromAttribute(menu, "drag_button"); if (menuButton != null) { WandEventModule wandEventModule = FindObjectOfType(typeof(WandEventModule)) as WandEventModule; wandEventModule.submitButtonName = menuButton; } }
void Start() { m_canvas = GetComponent<Canvas>() as Canvas; m_rectTransform = gameObject.transform as RectTransform; MenuSettings ms = GetComponentInParent<MenuSettings>() as MenuSettings; if(ms.dragMenuButton != null) { m_wandButton = ms.dragMenuButton; } m_originalParent = transform.parent; //WandEventModule wandEventModule = FindObjectOfType(typeof(WandEventModule)) as WandEventModule; wandEventModule = FindObjectOfType(typeof(WandEventModule)) as WandEventModule; m_sameButtonAsEventModule = wandEventModule.submitButtonName == m_wandButton; }
// Process is called by UI system to process events public override void Process() { _singleton = this; // send update events if there is a selected object - this is important for InputField to receive keyboard events SendUpdateEventToSelectedObject(); // see if there is a UI element that is currently being looked at PointerEventData lookData = GetLookPointerEventData(); currentLook = lookData.pointerCurrentRaycast.gameObject; // handle enter and exit events (highlight) // using the function that is already defined in BaseInputModule HandlePointerExitAndEnter(lookData, currentLook); // update cursor UpdateCursor(lookData); // button down handling _buttonUsed = false; if (getReal3D.Input.GetButtonDown(submitButtonName)) { ClearSelection(); lookData.pressPosition = lookData.position; lookData.pointerPressRaycast = lookData.pointerCurrentRaycast; lookData.pointerPress = null; if (currentLook != null) { currentPressed = currentLook; GameObject newPressed = null; newPressed = ExecuteEvents.ExecuteHierarchy(currentPressed, lookData, ExecuteEvents.pointerDownHandler); if (newPressed == null) { // some UI elements might only have click handler and not pointer down handler newPressed = ExecuteEvents.ExecuteHierarchy(currentPressed, lookData, ExecuteEvents.pointerClickHandler); if (newPressed != null) { currentPressed = newPressed; } } else { currentPressed = newPressed; // we want to do click on button down at same time, unlike regular mouse processing // which does click when mouse goes up over same object it went down on // reason to do this is head tracking might be jittery and this makes it easier to click buttons ExecuteEvents.Execute(newPressed, lookData, ExecuteEvents.pointerClickHandler); } if (newPressed != null) { lookData.pointerPress = newPressed; currentPressed = newPressed; Select(currentPressed); _buttonUsed = true; } if (ExecuteEvents.Execute(currentPressed, lookData, ExecuteEvents.beginDragHandler) || true) { lookData.pointerDrag = currentPressed; currentDragging = currentPressed; } } } // have to handle button up even if looking away if (getReal3D.Input.GetButtonUp(submitButtonName)) { if (currentDragging) { ExecuteEvents.Execute(currentDragging, lookData, ExecuteEvents.endDragHandler); if (currentLook != null) { ExecuteEvents.ExecuteHierarchy(currentLook, lookData, ExecuteEvents.dropHandler); } lookData.pointerDrag = null; currentDragging = null; } if (currentPressed) { ExecuteEvents.Execute(currentPressed, lookData, ExecuteEvents.pointerUpHandler); lookData.rawPointerPress = null; lookData.pointerPress = null; currentPressed = null; } } // drag handling if (currentDragging != null) { ExecuteEvents.Execute(currentDragging, lookData, ExecuteEvents.dragHandler); } }
// Process is called by UI system to process events public override void Process() { _singleton = this; // send update events if there is a selected object - this is important for InputField to receive keyboard events SendUpdateEventToSelectedObject(); // see if there is a UI element that is currently being looked at PointerEventData lookData = GetLookPointerEventData(); currentLook = lookData.pointerCurrentRaycast.gameObject; // handle enter and exit events (highlight) // using the function that is already defined in BaseInputModule HandlePointerExitAndEnter(lookData, currentLook); // update cursor UpdateCursor(lookData); // button down handling _buttonUsed = false; if(getReal3D.Input.GetButtonDown(submitButtonName)) { ClearSelection(); lookData.pressPosition = lookData.position; lookData.pointerPressRaycast = lookData.pointerCurrentRaycast; lookData.pointerPress = null; if(currentLook != null) { currentPressed = currentLook; GameObject newPressed = null; newPressed = ExecuteEvents.ExecuteHierarchy(currentPressed, lookData, ExecuteEvents.pointerDownHandler); if(newPressed == null) { // some UI elements might only have click handler and not pointer down handler newPressed = ExecuteEvents.ExecuteHierarchy(currentPressed, lookData, ExecuteEvents.pointerClickHandler); if(newPressed != null) { currentPressed = newPressed; } } else { currentPressed = newPressed; // we want to do click on button down at same time, unlike regular mouse processing // which does click when mouse goes up over same object it went down on // reason to do this is head tracking might be jittery and this makes it easier to click buttons ExecuteEvents.Execute(newPressed, lookData, ExecuteEvents.pointerClickHandler); } if(newPressed != null) { lookData.pointerPress = newPressed; currentPressed = newPressed; Select(currentPressed); _buttonUsed = true; } if(ExecuteEvents.Execute(currentPressed, lookData, ExecuteEvents.beginDragHandler) || true) { lookData.pointerDrag = currentPressed; currentDragging = currentPressed; } } } // have to handle button up even if looking away if(getReal3D.Input.GetButtonUp(submitButtonName)) { if(currentDragging) { ExecuteEvents.Execute(currentDragging, lookData, ExecuteEvents.endDragHandler); if(currentLook != null) { ExecuteEvents.ExecuteHierarchy(currentLook, lookData, ExecuteEvents.dropHandler); } lookData.pointerDrag = null; currentDragging = null; } if(currentPressed) { ExecuteEvents.Execute(currentPressed, lookData, ExecuteEvents.pointerUpHandler); lookData.rawPointerPress = null; lookData.pointerPress = null; currentPressed = null; } } // drag handling if(currentDragging != null) { ExecuteEvents.Execute(currentDragging, lookData, ExecuteEvents.dragHandler); } }