Update mat4:set for vanilla lua;

This commit is contained in:
bjorn 2019-07-16 22:51:26 -07:00
parent db519f7f53
commit 7f445db3cc
1 changed files with 48 additions and 3 deletions

View File

@ -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;