]> git.lizzy.rs Git - xdecor.git/blobdiff - handlers/animations.lua
Add mesecons support to doors (#106)
[xdecor.git] / handlers / animations.lua
index 7d1896cfe530d5d1a27f3aad2a6935f6630868a2..6cfb0987c3c5db8f7fcc0dfc41ed9fe0f17773f8 100644 (file)
@@ -1,33 +1,36 @@
 local function top_face(pointed_thing)
+       if not pointed_thing then return end
        return pointed_thing.above.y > pointed_thing.under.y
 end
 
 function xdecor.sit(pos, node, clicker, pointed_thing)
        if not top_face(pointed_thing) then return end
-       local player = clicker:get_player_name()
+       local player_name = clicker:get_player_name()
        local objs = minetest.get_objects_inside_radius(pos, 0.1)
        local vel = clicker:get_player_velocity()
        local ctrl = clicker:get_player_control()
 
-       for _, p in pairs(objs) do
-               if p:get_player_name() ~= player then return end
+       for _, obj in pairs(objs) do
+               if obj:is_player() and obj:get_player_name() ~= player_name then
+                       return
+               end
        end
 
-       if default.player_attached[player] then
+       if default.player_attached[player_name] then
                pos.y = pos.y - 0.5
                clicker:setpos(pos)
                clicker:set_eye_offset({x=0, y=0, z=0}, {x=0, y=0, z=0})
                clicker:set_physics_override(1, 1, 1)
-               default.player_attached[player] = false
+               default.player_attached[player_name] = false
                default.player_set_animation(clicker, "stand", 30)
 
-       elseif not default.player_attached[player] and node.param2 <= 3 and not
-                       ctrl.sneak and vel.x == 0 and vel.y == 0 and vel.z == 0 then
+       elseif not default.player_attached[player_name] and node.param2 <= 3 and
+                       not ctrl.sneak and vector.equals(vel, {x=0,y=0,z=0}) then
 
                clicker:set_eye_offset({x=0, y=-7, z=2}, {x=0, y=0, z=0})
                clicker:set_physics_override(0, 0, 0)
                clicker:setpos(pos)
-               default.player_attached[player] = true
+               default.player_attached[player_name] = true
                default.player_set_animation(clicker, "sit", 30)
 
                if     node.param2 == 0 then clicker:set_look_yaw(3.15)
@@ -37,13 +40,10 @@ function xdecor.sit(pos, node, clicker, pointed_thing)
        end
 end
 
-function xdecor.sit_dig(pos, player)
-       local pname = player:get_player_name()
-       local objs = minetest.get_objects_inside_radius(pos, 0.1)
-
-       for _, p in pairs(objs) do
-               if not player or not player:is_player() or p:get_player_name() or
-                               default.player_attached[pname] then
+function xdecor.sit_dig(pos, digger)
+       for _, player in pairs(minetest.get_objects_inside_radius(pos, 0.1)) do
+               if player:is_player() and
+                           default.player_attached[player:get_player_name()] then
                        return false
                end
        end