#pragma once #include #include #include // Include array for std::array::at namespace basalt::shared::math { using FloatPoint = float; using Index = std::uint32_t; struct Triangle { Index i, j, k; Index& operator[](size_t index); const Index& operator[](size_t index) const; }; struct Vector3 { FloatPoint x, y, z; FloatPoint& operator[](size_t index); const FloatPoint& operator[](size_t index) const; }; struct Quaternion { FloatPoint x, y, z, w; FloatPoint& operator[](size_t index); const FloatPoint& operator[](size_t index) const; }; //struct Vector4 { // FloatPoint x, y, z, w; // FloatPoint& operator[](size_t index); // const FloatPoint& operator[](size_t index) const; //}; //struct Matrix4x4 { //private: // std::array data; // Use std::array instead of raw array for .at() method //public: // Vector4& operator[](size_t index); // const Vector4& operator[](size_t index) const; //}; // //#define NOT_IMPLEMENTED throw std::logic_error("not implemented function"); // // template // struct Vector3Traits {}; // // template // struct Matrix4x4Traits {}; // //#undef NOT_IMPLEMENTED } // namespace basalt::shared::math