diff --git a/cart_entity.lua b/cart_entity.lua index 0105cf5..a85b071 100644 --- a/cart_entity.lua +++ b/cart_entity.lua @@ -351,6 +351,25 @@ function cart_entity:on_step(dtime) anim = {x=2, y=2} end self.object:set_animation(anim, 1, 0) + if player then + local feet = {x=0, y=0, z=0} + local eye = {x=0, y=-4, z=0} + feet.y = boost_cart.old_player_model and 6 or -4.2 + if dir.y ~= 0 then + -- TODO: Find a better way to calculate this + if boost_cart.old_player_model then + feet.y = 6 + 1.5 + feet.z = (dir.x - dir.z) * 7 + else + feet.y = -4.2 + 3 + feet.z = dir.x - dir.z + end + eye.z = eye.z - dir.y * 10 + end + player:set_attach(self.object, "", feet, + {x=dir.y * -45, y=0, z=0}) + player:set_eye_offset(eye, eye) + end self.object:set_velocity(vel) if update.pos then diff --git a/functions.lua b/functions.lua index 9f5b7e9..ec04bb7 100644 --- a/functions.lua +++ b/functions.lua @@ -18,8 +18,7 @@ function boost_cart:manage_attachment(player, obj) default.player_attached[player_name] = status if status then - -- player_api came after the new model. Check for it. - local y_pos = player_api and -4.5 or 6 + local y_pos = self.old_player_model and 6 or -4.2 player:set_attach(obj, "", {x=0, y=y_pos, z=0}, {x=0, y=0, z=0}) player:set_eye_offset({x=0, y=-4, z=0},{x=0, y=-4, z=0}) else diff --git a/init.lua b/init.lua index 1b2afa2..755ab9d 100644 --- a/init.lua +++ b/init.lua @@ -25,6 +25,10 @@ if not default.player_attached then default.player_attached = {} end +minetest.after(1, function() + boost_cart.old_player_model = type(player_api) ~= "table" +end) + dofile(boost_cart.modpath.."/functions.lua") dofile(boost_cart.modpath.."/rails.lua")