From ba86cf1d8bbe209446cbacc53c50b912d6c93e12 Mon Sep 17 00:00:00 2001 From: epCode Date: Sat, 13 Feb 2021 16:09:00 -0800 Subject: [PATCH] Impliment crawling --- mods/PLAYER/mcl_player/init.lua | 12 +++++++++++- mods/PLAYER/mcl_playerplus/init.lua | 25 +++++++++++++++++++------ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/mods/PLAYER/mcl_player/init.lua b/mods/PLAYER/mcl_player/init.lua index e6610caa0c..0c44e768cb 100644 --- a/mods/PLAYER/mcl_player/init.lua +++ b/mods/PLAYER/mcl_player/init.lua @@ -154,8 +154,12 @@ minetest.register_globalstep(function(dtime) animation_speed_mod = animation_speed_mod / 2 end + -- ask if player is in a place which he should crawl + node_in_feet = minetest.registered_nodes[mcl_playerinfo[name].node_feet] -- ask if player is swiming - local standing_on_water = minetest.get_item_group(mcl_playerinfo[name].node_stand, "water") ~= 0 + standing_on_water = minetest.get_item_group(mcl_playerinfo[name].node_stand, "water") ~= 0 + + -- Apply animations based on what the player is doing if player:get_hp() == 0 then @@ -169,6 +173,10 @@ minetest.register_globalstep(function(dtime) player_set_animation(player, "swim_walk_mine", animation_speed_mod) elseif not controls.sneak and standing_on_water then player_set_animation(player, "swim_walk", animation_speed_mod) + elseif node_in_feet.walkable and controls.LMB then + player_set_animation(player, "swim_walk_mine", animation_speed_mod) + elseif node_in_feet.walkable then + player_set_animation(player, "swim_walk", animation_speed_mod) elseif controls.LMB and not controls.sneak and not standing_on_water then player_set_animation(player, "walk_mine", animation_speed_mod) elseif controls.LMB and controls.sneak and not standing_on_water then @@ -178,6 +186,8 @@ minetest.register_globalstep(function(dtime) else player_set_animation(player, "sneak_walk", animation_speed_mod) end + elseif controls.LMB and node_in_feet.walkable then + player_set_animation(player, "swim_mine") elseif controls.LMB and not controls.sneak and standing_on_water then player_set_animation(player, "swim_mine") elseif controls.LMB and not controls.sneak and not standing_on_water then diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 81db0eb8c7..61af0da4c4 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -24,8 +24,11 @@ minetest.register_globalstep(function(dtime) name = player:get_player_name() -- controls head bone - pitch = degrees(player:get_look_vertical()) * -1 + local pitch = degrees(player:get_look_vertical()) * -1 + local node_in_feet = minetest.registered_nodes[mcl_playerinfo[name].node_feet] + + -- controls right and left arms pitch when shooting a bow or punching if string.find(player:get_wielded_item():get_name(), "mcl_bows:bow") and controls.RMB and not controls.up and not controls.down and not controls.left and not controls.right then player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(pitch+90,-30,pitch * -1 * .35)) player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3.5,5.785,0), vector.new(pitch+90,43,pitch * .35)) @@ -36,24 +39,34 @@ minetest.register_globalstep(function(dtime) player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(0,0,0)) player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(0,0,0)) end - - if controls.sneak and player:get_attach() == nil then + + if node_in_feet.walkable and player:get_attach() == nil then + if not controls.RMB and not controls.up and not controls.down and not controls.left and not controls.right and not controls.LMB then + mcl_player.player_set_animation(player, "swim_stand") + end + player:set_properties({collisionbox = {-0.35,1,-0.35,0.35,1.8,0.35}, eye_height = 1.65, nametag_color = { r = 225, b = 225, a = 0, g = 225 }}) + player:set_bone_position("Head", vector.new(0,6.3,0), vector.new(pitch+90,0,0)) + player:set_bone_position("Body_Control", vector.new(0,12.5,0), vector.new(90,0,180)) + elseif controls.sneak and player:get_attach() == nil then + player:set_bone_position("Body_Control", vector.new(0,6.3,0), vector.new(0,0,0)) -- controls head pitch when sneaking player:set_bone_position("Head", vector.new(0,6.3,0), vector.new(pitch+36,0,0)) -- sets eye height, and nametag color accordingly - player:set_properties({eye_height = 1.35, nametag_color = { r = 225, b = 225, a = 0, g = 225 }}) + player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,1.8,0.35}, eye_height = 1.35, nametag_color = { r = 225, b = 225, a = 0, g = 225 }}) elseif minetest.get_item_group(mcl_playerinfo[name].node_stand, "water") ~= 0 and player:get_attach() == nil then + player:set_bone_position("Body_Control", vector.new(0,12.5,0), vector.new(90,0,180)) -- controls head pitch when swiming player:set_bone_position("Head", vector.new(0,6.3,0), vector.new(pitch+90,0,0)) -- sets eye height, and nametag color accordingly - player:set_properties({eye_height = 1.65, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) + player:set_properties({collisionbox = {-0.35,1,-0.35,0.35,1.8,0.35}, eye_height = 1.65, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) else -- controls head pitch when not sneaking + player:set_bone_position("Body_Control", vector.new(0,6.3,0), vector.new(0,0,0)) player:set_bone_position("Head", vector.new(0,6.3,0), vector.new(pitch,0,0)) -- sets eye height, and nametag color accordingly - player:set_properties({eye_height = 1.65, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) + player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,1.8,0.35}, eye_height = 1.65, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) end if mcl_playerplus_internal[name].jump_cooldown > 0 then