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

Raycast: export exact pointing location (#6304)

* Return intersection point in node coordinates.
* Clarify 'intersection_point' documentation
This commit is contained in:
Dániel Juhász 2018-08-16 20:10:08 +02:00 committed by SmallJoker
parent 798724efea
commit 325bf68041
9 changed files with 63 additions and 17 deletions

View file

@ -1757,7 +1757,8 @@ void read_json_value(lua_State *L, Json::Value &root, int index, u8 recursion)
lua_pop(L, 1); // Pop value
}
void push_pointed_thing(lua_State *L, const PointedThing &pointed, bool csm)
void push_pointed_thing(lua_State *L, const PointedThing &pointed, bool csm,
bool hitpoint)
{
lua_newtable(L);
if (pointed.type == POINTEDTHING_NODE) {
@ -1782,6 +1783,14 @@ void push_pointed_thing(lua_State *L, const PointedThing &pointed, bool csm)
lua_pushstring(L, "nothing");
lua_setfield(L, -2, "type");
}
if (hitpoint && (pointed.type != POINTEDTHING_NOTHING)) {
push_v3f(L, pointed.intersection_point / BS); // convert to node coords
lua_setfield(L, -2, "intersection_point");
push_v3s16(L, pointed.intersection_normal);
lua_setfield(L, -2, "intersection_normal");
lua_pushinteger(L, pointed.box_id + 1); // change to Lua array index
lua_setfield(L, -2, "box_id");
}
}
void push_objectRef(lua_State *L, const u16 id)

View file

@ -178,7 +178,13 @@ bool push_json_value (lua_State *L,
void read_json_value (lua_State *L, Json::Value &root,
int index, u8 recursion = 0);
void push_pointed_thing (lua_State *L, const PointedThing &pointed, bool csm = false);
/*!
* Pushes a Lua `pointed_thing` to the given Lua stack.
* \param csm If true, a client side pointed thing is pushed
* \param hitpoint If true, the exact pointing location is also pushed
*/
void push_pointed_thing(lua_State *L, const PointedThing &pointed, bool csm =
false, bool hitpoint = false);
void push_objectRef (lua_State *L, const u16 id);

View file

@ -255,10 +255,10 @@ bool ScriptApiItem::getItemCallback(const char *name, const char *callbackname,
return false;
}
void ScriptApiItem::pushPointedThing(const PointedThing& pointed)
void ScriptApiItem::pushPointedThing(const PointedThing &pointed, bool hitpoint)
{
lua_State* L = getStack();
push_pointed_thing(L, pointed);
push_pointed_thing(L, pointed, false, hitpoint);
}

View file

@ -54,6 +54,10 @@ protected:
friend class LuaRaycast;
bool getItemCallback(const char *name, const char *callbackname, const v3s16 *p = nullptr);
void pushPointedThing(const PointedThing& pointed);
/*!
* Pushes a `pointed_thing` tabe to the stack.
* \param hitpoint If true, the exact pointing location is also pushed
*/
void pushPointedThing(const PointedThing &pointed, bool hitpoint = false);
};

View file

@ -150,7 +150,7 @@ int LuaRaycast::l_next(lua_State *L)
if (pointed.type == POINTEDTHING_NOTHING)
lua_pushnil(L);
else
script->pushPointedThing(pointed);
script->pushPointedThing(pointed, true);
return 1;
}