1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Fix rounding error in g/set_node caused by truncation to float

This commit is contained in:
rubenwardy 2017-12-22 10:00:57 +00:00 committed by paramat
parent 0bcc2f33eb
commit 026ad912af
3 changed files with 54 additions and 4 deletions

View file

@ -225,6 +225,44 @@ v3f check_v3f(lua_State *L, int index)
return pos;
}
v3d read_v3d(lua_State *L, int index)
{
v3d pos;
CHECK_POS_TAB(index);
lua_getfield(L, index, "x");
pos.X = lua_tonumber(L, -1);
lua_pop(L, 1);
lua_getfield(L, index, "y");
pos.Y = lua_tonumber(L, -1);
lua_pop(L, 1);
lua_getfield(L, index, "z");
pos.Z = lua_tonumber(L, -1);
lua_pop(L, 1);
return pos;
}
v3d check_v3d(lua_State *L, int index)
{
v3d pos;
CHECK_POS_TAB(index);
lua_getfield(L, index, "x");
CHECK_POS_COORD("x");
pos.X = lua_tonumber(L, -1);
CHECK_FLOAT_RANGE(pos.X, "x")
lua_pop(L, 1);
lua_getfield(L, index, "y");
CHECK_POS_COORD("y");
pos.Y = lua_tonumber(L, -1);
CHECK_FLOAT_RANGE(pos.Y, "y")
lua_pop(L, 1);
lua_getfield(L, index, "z");
CHECK_POS_COORD("z");
pos.Z = lua_tonumber(L, -1);
CHECK_FLOAT_RANGE(pos.Z, "z")
lua_pop(L, 1);
return pos;
}
void push_ARGB8(lua_State *L, video::SColor color)
{
lua_newtable(L);
@ -263,15 +301,15 @@ void push_v3s16(lua_State *L, v3s16 p)
v3s16 read_v3s16(lua_State *L, int index)
{
// Correct rounding at <0
v3f pf = read_v3f(L, index);
return floatToInt(pf, 1.0);
v3d pf = read_v3d(L, index);
return doubleToInt(pf, 1.0);
}
v3s16 check_v3s16(lua_State *L, int index)
{
// Correct rounding at <0
v3f pf = check_v3f(L, index);
return floatToInt(pf, 1.0);
v3d pf = check_v3d(L, index);
return doubleToInt(pf, 1.0);
}
bool read_color(lua_State *L, int index, video::SColor *color)