public void OnBeginDrag(PointerEventData eventData) { if (pointId == eventData.pointerId) { onMoveStart.Invoke(); } }
void Update() { var oldAxis = tmpAxis; tmpAxis = thumbPosition / GetRadius(); if (!tmpAxis.x.RoundEquals(0) || !tmpAxis.y.RoundEquals(0)) { if (oldAxis == Vector2.zero) { OnMoveStart.Invoke(); } OnMove.Invoke(tmpAxis); } else if (tmpAxis.x.RoundEquals(0) && tmpAxis.y.RoundEquals(0) && oldAxis != Vector2.zero) { OnMoveEnd.Invoke(); } }
private void UpdateJoystick() { #region Unity axes if (enableKeySimulation && !isOnTouch && _activated && _visible) { float x = Input.GetAxis(axisX.unityAxis); float y = Input.GetAxis(axisY.unityAxis); if (!isNoReturnThumb) { thumb.localPosition = Vector2.zero; } isOnDrag = false; if (x != 0) { isOnDrag = true; thumb.localPosition = new Vector2(GetRadius() * x, thumb.localPosition.y); } if (y != 0) { isOnDrag = true; thumb.localPosition = new Vector2(thumb.localPosition.x, GetRadius() * y); } thumbPosition = thumb.localPosition; } #endregion // Computejoystick value OldTmpAxis.x = axisX.axisValue; OldTmpAxis.y = axisY.axisValue; tmpAxis = thumbPosition / GetRadius(); axisX.UpdateAxis(tmpAxis.x, isOnDrag, ETCBase.ControlType.Joystick, true); axisY.UpdateAxis(tmpAxis.y, isOnDrag, ETCBase.ControlType.Joystick, true); #region Move event if ((axisX.axisValue != 0 || axisY.axisValue != 0) && OldTmpAxis == Vector2.zero) { onMoveStart.Invoke(); } if (axisX.axisValue != 0 || axisY.axisValue != 0) { if (!isTurnAndMove) { // X axis if (axisX.actionOn == ETCAxis.ActionOn.Down && (axisX.axisState == ETCAxis.AxisState.DownLeft || axisX.axisState == ETCAxis.AxisState.DownRight)) { axisX.DoDirectAction(); } else if (axisX.actionOn == ETCAxis.ActionOn.Press) { axisX.DoDirectAction(); } // Y axis if (axisY.actionOn == ETCAxis.ActionOn.Down && (axisY.axisState == ETCAxis.AxisState.DownUp || axisY.axisState == ETCAxis.AxisState.DownDown)) { axisY.DoDirectAction(); } else if (axisY.actionOn == ETCAxis.ActionOn.Press) { axisY.DoDirectAction(); } } else { DoTurnAndMove(); } onMove.Invoke(new Vector2(axisX.axisValue, axisY.axisValue)); onMoveSpeed.Invoke(new Vector2(axisX.axisSpeedValue, axisY.axisSpeedValue)); } else if (axisX.axisValue == 0 && axisY.axisValue == 0 && OldTmpAxis != Vector2.zero) { onMoveEnd.Invoke(); } if (!isTurnAndMove) { if (axisX.axisValue == 0 && axisX.directCharacterController) { if (!axisX.directCharacterController.isGrounded && axisX.isLockinJump) { axisX.DoDirectAction(); } } if (axisY.axisValue == 0 && axisY.directCharacterController) { if (!axisY.directCharacterController.isGrounded && axisY.isLockinJump) { axisY.DoDirectAction(); } } } else { if ((axisX.axisValue == 0 && axisY.axisValue == 0) && axisX.directCharacterController) { if (!axisX.directCharacterController.isGrounded && tmLockInJump) { DoTurnAndMove(); } } } #endregion #region Down & press event float coef = 1; if (axisX.invertedAxis) { coef = -1; } if (Mathf.Abs(OldTmpAxis.x) < axisX.axisThreshold && Mathf.Abs(axisX.axisValue) >= axisX.axisThreshold) { if (axisX.axisValue * coef > 0) { axisX.axisState = ETCAxis.AxisState.DownRight; OnDownRight.Invoke(); } else if (axisX.axisValue * coef < 0) { axisX.axisState = ETCAxis.AxisState.DownLeft; OnDownLeft.Invoke(); } else { axisX.axisState = ETCAxis.AxisState.None; } } else if (axisX.axisState != ETCAxis.AxisState.None) { if (axisX.axisValue * coef > 0) { axisX.axisState = ETCAxis.AxisState.PressRight; OnPressRight.Invoke(); } else if (axisX.axisValue * coef < 0) { axisX.axisState = ETCAxis.AxisState.PressLeft; OnPressLeft.Invoke(); } else { axisX.axisState = ETCAxis.AxisState.None; } } coef = 1; if (axisY.invertedAxis) { coef = -1; } if (Mathf.Abs(OldTmpAxis.y) < axisY.axisThreshold && Mathf.Abs(axisY.axisValue) >= axisY.axisThreshold) { if (axisY.axisValue * coef > 0) { axisY.axisState = ETCAxis.AxisState.DownUp; OnDownUp.Invoke(); } else if (axisY.axisValue * coef < 0) { axisY.axisState = ETCAxis.AxisState.DownDown; OnDownDown.Invoke(); } else { axisY.axisState = ETCAxis.AxisState.None; } } else if (axisY.axisState != ETCAxis.AxisState.None) { if (axisY.axisValue * coef > 0) { axisY.axisState = ETCAxis.AxisState.PressUp; OnPressUp.Invoke(); } else if (axisY.axisValue * coef < 0) { axisY.axisState = ETCAxis.AxisState.PressDown; OnPressDown.Invoke(); } else { axisY.axisState = ETCAxis.AxisState.None; } } #endregion }
private void UpdateJoystick() { #region dynamic joystick if (joystickType == JoystickType.Dynamic && !_visible && _activated) { Vector2 localPosition = Vector2.zero; Vector2 screenPosition = Vector2.zero; if (isTouchOverJoystickArea(ref localPosition, ref screenPosition)) { GameObject overGO = GetFirstUIElement(screenPosition); if (overGO == null || (allowJoystickOverTouchPad && overGO.GetComponent <ETCTouchPad>()) || (overGO != null && overGO.GetComponent <ETCArea>())) { cachedRectTransform.anchoredPosition = localPosition; visible = true; } } } #endregion #region Key simulation if (enableKeySimulation && !isOnTouch && _activated && _visible) { thumb.localPosition = Vector2.zero; isOnDrag = false; if (Input.GetKey(axisX.positivekey)) { isOnDrag = true; thumb.localPosition = new Vector2(GetRadius(), thumb.localPosition.y); } else if (Input.GetKey(axisX.negativeKey)) { isOnDrag = true; thumb.localPosition = new Vector2(-GetRadius(), thumb.localPosition.y); } if (Input.GetKey(axisY.positivekey)) { isOnDrag = true; thumb.localPosition = new Vector2(thumb.localPosition.x, GetRadius()); } else if (Input.GetKey(axisY.negativeKey)) { isOnDrag = true; thumb.localPosition = new Vector2(thumb.localPosition.x, -GetRadius()); } thumbPosition = thumb.localPosition; } #endregion // Computejoystick value OldTmpAxis.x = axisX.axisValue; OldTmpAxis.y = axisY.axisValue; tmpAxis = thumbPosition / GetRadius(); axisX.UpdateAxis(tmpAxis.x, isOnDrag, ETCBase.ControlType.Joystick, true); axisY.UpdateAxis(tmpAxis.y, isOnDrag, ETCBase.ControlType.Joystick, true); axisX.DoGravity(); axisY.DoGravity(); #region Move event if ((axisX.axisValue != 0 || axisY.axisValue != 0) && OldTmpAxis == Vector2.zero) { onMoveStart.Invoke(); } if (axisX.axisValue != 0 || axisY.axisValue != 0) { // X axis if (axisX.actionOn == ETCAxis.ActionOn.Down && (axisX.axisState == ETCAxis.AxisState.DownLeft || axisX.axisState == ETCAxis.AxisState.DownRight)) { axisX.DoDirectAction(); } else if (axisX.actionOn == ETCAxis.ActionOn.Press) { axisX.DoDirectAction(); } // Y axis if (axisY.actionOn == ETCAxis.ActionOn.Down && (axisY.axisState == ETCAxis.AxisState.DownUp || axisY.axisState == ETCAxis.AxisState.DownDown)) { axisY.DoDirectAction(); } else if (axisY.actionOn == ETCAxis.ActionOn.Press) { axisY.DoDirectAction(); } onMove.Invoke(new Vector2(axisX.axisValue, axisY.axisValue)); onMoveSpeed.Invoke(new Vector2(axisX.axisSpeedValue, axisY.axisSpeedValue)); } else if (axisX.axisValue == 0 && axisY.axisValue == 0 && OldTmpAxis != Vector2.zero) { onMoveEnd.Invoke(Vector2.zero); } #endregion #region Down & press event float coef = 1; if (axisX.invertedAxis) { coef = -1; } if (Mathf.Abs(OldTmpAxis.x) < axisX.axisThreshold && Mathf.Abs(axisX.axisValue) >= axisX.axisThreshold) { if (axisX.axisValue * coef > 0) { axisX.axisState = ETCAxis.AxisState.DownRight; OnDownRight.Invoke(); } else if (axisX.axisValue * coef < 0) { axisX.axisState = ETCAxis.AxisState.DownLeft; OnDownLeft.Invoke(); } else { axisX.axisState = ETCAxis.AxisState.None; } } else if (axisX.axisState != ETCAxis.AxisState.None) { if (axisX.axisValue * coef > 0) { axisX.axisState = ETCAxis.AxisState.PressRight; OnPressRight.Invoke(); } else if (axisX.axisValue * coef < 0) { axisX.axisState = ETCAxis.AxisState.PressLeft; OnPressLeft.Invoke(); } else { axisX.axisState = ETCAxis.AxisState.None; } } coef = 1; if (axisY.invertedAxis) { coef = -1; } if (Mathf.Abs(OldTmpAxis.y) < axisY.axisThreshold && Mathf.Abs(axisY.axisValue) >= axisY.axisThreshold) { if (axisY.axisValue * coef > 0) { axisY.axisState = ETCAxis.AxisState.DownUp; OnDownUp.Invoke(); } else if (axisY.axisValue * coef < 0) { axisY.axisState = ETCAxis.AxisState.DownDown; OnDownDown.Invoke(); } else { axisY.axisState = ETCAxis.AxisState.None; } } else if (axisY.axisState != ETCAxis.AxisState.None) { if (axisY.axisValue * coef > 0) { axisY.axisState = ETCAxis.AxisState.PressUp; OnPressUp.Invoke(); } else if (axisY.axisValue * coef < 0) { axisY.axisState = ETCAxis.AxisState.PressDown; OnPressDown.Invoke(); } else { axisY.axisState = ETCAxis.AxisState.None; } } #endregion }
private void UpdateDPad() { #region Key simulation if (enableKeySimulation && !isOnTouch && _activated && _visible) { float x = Input.GetAxis(axisX.unityAxis); float y = Input.GetAxis(axisY.unityAxis); isOnDrag = false; tmpAxis = Vector2.zero; if (x != 0) { isOnDrag = true; tmpAxis = new Vector2(1 * Mathf.Sign(x), tmpAxis.y); } if (y != 0) { isOnDrag = true; tmpAxis = new Vector2(tmpAxis.x, 1 * Mathf.Sign(y)); } } #endregion Key simulation OldTmpAxis.x = axisX.axisValue; OldTmpAxis.y = axisY.axisValue; axisX.UpdateAxis(tmpAxis.x, isOnDrag, ETCBase.ControlType.DPad); axisY.UpdateAxis(tmpAxis.y, isOnDrag, ETCBase.ControlType.DPad); #region Move event if ((axisX.axisValue != 0 || axisY.axisValue != 0) && OldTmpAxis == Vector2.zero) { onMoveStart.Invoke(); } if (axisX.axisValue != 0 || axisY.axisValue != 0) { // X axis if (axisX.actionOn == ETCAxis.ActionOn.Down && (axisX.axisState == ETCAxis.AxisState.DownLeft || axisX.axisState == ETCAxis.AxisState.DownRight)) { axisX.DoDirectAction(); } else if (axisX.actionOn == ETCAxis.ActionOn.Press) { axisX.DoDirectAction(); } // Y axis if (axisY.actionOn == ETCAxis.ActionOn.Down && (axisY.axisState == ETCAxis.AxisState.DownUp || axisY.axisState == ETCAxis.AxisState.DownDown)) { axisY.DoDirectAction(); } else if (axisY.actionOn == ETCAxis.ActionOn.Press) { axisY.DoDirectAction(); } onMove.Invoke(new Vector2(axisX.axisValue, axisY.axisValue)); onMoveSpeed.Invoke(new Vector2(axisX.axisSpeedValue, axisY.axisSpeedValue)); } else if (axisX.axisValue == 0 && axisY.axisValue == 0 && OldTmpAxis != Vector2.zero) { onMoveEnd.Invoke(); } #endregion Move event #region Down & press event float coef = 1; if (axisX.invertedAxis) { coef = -1; } if (OldTmpAxis.x == 0 && Mathf.Abs(axisX.axisValue) > 0) { if (axisX.axisValue * coef > 0) { axisX.axisState = ETCAxis.AxisState.DownRight; OnDownRight.Invoke(); } else if (axisX.axisValue * coef < 0) { axisX.axisState = ETCAxis.AxisState.DownLeft; OnDownLeft.Invoke(); } else { axisX.axisState = ETCAxis.AxisState.None; } } else if (axisX.axisState != ETCAxis.AxisState.None) { if (axisX.axisValue * coef > 0) { axisX.axisState = ETCAxis.AxisState.PressRight; OnPressRight.Invoke(); } else if (axisX.axisValue * coef < 0) { axisX.axisState = ETCAxis.AxisState.PressLeft; OnPressLeft.Invoke(); } else { axisX.axisState = ETCAxis.AxisState.None; } } coef = 1; if (axisY.invertedAxis) { coef = -1; } if (OldTmpAxis.y == 0 && Mathf.Abs(axisY.axisValue) > 0) { if (axisY.axisValue * coef > 0) { axisY.axisState = ETCAxis.AxisState.DownUp; OnDownUp.Invoke(); } else if (axisY.axisValue * coef < 0) { axisY.axisState = ETCAxis.AxisState.DownDown; OnDownDown.Invoke(); } else { axisY.axisState = ETCAxis.AxisState.None; } } else if (axisY.axisState != ETCAxis.AxisState.None) { if (axisY.axisValue * coef > 0) { axisY.axisState = ETCAxis.AxisState.PressUp; OnPressUp.Invoke(); } else if (axisY.axisValue * coef < 0) { axisY.axisState = ETCAxis.AxisState.PressDown; OnPressDown.Invoke(); } else { axisY.axisState = ETCAxis.AxisState.None; } } #endregion Down & press event }
public void OnBeginDrag(PointerEventData eventData) { onMoveStart.Invoke(); }