#pragma once

#include <spider/runtime/common.hpp>

namespace spider {

    template<typename T>
    struct Quat {
        T w, x, y, z;
    };

    /**
     * Multiplies two quaternions together.
     */
    template<typename T> inline Quat<T> quat_multiply(Quat<T> A, Quat<T> B) {
        return {
            B.w * A.w - B.x * A.x - B.y * A.y - B.z * A.z,
            B.w * A.x + B.x * A.w - B.y * A.z + B.z * A.y,
            B.w * A.y + B.x * A.z + B.y * A.w - B.z * A.x,
            B.w * A.z - B.x * A.y + B.y * A.x + B.z * A.w
        };
    }

}
