public override void Rotate(Vector3d versor, double angle) { var rotationQuaternion = new Quaternion(versor, angle); SetRotationStatus((rotationQuaternion * RotationStatus).Normalize()); SetRotationMatrix(RotationStatus.ConvertToMatrix()); SetInverseInertiaTensor( (RotationMatrix * MassInfo.InverseBaseInertiaTensor) * RotationMatrix.Transpose()); }
void FixedUpdate() { if (m_isDragging && RotationHelper.I.RotationStatus != RotationStatus.None) { if (m_rotationStatus != RotationHelper.I.RotationStatus) { m_rotationStatus = RotationHelper.I.RotationStatus; m_rotationSpeed = RotationHelper.I.RotationStatus == RotationStatus.Left ? RotationHelper.MIN_SPEED : -RotationHelper.MIN_SPEED; } if (RotationHelper.I.RotationStatus == RotationStatus.Left && m_rotationSpeed >= RotationHelper.MAX_SPEED) { m_rotationSpeed = RotationHelper.MAX_SPEED; } else if (RotationHelper.I.RotationStatus == RotationStatus.Right && m_rotationSpeed <= -RotationHelper.MAX_SPEED) { m_rotationSpeed = -RotationHelper.MAX_SPEED; } else { if (RotationHelper.I.RotationStatus == RotationStatus.Left) { m_rotationSpeed += RotationHelper.INTERVAL_SPEED; } else { m_rotationSpeed -= RotationHelper.INTERVAL_SPEED; } } m_z += Time.deltaTime * m_rotationSpeed; if (m_z > 360.0f) { m_z = 0.0f; } transform.localRotation = Quaternion.Euler(0, 0, m_z); } else { m_rotationStatus = RotationStatus.None; m_rotationSpeed = 0; } }
private void Rotate(IEvent @event) { var value = (@event as RotationEvent).Value; m_rotationStatus = value; }
public RotationEvent(RotationStatus value) { Value = value; }