mirror of
https://github.com/CraftyBoss/SuperMarioOdysseyOnline.git
synced 2024-11-16 00:25:06 +00:00
95 lines
1.8 KiB
C++
95 lines
1.8 KiB
C++
|
#pragma once
|
||
|
|
||
|
#include <math/seadQuatCalcCommon.h>
|
||
|
#ifndef SEAD_MATH_QUAT_H_
|
||
|
#include <math/seadQuat.h>
|
||
|
#endif
|
||
|
|
||
|
namespace sead
|
||
|
{
|
||
|
template <typename T>
|
||
|
inline Quat<T>::Quat(T w_, T x_, T y_, T z_)
|
||
|
{
|
||
|
QuatCalcCommon<T>::set(*this, w_, x_, y_, z_);
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
inline Quat<T>& Quat<T>::operator*=(const Quat<T>& t)
|
||
|
{
|
||
|
QuatCalcCommon<T>::setMul(*this, *this, t);
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
inline T Quat<T>::length() const
|
||
|
{
|
||
|
return QuatCalcCommon<T>::length(*this);
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
inline T Quat<T>::normalize()
|
||
|
{
|
||
|
return QuatCalcCommon<T>::normalize(*this);
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
inline T Quat<T>::dot(const Self& q)
|
||
|
{
|
||
|
return QuatCalcCommon<T>::dot(*this, q);
|
||
|
}
|
||
|
|
||
|
// reference?
|
||
|
// conjugate(q) / dot(q)?
|
||
|
template <typename T>
|
||
|
inline void Quat<T>::inverse(Self* q)
|
||
|
{
|
||
|
T prod = dot(*this);
|
||
|
if (prod > std::numeric_limits<T>::epsilon())
|
||
|
{
|
||
|
T inv = T(1) / prod;
|
||
|
q->w = inv * this->w;
|
||
|
q->x = inv * -this->x;
|
||
|
q->y = inv * -this->y;
|
||
|
q->z = inv * -this->z;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
q->w = this->w;
|
||
|
q->x = -this->x;
|
||
|
q->y = -this->y;
|
||
|
q->z = -this->z;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
inline void Quat<T>::makeUnit()
|
||
|
{
|
||
|
QuatCalcCommon<T>::makeUnit(*this);
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
inline bool Quat<T>::makeVectorRotation(const Vec3& from, const Vec3& to)
|
||
|
{
|
||
|
return QuatCalcCommon<T>::makeVectorRotation(*this, from, to);
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
inline void Quat<T>::set(T w_, T x_, T y_, T z_)
|
||
|
{
|
||
|
QuatCalcCommon<T>::set(*this, w_, x_, y_, z_);
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
inline void Quat<T>::setRPY(T roll, T pitch, T yaw)
|
||
|
{
|
||
|
QuatCalcCommon<T>::setRPY(*this, roll, pitch, yaw);
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
inline void Quat<T>::calcRPY(Vec3& vec) const
|
||
|
{
|
||
|
QuatCalcCommon<T>::calcRPY(vec, *this);
|
||
|
}
|
||
|
|
||
|
} // namespace sead
|