export module Core.Matrix; export import Core.Quaternion; export namespace Core { class Matrix final { Vector4 data[4]; public: Matrix() noexcept; Matrix& unit() noexcept; Matrix& set(size_t index, const Vector4& v) noexcept; Matrix transpose() const noexcept; const float* getValues() const noexcept; Matrix& operator*=(const Matrix& other) noexcept; Matrix operator*(const Matrix& other) const noexcept; Vector3 operator*(const Vector3& v) const noexcept; Matrix& scale(const Vector3& v) noexcept; Matrix& scale(float f) noexcept; Matrix& translate(const Vector3& v) noexcept; Matrix& translateX(float tx) noexcept; Matrix& translateY(float ty) noexcept; Matrix& translateZ(float tz) noexcept; Matrix& translateTo(const Vector3& v) noexcept; Matrix& rotateX(float radians) noexcept; Matrix& rotateY(float radians) noexcept; Matrix& rotateZ(float radians) noexcept; Matrix& rotate(const Quaternion& q) noexcept; size_t toString(StringBase& b) const noexcept; private: Matrix& rotate(float degrees, int a, int b) noexcept; }; }