Merge pull request 'Workaround for bows, crossbow and spyglass on mobile' (#4104) from mobile_bow_workaround into master

Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4104
This commit is contained in:
the-real-herowl 2023-12-27 19:41:57 +00:00
commit f866b56d06
4 changed files with 51 additions and 42 deletions

View file

@ -31,6 +31,7 @@ local known_controls = {
aux1 = true, aux1 = true,
down = true, down = true,
up = true, up = true,
zoom = true,
} }
minetest.register_on_joinplayer(function(player) minetest.register_on_joinplayer(function(player)

View file

@ -140,7 +140,7 @@ minetest.register_tool("mcl_bows:bow", {
_tt_help = S("Launches arrows"), _tt_help = S("Launches arrows"),
_doc_items_longdesc = S("Bows are ranged weapons to shoot arrows at your foes.").."\n".. _doc_items_longdesc = S("Bows are ranged weapons to shoot arrows at your foes.").."\n"..
S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."), S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."),
_doc_items_usagehelp = S("To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot."), _doc_items_usagehelp = S("To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button (or the zoom key) to charge, release to shoot."),
_doc_items_durability = BOW_DURABILITY, _doc_items_durability = BOW_DURABILITY,
inventory_image = "mcl_bows_bow.png", inventory_image = "mcl_bows_bow.png",
wield_scale = mcl_vars.tool_wield_scale, wield_scale = mcl_vars.tool_wield_scale,
@ -239,7 +239,7 @@ end
controls.register_on_release(function(player, key, time) controls.register_on_release(function(player, key, time)
if key~="RMB" then return end if key~="RMB" and key~="zoom" then return end
--local inv = minetest.get_inventory({type="player", name=player:get_player_name()}) --local inv = minetest.get_inventory({type="player", name=player:get_player_name()})
local wielditem = player:get_wielded_item() local wielditem = player:get_wielded_item()
if (wielditem:get_name()=="mcl_bows:bow_0" or wielditem:get_name()=="mcl_bows:bow_1" or wielditem:get_name()=="mcl_bows:bow_2" or if (wielditem:get_name()=="mcl_bows:bow_0" or wielditem:get_name()=="mcl_bows:bow_1" or wielditem:get_name()=="mcl_bows:bow_2" or
@ -307,12 +307,14 @@ end)
controls.register_on_hold(function(player, key, time) controls.register_on_hold(function(player, key, time)
local name = player:get_player_name() local name = player:get_player_name()
local creative = minetest.is_creative_enabled(name) local creative = minetest.is_creative_enabled(name)
if key ~= "RMB" or not (creative or get_arrow(player)) then if (key ~= "RMB" and key ~= "zoom") or not (creative or get_arrow(player)) then
return return
end end
--local inv = minetest.get_inventory({type="player", name=name}) --local inv = minetest.get_inventory({type="player", name=name})
local wielditem = player:get_wielded_item() local wielditem = player:get_wielded_item()
if bow_load[name] == nil and (wielditem:get_name()=="mcl_bows:bow" or wielditem:get_name()=="mcl_bows:bow_enchanted") and wielditem:get_meta():get("active") and (creative or get_arrow(player)) then if bow_load[name] == nil
and (wielditem:get_name()=="mcl_bows:bow" or wielditem:get_name()=="mcl_bows:bow_enchanted")
and (wielditem:get_meta():get("active") or key == "zoom") and (creative or get_arrow(player)) then
local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name()) local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
if enchanted then if enchanted then
wielditem:set_name("mcl_bows:bow_0_enchanted") wielditem:set_name("mcl_bows:bow_0_enchanted")

View file

@ -132,7 +132,7 @@ minetest.register_tool("mcl_bows:crossbow", {
_tt_help = S("Launches arrows"), _tt_help = S("Launches arrows"),
_doc_items_longdesc = S("Crossbows are ranged weapons to shoot arrows at your foes.").."\n".. _doc_items_longdesc = S("Crossbows are ranged weapons to shoot arrows at your foes.").."\n"..
S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."), S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."),
_doc_items_usagehelp = S("To use the crossbow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to load an arrow into the chamber, then to shoot press left mouse."), _doc_items_usagehelp = S("To use the crossbow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button (or zoom key) to charge, release to load an arrow into the chamber, then to shoot press left mouse."),
_doc_items_durability = BOW_DURABILITY, _doc_items_durability = BOW_DURABILITY,
inventory_image = "mcl_bows_crossbow.png", inventory_image = "mcl_bows_crossbow.png",
wield_scale = mcl_vars.tool_wield_scale, wield_scale = mcl_vars.tool_wield_scale,
@ -263,7 +263,7 @@ end
controls.register_on_release(function(player, key, time) controls.register_on_release(function(player, key, time)
if key~="RMB" then return end if key~="RMB" and key~="zoom" then return end
--local inv = minetest.get_inventory({type="player", name=player:get_player_name()}) --local inv = minetest.get_inventory({type="player", name=player:get_player_name()})
local wielditem = player:get_wielded_item() local wielditem = player:get_wielded_item()
if wielditem:get_name()=="mcl_bows:crossbow_2" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2" and minetest.is_creative_enabled(player:get_player_name()) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and minetest.is_creative_enabled(player:get_player_name()) then if wielditem:get_name()=="mcl_bows:crossbow_2" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2" and minetest.is_creative_enabled(player:get_player_name()) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and minetest.is_creative_enabled(player:get_player_name()) then
@ -359,7 +359,7 @@ end)
controls.register_on_hold(function(player, key, time) controls.register_on_hold(function(player, key, time)
local name = player:get_player_name() local name = player:get_player_name()
local creative = minetest.is_creative_enabled(name) local creative = minetest.is_creative_enabled(name)
if key ~= "RMB" then if key ~= "RMB" and key ~= "zoom" then
return return
end end
--local inv = minetest.get_inventory({type="player", name=name}) --local inv = minetest.get_inventory({type="player", name=name})
@ -373,7 +373,9 @@ controls.register_on_hold(function(player, key, time)
BOW_CHARGE_TIME_FULL = _BOW_CHARGE_TIME_FULL BOW_CHARGE_TIME_FULL = _BOW_CHARGE_TIME_FULL
end end
if bow_load[name] == nil and (wielditem:get_name()=="mcl_bows:crossbow" or wielditem:get_name()=="mcl_bows:crossbow_enchanted") and wielditem:get_meta():get("active") and (creative or get_arrow(player)) then if bow_load[name] == nil
and (wielditem:get_name()=="mcl_bows:crossbow" or wielditem:get_name()=="mcl_bows:crossbow_enchanted")
and (wielditem:get_meta():get("active") or key=="zoom") and (creative or get_arrow(player)) then
local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name()) local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
if enchanted then if enchanted then
wielditem:set_name("mcl_bows:crossbow_0_enchanted") wielditem:set_name("mcl_bows:crossbow_0_enchanted")

View file

@ -58,17 +58,21 @@ local function remove_scope(player)
end end
controls.register_on_press(function(player, key) controls.register_on_press(function(player, key)
if key ~= "RMB" then return end if key ~= "RMB" and key ~= "zoom" then return end
if spyglass_scope[player] == nil then
add_scope(player) add_scope(player)
end
end) end)
controls.register_on_release(function(player, key, time) controls.register_on_release(function(player, key, time)
if key ~= "RMB" then return end if key ~= "RMB" and key ~= "zoom" then return end
local ctrl = player:get_player_control()
if key == "RMB" and ctrl.zoom or key == "zoom" and ctrl.place then return end
remove_scope(player) remove_scope(player)
end) end)
controls.register_on_hold(function(player, key, time) controls.register_on_hold(function(player, key, time)
if key ~= "RMB" then return end if key ~= "RMB" and key ~= "zoom" then return end
local wielditem = player:get_wielded_item() local wielditem = player:get_wielded_item()
if wielditem:get_name() == "mcl_spyglass:spyglass" then if wielditem:get_name() == "mcl_spyglass:spyglass" then
mcl_fovapi.apply_modifier(player, "spyglass") -- apply the FOV effect. mcl_fovapi.apply_modifier(player, "spyglass") -- apply the FOV effect.