public override void Interact(Vector3 p_previousPosition)
        {
            Vector3 mouseVector = (Input.mousePosition - p_previousPosition);

            mouseVector.x = _xmod * mouseVector.x;
            mouseVector.y = _ymod * mouseVector.y;
            float mag = mouseVector.magnitude;

            mouseVector = Camera.main.transform.rotation * mouseVector.normalized;

            Vector3 planeNormal = _parentTransformHandle.space == HandleSpace.LOCAL ? _parentTransformHandle.target.rotation * _axis : _axis;
            Vector3 projected   = Vector3.ProjectOnPlane(mouseVector, planeNormal);

            projected *= Time.deltaTime * mag * 2; // Bulhar
            float d = projected.x + projected.y + projected.z;

            delta += d;

            Vector3 rotatedAxis         = _startRotation * _axis;
            Vector3 invertedRotatedAxis = Quaternion.Inverse(_startRotation) * _axis;

            if (_parentTransformHandle.space == HandleSpace.LOCAL)
            {
                float deg = delta * 180f / Mathf.PI;

                if (_parentTransformHandle.rotationSnap != 0)
                {
                    deg = Mathf.Round(deg / _parentTransformHandle.rotationSnap) * _parentTransformHandle.rotationSnap;
                }

                float snappedDelta = deg * Mathf.PI / 180f;
                _arcMesh = MeshUtils.CreateArc(transform.position, _hitPoint, rotatedAxis, 2, -snappedDelta,
                                               Mathf.Abs(Mathf.CeilToInt(snappedDelta * 180 / Mathf.PI)) + 1);
                DrawArc();

                _parentTransformHandle.target.localRotation =
                    _startRotation * Quaternion.AngleAxis(-snappedDelta * 180f / Mathf.PI, _axis);
            }
            else
            {
                float deg = delta * 180f / Mathf.PI;
                if (_parentTransformHandle.rotationSnap != 0)
                {
                    deg = Mathf.Round(deg / _parentTransformHandle.rotationSnap) * _parentTransformHandle.rotationSnap;
                }
                float snappedDelta = deg * Mathf.PI / 180f;

                //_arcMesh.mesh = MeshUtils.CreateArc(2, snappedDelta, Mathf.Abs(Mathf.CeilToInt(snappedDelta*90/Mathf.PI))+1);
                _arcMesh = MeshUtils.CreateArc(transform.position, _hitPoint, _axis, 2, -snappedDelta,
                                               Mathf.Abs(Mathf.CeilToInt(snappedDelta * 180 / Mathf.PI)) + 1);
                DrawArc();

                _parentTransformHandle.target.rotation = _startRotation *
                                                         Quaternion.AngleAxis(-snappedDelta * 180f / Mathf.PI,
                                                                              invertedRotatedAxis);
            }

            base.Interact(p_previousPosition);
        }
示例#2
0
        public override void Interact(Vector3 p_previousPosition)
        {
            Vector3 mouseVector = (Input.mousePosition - p_previousPosition);
            float   mag         = mouseVector.magnitude;

            mouseVector = CameraModeChanger.Instance.ActiveCamera.transform.rotation * mouseVector.normalized;

            Vector3 rperp     = _parentTransformHandle.space == HandleSpace.LOCAL ? _parentTransformHandle.target.rotation * _axis : _axis;
            Vector3 projected = Vector3.ProjectOnPlane(mouseVector, rperp);

            projected *= Time.deltaTime * mag * 2; // Bulhar
            float d = projected.x + projected.y + projected.z;

            delta += d;

            if (_parentTransformHandle.space == HandleSpace.LOCAL)
            {
                float deg = delta * 180f / Mathf.PI;

                if (_parentTransformHandle.rotationSnap != 0)
                {
                    deg = Mathf.Round(deg / _parentTransformHandle.rotationSnap) * _parentTransformHandle.rotationSnap;
                }
                float snappedDelta = deg * Mathf.PI / 180f;

                _arcMesh.mesh = MeshUtils.CreateArc(2, -snappedDelta, Mathf.Abs(Mathf.CeilToInt(snappedDelta * 90 / Mathf.PI)) + 1);
                _arcMesh.transform.localRotation =
                    Quaternion.FromToRotation(Vector3.up, _axis) * Quaternion.AngleAxis(-snappedDelta, Vector3.up);
                _parentTransformHandle.target.localRotation =
                    _startRotation * Quaternion.AngleAxis(-snappedDelta * 180f / Mathf.PI, _axis);
            }
            else
            {
                Vector3 raxis = Quaternion.Inverse(_startRotation) * _axis;

                float deg = delta * 180f / Mathf.PI;
                if (_parentTransformHandle.rotationSnap != 0)
                {
                    deg = Mathf.Round(deg / _parentTransformHandle.rotationSnap) * _parentTransformHandle.rotationSnap;
                }
                float snappedDelta = deg * Mathf.PI / 180f;

                _arcMesh.mesh = MeshUtils.CreateArc(2, snappedDelta, Mathf.Abs(Mathf.CeilToInt(snappedDelta * 90 / Mathf.PI)) + 1);
                _arcMesh.transform.localRotation =
                    Quaternion.FromToRotation(Vector3.up, _axis) * Quaternion.AngleAxis(-snappedDelta, Vector3.up);
                _parentTransformHandle.target.rotation = _startRotation * Quaternion.AngleAxis(-snappedDelta * 180f / Mathf.PI, raxis);
            }

            base.Interact(p_previousPosition);
        }