forked from VoxeLibre/VoxeLibre
Merge pull request 'Workaround for bows, crossbow and spyglass on mobile' (#4104) from mobile_bow_workaround into master
Reviewed-on: MineClone2/MineClone2#4104
This commit is contained in:
commit
f866b56d06
|
@ -31,6 +31,7 @@ local known_controls = {
|
|||
aux1 = true,
|
||||
down = true,
|
||||
up = true,
|
||||
zoom = true,
|
||||
}
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
|
|
|
@ -140,7 +140,7 @@ minetest.register_tool("mcl_bows:bow", {
|
|||
_tt_help = S("Launches arrows"),
|
||||
_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."),
|
||||
_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,
|
||||
inventory_image = "mcl_bows_bow.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
|
@ -239,7 +239,7 @@ end
|
|||
|
||||
|
||||
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 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
|
||||
|
@ -307,28 +307,30 @@ end)
|
|||
controls.register_on_hold(function(player, key, time)
|
||||
local name = player:get_player_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
|
||||
end
|
||||
--local inv = minetest.get_inventory({type="player", name=name})
|
||||
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
|
||||
local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
|
||||
if enchanted then
|
||||
wielditem:set_name("mcl_bows:bow_0_enchanted")
|
||||
else
|
||||
wielditem:set_name("mcl_bows:bow_0")
|
||||
end
|
||||
player:set_wielded_item(wielditem)
|
||||
if minetest.get_modpath("playerphysics") then
|
||||
-- Slow player down when using bow
|
||||
playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_bow", PLAYER_USE_BOW_SPEED)
|
||||
end
|
||||
bow_load[name] = minetest.get_us_time()
|
||||
bow_index[name] = player:get_wield_index()
|
||||
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())
|
||||
if enchanted then
|
||||
wielditem:set_name("mcl_bows:bow_0_enchanted")
|
||||
else
|
||||
wielditem:set_name("mcl_bows:bow_0")
|
||||
end
|
||||
player:set_wielded_item(wielditem)
|
||||
if minetest.get_modpath("playerphysics") then
|
||||
-- Slow player down when using bow
|
||||
playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_bow", PLAYER_USE_BOW_SPEED)
|
||||
end
|
||||
bow_load[name] = minetest.get_us_time()
|
||||
bow_index[name] = player:get_wield_index()
|
||||
|
||||
-- begin Bow Zoom.
|
||||
mcl_fovapi.apply_modifier(player, "bowcomplete")
|
||||
-- begin Bow Zoom.
|
||||
mcl_fovapi.apply_modifier(player, "bowcomplete")
|
||||
else
|
||||
if player:get_wield_index() == bow_index[name] then
|
||||
if type(bow_load[name]) == "number" then
|
||||
|
|
|
@ -132,7 +132,7 @@ minetest.register_tool("mcl_bows:crossbow", {
|
|||
_tt_help = S("Launches arrows"),
|
||||
_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."),
|
||||
_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,
|
||||
inventory_image = "mcl_bows_crossbow.png",
|
||||
wield_scale = mcl_vars.tool_wield_scale,
|
||||
|
@ -263,7 +263,7 @@ end
|
|||
|
||||
|
||||
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 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
|
||||
|
@ -359,7 +359,7 @@ end)
|
|||
controls.register_on_hold(function(player, key, time)
|
||||
local name = player:get_player_name()
|
||||
local creative = minetest.is_creative_enabled(name)
|
||||
if key ~= "RMB" then
|
||||
if key ~= "RMB" and key ~= "zoom" then
|
||||
return
|
||||
end
|
||||
--local inv = minetest.get_inventory({type="player", name=name})
|
||||
|
@ -373,22 +373,24 @@ controls.register_on_hold(function(player, key, time)
|
|||
BOW_CHARGE_TIME_FULL = _BOW_CHARGE_TIME_FULL
|
||||
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
|
||||
local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
|
||||
if enchanted then
|
||||
wielditem:set_name("mcl_bows:crossbow_0_enchanted")
|
||||
play_load_sound(0, player:get_pos())
|
||||
else
|
||||
wielditem:set_name("mcl_bows:crossbow_0")
|
||||
play_load_sound(0, player:get_pos())
|
||||
end
|
||||
player:set_wielded_item(wielditem)
|
||||
if minetest.get_modpath("playerphysics") then
|
||||
-- Slow player down when using bow
|
||||
playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_crossbow", PLAYER_USE_CROSSBOW_SPEED)
|
||||
end
|
||||
bow_load[name] = minetest.get_us_time()
|
||||
bow_index[name] = player:get_wield_index()
|
||||
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())
|
||||
if enchanted then
|
||||
wielditem:set_name("mcl_bows:crossbow_0_enchanted")
|
||||
play_load_sound(0, player:get_pos())
|
||||
else
|
||||
wielditem:set_name("mcl_bows:crossbow_0")
|
||||
play_load_sound(0, player:get_pos())
|
||||
end
|
||||
player:set_wielded_item(wielditem)
|
||||
if minetest.get_modpath("playerphysics") then
|
||||
-- Slow player down when using bow
|
||||
playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_crossbow", PLAYER_USE_CROSSBOW_SPEED)
|
||||
end
|
||||
bow_load[name] = minetest.get_us_time()
|
||||
bow_index[name] = player:get_wield_index()
|
||||
else
|
||||
if player:get_wield_index() == bow_index[name] then
|
||||
if type(bow_load[name]) == "number" then
|
||||
|
|
|
@ -58,17 +58,21 @@ local function remove_scope(player)
|
|||
end
|
||||
|
||||
controls.register_on_press(function(player, key)
|
||||
if key ~= "RMB" then return end
|
||||
add_scope(player)
|
||||
if key ~= "RMB" and key ~= "zoom" then return end
|
||||
if spyglass_scope[player] == nil then
|
||||
add_scope(player)
|
||||
end
|
||||
end)
|
||||
|
||||
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)
|
||||
end)
|
||||
|
||||
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()
|
||||
if wielditem:get_name() == "mcl_spyglass:spyglass" then
|
||||
mcl_fovapi.apply_modifier(player, "spyglass") -- apply the FOV effect.
|
||||
|
|
Loading…
Reference in New Issue