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); }
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); }