public virtual void OnZAxisMaxLimitExited(MoveTransformGrabAttachEventArgs e)
 {
     if (ZAxisMaxLimitExited != null)
     {
         ZAxisMaxLimitExited(this, e);
     }
 }
 public virtual void OnXAxisMinLimitExited(MoveTransformGrabAttachEventArgs e)
 {
     if (XAxisMinLimitExited != null)
     {
         XAxisMinLimitExited(this, e);
     }
 }
 public virtual void OnYAxisMaxLimitReached(MoveTransformGrabAttachEventArgs e)
 {
     if (YAxisMaxLimitReached != null)
     {
         YAxisMaxLimitReached(this, e);
     }
 }
 public virtual void OnTransformPositionChanged(MoveTransformGrabAttachEventArgs e)
 {
     if (TransformPositionChanged != null)
     {
         TransformPositionChanged(this, e);
     }
 }
        protected virtual void EmitEvents()
        {
            MoveTransformGrabAttachEventArgs payload = SetEventPayload();

            if (transform.localPosition != previousPosition)
            {
                OnTransformPositionChanged(payload);
            }

            Vector3 positions = GetNormalizedPosition();

            if (positions.x == 0f && !limitsReached[0])
            {
                OnXAxisMinLimitReached(payload);
                limitsReached[0] = true;
            }
            else if (positions.x == 1f && !limitsReached[1])
            {
                OnXAxisMaxLimitReached(payload);
                limitsReached[1] = true;
            }
            else if (positions.x > 0f && positions.x < 1f)
            {
                if (limitsReached[0])
                {
                    OnXAxisMinLimitExited(payload);
                }
                if (limitsReached[1])
                {
                    OnXAxisMaxLimitExited(payload);
                }
                limitsReached[0] = false;
                limitsReached[1] = false;
            }

            if (positions.y == 0f && !limitsReached[2])
            {
                OnYAxisMinLimitReached(payload);
                limitsReached[2] = true;
            }
            else if (positions.y == 1f && !limitsReached[3])
            {
                OnYAxisMaxLimitReached(payload);
                limitsReached[3] = true;
            }
            else if (positions.y > 0f && positions.y < 1f)
            {
                if (limitsReached[2])
                {
                    OnYAxisMinLimitExited(payload);
                }
                if (limitsReached[3])
                {
                    OnYAxisMaxLimitExited(payload);
                }
                limitsReached[2] = false;
                limitsReached[3] = false;
            }

            if (positions.z == 0f && !limitsReached[4])
            {
                OnZAxisMinLimitReached(payload);
                limitsReached[4] = true;
            }
            else if (positions.z == 1f && !limitsReached[5])
            {
                OnZAxisMaxLimitReached(payload);
                limitsReached[5] = true;
            }
            else if (positions.z > 0f && positions.z < 1f)
            {
                if (limitsReached[4])
                {
                    OnZAxisMinLimitExited(payload);
                }
                if (limitsReached[5])
                {
                    OnZAxisMaxLimitExited(payload);
                }
                limitsReached[4] = false;
                limitsReached[5] = false;
            }
        }