mirror of https://github.com/bjornbytes/lovr.git
Update mat4:set for vanilla lua;
This commit is contained in:
parent
db519f7f53
commit
7f445db3cc
|
@ -1459,12 +1459,57 @@ static int l_lovrMat4Unpack(lua_State* L) {
|
|||
|
||||
int l_lovrMat4Set(lua_State* L) {
|
||||
mat4 m = luax_checkvector(L, 1, V_MAT4, NULL);
|
||||
if (lua_gettop(L) >= 17) {
|
||||
int top = lua_gettop(L);
|
||||
int type = lua_type(L, 2);
|
||||
if (type == LUA_TNONE || type == LUA_TNIL || (top == 2 && type == LUA_TNUMBER)) {
|
||||
float x = luax_optfloat(L, 2, 1.f);
|
||||
memset(m, 0, 16 * sizeof(float));
|
||||
m[0] = m[5] = m[10] = m[15] = x;
|
||||
} else if (top == 17) {
|
||||
for (int i = 2; i <= 17; i++) {
|
||||
*m++ = luaL_checknumber(L, i);
|
||||
*m++ = luax_checkfloat(L, i);
|
||||
}
|
||||
} else {
|
||||
luax_readmat4(L, 2, m, 3);
|
||||
VectorType vectorType;
|
||||
float* v = luax_tovector(L, 2, &vectorType);
|
||||
if (vectorType == V_MAT4) {
|
||||
mat4_init(m, v);
|
||||
} else {
|
||||
int index = 2;
|
||||
mat4_identity(m);
|
||||
|
||||
float LOVR_ALIGN(16) position[4];
|
||||
index = luax_readvec3(L, index, position, "nil, number, vec3, or mat4");
|
||||
m[12] = position[0];
|
||||
m[13] = position[1];
|
||||
m[14] = position[2];
|
||||
|
||||
float* v = luax_tovector(L, index, &vectorType);
|
||||
if (vectorType == V_QUAT) {
|
||||
mat4_rotateQuat(m, v);
|
||||
} else if ((top - index) == 3 && lua_type(L, top) == LUA_TNUMBER) {
|
||||
float angle = luax_checkfloat(L, index++);
|
||||
float ax = luax_checkfloat(L, index++);
|
||||
float ay = luax_checkfloat(L, index++);
|
||||
float az = luax_checkfloat(L, index++);
|
||||
mat4_rotate(m, angle, ax, ay, az);
|
||||
} else {
|
||||
if (vectorType == V_VEC3) {
|
||||
m[0] = v[0];
|
||||
m[5] = v[1];
|
||||
m[10] = v[2];
|
||||
index++;
|
||||
} else if (lua_type(L, index) == LUA_TNUMBER) {
|
||||
m[0] = luax_checkfloat(L, index++);
|
||||
m[5] = luax_checkfloat(L, index++);
|
||||
m[10] = luax_checkfloat(L, index++);
|
||||
}
|
||||
|
||||
float LOVR_ALIGN(16) rotation[4];
|
||||
luax_readquat(L, index, rotation, NULL);
|
||||
mat4_rotateQuat(m, rotation);
|
||||
}
|
||||
}
|
||||
}
|
||||
lua_settop(L, 1);
|
||||
return 1;
|
||||
|
|
Loading…
Reference in New Issue