private void UpdateFocusExit(AFocuser focuser) { FocusArgs arg = new FocusArgs(); arg.Focuser = focuser; for (int index = 0; index < focuser.FocusExitList.Count; index++) { GameObject obj = focuser.FocusExitList[index]; arg.CurNumFocusers = UpdateObjectCount(obj, -1); obj.SendMessage("FocusExit", arg, SendMessageOptions.DontRequireReceiver); } focuser.FocusExitList.Clear(); }
//---------------------------------------------------------------------- #region Private Functions /// <summary> /// Update the game object being focused on /// </summary> private void UpdateFocus() { m_PrevFocusedList.AddRange(m_FocusedList); m_FocusedList.Clear(); for (int index = 0; index < m_Focusers.Length; index++) { AFocuser focuser = m_Focusers[index]; if (focuser != null && focuser.CanInteract) { this.UpdateFocusList(focuser); } } for (int index = 0; index < m_Focusers.Length; index++) { AFocuser focuser = m_Focusers[index]; if (focuser != null && focuser.CanInteract) { this.UpdateFocusEnter(focuser); } } for (int index = 0; index < m_Focusers.Length; index++) { AFocuser focuser = m_Focusers[index]; if (focuser != null && focuser.CanInteract) { this.UpdateFocusExit(focuser); } } FocusArgs args = new FocusArgs(); for (int index = 0; index < m_Focusers.Length; index++) { AFocuser focuser = m_Focusers[index]; if (focuser != null && focuser.CanInteract && focuser.PrimeFocus != focuser.OldPrimeFocus) { args.Focuser = focuser; if (focuser.OldUIInteractibleFocus != focuser.UIInteractibleFocus) { PointerEventData pointerEventData = focuser.GetPointerData(); ExecuteUIFocusEvent(focuser.OldUIInteractibleFocus, pointerEventData, ExecuteEvents.pointerExitHandler); pointerEventData.pointerEnter = focuser.UIInteractibleFocus; ExecuteUIFocusEvent(focuser.UIInteractibleFocus, pointerEventData, ExecuteEvents.pointerEnterHandler); } // Invoke events if (OnFocusExit != null && focuser.OldPrimeFocus != null) { args.CurNumFocusers = m_ObjectFocusCount[focuser.OldPrimeFocus]; OnFocusExit(focuser.OldPrimeFocus, args); } if (OnFocusEnter != null && focuser.PrimeFocus != null) { args.CurNumFocusers = m_ObjectFocusCount[focuser.PrimeFocus]; OnFocusEnter(focuser.PrimeFocus, args); } } } // Clean up m_ObjectFocusCount.Clear(); m_PrevFocusedList.Clear(); }