/**
 * @file MathTypes.h
 * @brief 数学常量与 DirectX 数学类型别名集合。
 * @details
 * 统一定义引擎常用数学基础元素：
 * - 常量：pi、two_pi、epsilon；
 * - 向量/矩阵别名：v2/v3/v4、m3x3/m4x4 等；
 * - 与 Win64 下 DirectXMath 类型的映射与对齐变体。
 */
#pragma once
#include "CommonHeader.h"

namespace XEngine::math {

//constexpr long double pi = 3.141592653589793238462643383279L;
/**
 * @brief 圆周率常量。
 */
constexpr float pi = 3.1415927f;
/**
 * @brief 两倍圆周率常量。
 */
constexpr float two_pi = 6.2831853f;

/**
 * @brief 浮点比较容差常量。
 */
constexpr float epsilon = 1e-5f;

#if defined(_WIN64)

/**
 * @brief DirectXMath 向量类型别名。
 * @details
 * - 无 A 后缀类型使用常规布局；
 * - A 后缀类型要求 16 字节对齐，适合 SIMD 对齐访问场景。
 */
using v2 = DirectX::XMFLOAT2;
using v2a = DirectX::XMFLOAT2A;
using v3 = DirectX::XMFLOAT3;
using v3a = DirectX::XMFLOAT3A;
using v4 = DirectX::XMFLOAT4;
using v4a = DirectX::XMFLOAT4A;

/**
 * @brief DirectXMath 整型向量别名。
 */
using u32v2 = DirectX::XMUINT2;
using u32v3 = DirectX::XMUINT3;
using u32v4 = DirectX::XMUINT4;
using s32v2 = DirectX::XMINT2;
using s32v3 = DirectX::XMINT3;
using s32v4 = DirectX::XMINT4;

/**
 * @brief 标量浮点向量别名。
 */
using f32v2 = DirectX::XMFLOAT2;
using f32v3 = DirectX::XMFLOAT3;
using f32v4 = DirectX::XMFLOAT4;

/**
 * @brief DirectXMath 矩阵与寄存器向量别名。
 */
using Vec4 = DirectX::XMVECTOR;
using Mat4 = DirectX::XMMATRIX;
using Mat3 = DirectX::XMFLOAT3X3;
using Mat4f = DirectX::XMFLOAT4X4;
using m3x3 = DirectX::XMFLOAT3X3;
using m4x4 = DirectX::XMFLOAT4X4;
using m4x4a = DirectX::XMFLOAT4X4A;
using vector4 = DirectX::XMVECTOR;
using MAT4 = DirectX::XMMATRIX;
using vector = DirectX::XMVECTOR;
using Quat = DirectX::XMVECTOR;

#endif // (_WIN64)


} 
