Add shorthand form for touch_interaction

This commit is contained in:
Gregor Parzefall 2024-02-04 19:13:29 +01:00 committed by grorp
parent 8935f2af3c
commit e79587c934
2 changed files with 24 additions and 17 deletions

@ -9095,20 +9095,20 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
-- Otherwise should be name of node which the client immediately places -- Otherwise should be name of node which the client immediately places
-- upon digging. Server will always update with actual result shortly. -- upon digging. Server will always update with actual result shortly.
touch_interaction = { touch_interaction = <TouchInteractionMode> OR {
pointed_nothing = <TouchInteractionMode>,
pointed_node = <TouchInteractionMode>,
pointed_object = <TouchInteractionMode>,
},
-- Only affects touchscreen clients. -- Only affects touchscreen clients.
-- Defines the meaning of short and long taps with the item in hand. -- Defines the meaning of short and long taps with the item in hand.
-- The fields in this table can be set to the following values: -- If specified as a table, the field to be used is selected according to
-- the current `pointed_thing`.
-- There are three possible TouchInteractionMode values:
-- * "user" (meaning depends on client-side settings) -- * "user" (meaning depends on client-side settings)
-- * "long_dig_short_place" (long tap = dig, short tap = place) -- * "long_dig_short_place" (long tap = dig, short tap = place)
-- * "short_dig_long_place" (short tap = dig, long tap = place) -- * "short_dig_long_place" (short tap = dig, long tap = place)
-- The field to be used is selected according to the current -- The default value is "user".
-- `pointed_thing`.
pointed_nothing = "user",
pointed_node = "user",
pointed_object = "user",
},
sound = { sound = {
-- Definition of item sounds to be played at various events. -- Definition of item sounds to be played at various events.

@ -156,17 +156,24 @@ void read_item_definition(lua_State* L, int index,
getboolfield(L, index, "wallmounted_rotate_vertical", def.wallmounted_rotate_vertical); getboolfield(L, index, "wallmounted_rotate_vertical", def.wallmounted_rotate_vertical);
lua_getfield(L, index, "touch_interaction");
if (!lua_isnil(L, -1)) {
luaL_checktype(L, -1, LUA_TTABLE);
TouchInteraction &inter = def.touch_interaction; TouchInteraction &inter = def.touch_interaction;
lua_getfield(L, index, "touch_interaction");
if (lua_istable(L, -1)) {
inter.pointed_nothing = (TouchInteractionMode)getenumfield(L, -1, "pointed_nothing", inter.pointed_nothing = (TouchInteractionMode)getenumfield(L, -1, "pointed_nothing",
es_TouchInteractionMode, inter.pointed_nothing); es_TouchInteractionMode, inter.pointed_nothing);
inter.pointed_node = (TouchInteractionMode)getenumfield(L, -1, "pointed_node", inter.pointed_node = (TouchInteractionMode)getenumfield(L, -1, "pointed_node",
es_TouchInteractionMode, inter.pointed_node); es_TouchInteractionMode, inter.pointed_node);
inter.pointed_object = (TouchInteractionMode)getenumfield(L, -1, "pointed_object", inter.pointed_object = (TouchInteractionMode)getenumfield(L, -1, "pointed_object",
es_TouchInteractionMode, inter.pointed_object); es_TouchInteractionMode, inter.pointed_object);
} else if (lua_isstring(L, -1)) {
int value;
if (string_to_enum(es_TouchInteractionMode, value, lua_tostring(L, -1))) {
inter.pointed_nothing = (TouchInteractionMode)value;
inter.pointed_node = (TouchInteractionMode)value;
inter.pointed_object = (TouchInteractionMode)value;
}
} else if (!lua_isnil(L, -1)) {
throw LuaError("invalid type for 'touch_interaction'");
} }
lua_pop(L, 1); lua_pop(L, 1);
} }