137 lines
3.3 KiB
C++
137 lines
3.3 KiB
C++
#pragma once
|
|
#include "CommonInclude.h"
|
|
#include "wiLua.h"
|
|
#include "wiLuna.h"
|
|
#include "wiMath.h"
|
|
|
|
namespace wi::lua
|
|
{
|
|
class Vector_BindLua
|
|
{
|
|
public:
|
|
XMFLOAT4 data = {};
|
|
inline static constexpr char className[] = "Vector";
|
|
static Luna<Vector_BindLua>::FunctionType methods[];
|
|
static Luna<Vector_BindLua>::PropertyType properties[];
|
|
|
|
Vector_BindLua() = default;
|
|
Vector_BindLua(const XMFLOAT3& vector);
|
|
Vector_BindLua(const XMFLOAT4& vector);
|
|
Vector_BindLua(const XMVECTOR& vector);
|
|
Vector_BindLua(lua_State* L);
|
|
|
|
XMFLOAT2 GetFloat2() { return XMFLOAT2(data.x, data.y); }
|
|
XMFLOAT3 GetFloat3() { return XMFLOAT3(data.x, data.y, data.z); }
|
|
|
|
int GetX(lua_State* L);
|
|
int GetY(lua_State* L);
|
|
int GetZ(lua_State* L);
|
|
int GetW(lua_State* L);
|
|
|
|
int SetX(lua_State* L);
|
|
int SetY(lua_State* L);
|
|
int SetZ(lua_State* L);
|
|
int SetW(lua_State* L);
|
|
|
|
int Transform(lua_State* L);
|
|
int TransformNormal(lua_State* L);
|
|
int TransformCoord(lua_State* L);
|
|
int Length(lua_State* L);
|
|
int LengthSquared(lua_State* L);
|
|
int Distance(lua_State* L);
|
|
int DistanceSquared(lua_State* L);
|
|
int Normalize(lua_State* L);
|
|
int Clamp(lua_State* L);
|
|
int Saturate(lua_State* L);
|
|
|
|
int Dot(lua_State* L);
|
|
int Cross(lua_State* L);
|
|
int Multiply(lua_State* L);
|
|
int Add(lua_State* L);
|
|
int Subtract(lua_State* L);
|
|
int Lerp(lua_State* L);
|
|
int Rotate(lua_State* L);
|
|
|
|
|
|
int QuaternionIdentity(lua_State* L);
|
|
int QuaternionInverse(lua_State* L);
|
|
int QuaternionNormalize(lua_State* L);
|
|
int QuaternionMultiply(lua_State* L);
|
|
int QuaternionFromRollPitchYaw(lua_State* L);
|
|
int QuaternionToRollPitchYaw(lua_State* L);
|
|
int QuaternionSlerp(lua_State* L);
|
|
int Slerp(lua_State* L);
|
|
|
|
int PlaneFromPointNormal(lua_State* L);
|
|
int PlaneFromPoints(lua_State* L);
|
|
|
|
int GetAngle(lua_State* L);
|
|
int GetAngleSigned(lua_State* L);
|
|
|
|
static void Bind();
|
|
};
|
|
struct VectorProperty
|
|
{
|
|
public:
|
|
VectorProperty(){}
|
|
VectorProperty(XMFLOAT2* data): data_f2(data) {}
|
|
VectorProperty(XMFLOAT3* data): data_f3(data) {}
|
|
VectorProperty(XMFLOAT4* data): data_f4(data) {}
|
|
|
|
int Get(lua_State*L);
|
|
int Set(lua_State*L);
|
|
private:
|
|
XMFLOAT2* data_f2 = nullptr;
|
|
XMFLOAT3* data_f3 = nullptr;
|
|
XMFLOAT4* data_f4 = nullptr;
|
|
};
|
|
|
|
class Matrix_BindLua
|
|
{
|
|
public:
|
|
XMFLOAT4X4 data = wi::math::IDENTITY_MATRIX;
|
|
inline static constexpr char className[] = "Matrix";
|
|
static Luna<Matrix_BindLua>::FunctionType methods[];
|
|
static Luna<Matrix_BindLua>::PropertyType properties[];
|
|
|
|
Matrix_BindLua() = default;
|
|
Matrix_BindLua(const XMMATRIX& matrix);
|
|
Matrix_BindLua(const XMFLOAT4X4& matrix);
|
|
Matrix_BindLua(lua_State* L);
|
|
|
|
int GetRow(lua_State* L);
|
|
|
|
int Translation(lua_State* L);
|
|
int Rotation(lua_State* L);
|
|
int RotationX(lua_State* L);
|
|
int RotationY(lua_State* L);
|
|
int RotationZ(lua_State* L);
|
|
int RotationQuaternion(lua_State* L);
|
|
int Scale(lua_State* L);
|
|
int LookTo(lua_State* L);
|
|
int LookAt(lua_State* L);
|
|
|
|
int Multiply(lua_State* L);
|
|
int Add(lua_State* L);
|
|
int Transpose(lua_State* L);
|
|
int Inverse(lua_State* L);
|
|
|
|
int GetForward(lua_State* L);
|
|
int GetUp(lua_State* L);
|
|
int GetRight(lua_State* L);
|
|
|
|
static void Bind();
|
|
};
|
|
struct MatrixProperty
|
|
{
|
|
public:
|
|
MatrixProperty(){}
|
|
MatrixProperty(XMFLOAT4X4* data): data_f4x4(data) {}
|
|
|
|
int Get(lua_State*L);
|
|
int Set(lua_State*L);
|
|
private:
|
|
XMFLOAT4X4* data_f4x4 = nullptr;
|
|
};
|
|
}
|