private void RaycastFirst(ref int raydepth, ref bool behindGui) { Ray pointerRay = new Ray(transform.position, transform.forward); RaycastHit hit; if (Physics.Raycast(pointerRay, out hit, rayDistance, mask.value)) { // Something hit, handle Enter and Over events PointerParameters pp; if (!IsActive(hit, out pp)) { if (HasActives()) { InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this)); if (clickLock.Contains(activeTarget[0][0].target)) { clickLock.Remove(activeTarget[0][0].target); } ClearActives(); } pp = new PointerParameters(hit, raydepth, this, behindGui); AddActive(pp); InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui)); } else { var npp = new BasePointerParameters(hit, raydepth, this, behindGui); InvokePointerOver(0, npp); if ((npp.time - pp.time) > clickTimeSpan && !clickLock.Contains(npp.target)) { clickLock.Add(npp.target); InvokePointerClicked(0, npp); } } raydepth++; if (isGUIPointer) { behindGui = true; } } else { // Nothing hit, report Exit event if active objects if (HasActives()) { InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this)); if (clickLock.Contains(activeTarget[0][0].target)) { clickLock.Remove(activeTarget[0][0].target); } ClearActives(); } } }
void HandleOnPointerClicked(int inputIndex, BasePointerParameters pointerParams, BasePointer sender) { IPointerClickHandler[] enterHandlers = pointerParams.target.GetComponents <IPointerClickHandler>(); foreach (var handler in enterHandlers) { PointerEventData data = new PointerEventData(eventSystem); handler.OnPointerClick(data); } }
void HandleOnPointerExit(int inputIndex, BasePointerParameters pointerParams, BasePointer sender) { IPointerExitHandler[] enterHandlers = pointerParams.target.GetComponents <IPointerExitHandler>(); foreach (var handler in enterHandlers) { PointerEventData data = new PointerEventData(null); handler.OnPointerExit(data); } }
private void RaycastAll(ref int raydepth, ref bool behindGui) { Ray pointerRay = new Ray(transform.position, transform.forward); RaycastHit[] raycastHits = Physics.RaycastAll(pointerRay, rayDistance, mask.value); List <RaycastHit> tempActives = new List <RaycastHit>(); foreach (var hit in raycastHits) { PointerParameters pp; if (!IsActive(hit, out pp)) { pp = new PointerParameters(hit, raydepth, this, behindGui); AddActive(pp); InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui)); } else { var npp = new BasePointerParameters(hit, raydepth, this, behindGui); InvokePointerOver(0, npp); if ((npp.time - pp.time) > clickTimeSpan && !clickLock.Contains(npp.target)) { clickLock.Add(npp.target); InvokePointerClicked(0, npp); } } tempActives.Add(hit); //Raise raycounter raydepth++; } //If we hit something and we are a GUIpointer then set behindGui true if (tempActives.Count > 0 && isGUIPointer) { behindGui = true; } List <PointerParameters> leftTargets = RemoveActivesExcept(tempActives); foreach (var tpp in leftTargets) { InvokePointerExit(0, new BasePointerParameters(tpp.target, this)); if (clickLock.Contains(tpp.target)) { clickLock.Remove(tpp.target); } } }
private void RaycastFirst(ref int raydepth, ref bool behindGui) { Ray gearRay = new Ray(transform.position, transform.forward); InvokeInputRayUpdate(0, gearRay); Debug.DrawRay(gearRay.origin, gearRay.direction * 50, Color.red); RaycastHit hit; if (Physics.Raycast(gearRay, out hit, rayDistance, mask.value)) { // Something hit, handle Enter and Over events PointerParameters pp; if (!IsActive(hit, out pp)) { if (HasActives()) { InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this)); ClearActives(); } pp = new PointerParameters(hit, raydepth, this, behindGui); AddActive(pp); InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui)); } else { var npp = new BasePointerParameters(hit, raydepth, this, behindGui); InvokePointerOver(0, npp); } raydepth++; if (isGUIPointer) { behindGui = true; } } else { // Nothing hit, report Exit event if active objects if (HasActives()) { InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this)); ClearActives(); } } }
private void RaycastFirst(ref int raydepth, ref bool behindGui) { Ray pointerRay = GetComponent <Camera>().ScreenPointToRay(MouseInput.position); InvokeInputRayUpdate(0, pointerRay); RaycastHit hit; if (Physics.Raycast(pointerRay, out hit, rayDistance, mask.value)) { // Something hit, handle Enter and Over events PointerParameters pp; if (!IsActive(hit, out pp)) { if (HasActives()) { InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this)); ClearActives(); } pp = new PointerParameters(hit, raydepth, this, behindGui); AddActive(pp); InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui)); } else { var npp = new BasePointerParameters(hit, raydepth, this, behindGui); InvokePointerOver(0, npp); } raydepth++; if (isGUIPointer) { behindGui = true; } } else { // Nothing hit, report Exit event if active objects if (HasActives()) { InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this)); ClearActives(); } } }
private void RaycastAll(ref int raydepth, ref bool behindGui) { Ray gearRay = new Ray(transform.position, transform.forward); InvokeInputRayUpdate(0, gearRay); Debug.DrawRay(gearRay.origin, gearRay.direction * 50, Color.red); RaycastHit[] raycastHits = Physics.RaycastAll(gearRay, rayDistance, mask.value); List <RaycastHit> tempActives = new List <RaycastHit>(); foreach (var hit in raycastHits) { PointerParameters pp; if (!IsActive(hit, out pp)) { pp = new PointerParameters(hit, raydepth, this, behindGui); AddActive(pp); InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui)); } else { var npp = new BasePointerParameters(hit, raydepth, this, behindGui); InvokePointerOver(0, npp); } tempActives.Add(hit); //Raise raycounter raydepth++; } //If we hit something and we are a GUIpointer then set behindGui true if (tempActives.Count > 0 && isGUIPointer) { behindGui = true; } List <PointerParameters> leftTargets = RemoveActivesExcept(tempActives); foreach (var tpp in leftTargets) { InvokePointerExit(0, new BasePointerParameters(tpp.target, this)); } }
private void RaycastAll(ref int raydepth, ref bool behindGui) { Ray pointerRay = GetComponent <Camera>().ScreenPointToRay(MouseInput.position); InvokeInputRayUpdate(0, pointerRay); RaycastHit[] raycastHits = Physics.RaycastAll(pointerRay, rayDistance, mask.value); List <RaycastHit> tempActives = new List <RaycastHit>(); foreach (var hit in raycastHits) { PointerParameters pp; if (!IsActive(hit, out pp)) { pp = new PointerParameters(hit, raydepth, this, behindGui); AddActive(pp); InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui)); } else { var npp = new BasePointerParameters(hit, raydepth, this, behindGui); InvokePointerOver(0, npp); } tempActives.Add(hit); //Raise raycounter raydepth++; } //If we hit something and we are a GUIpointer then set behindGui true if (tempActives.Count > 0 && isGUIPointer) { behindGui = true; } List <PointerParameters> leftTargets = RemoveActivesExcept(tempActives); foreach (var tpp in leftTargets) { InvokePointerExit(0, new BasePointerParameters(tpp.target, this)); } }
void HandleOnPointerOver(int inputIndex, BasePointerParameters pointerParams, BasePointer sender) { }
void HandleOnPointerClicked(int inputIndex, BasePointerParameters pointerParams, BasePointer sender) { pointerParams.target.SendMessage("OnClick", null, SendMessageOptions.DontRequireReceiver); }
void HandleOnPointerExit(int inputIndex, BasePointerParameters pointerParams, BasePointer sender) { pointerParams.target.SendMessage("OnHover", false, SendMessageOptions.DontRequireReceiver); }