From 4f22460ff2afcd326ccf064356a4a121cad77260 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 2 Jan 2022 11:28:56 +0000 Subject: [PATCH] replace get_look_yaw with get_look_horizontal and add nil check for driver --- api.lua | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/api.lua b/api.lua index e11ae2c..dc3d3f6 100644 --- a/api.lua +++ b/api.lua @@ -52,15 +52,16 @@ function object_attach(entity, player, attach_at, eye_offset) force_detach(player) entity.driver = player player:set_attach(entity.object, "", attach_at, {x=0, y=0, z=0}) - + player:set_properties({visual_size = {x=1, y=1}}) - + player:set_eye_offset(eye_offset, {x=0, y=0, z=0}) default.player_attached[player:get_player_name()] = true minetest.after(0.2, function() default.player_set_animation(player, "sit" , 30) end) - entity.object:set_yaw(player:get_look_yaw() - math.pi / 2) + --entity.object:set_yaw(player:get_look_yaw() - math.pi / 2) + entity.object:set_yaw(player:get_look_horizontal() - math.pi / 2) end function object_detach(entity, player, offset) @@ -97,14 +98,16 @@ end) ------------------------------------------------------------------------------- --mixed code(from this mod and lib_mount) +local rotview = math.pi / 2 function object_drive(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim, jumps) local ctrl = entity.driver:get_player_control() - local dir = entity.driver:get_look_dir(); + local dir = entity.driver:get_look_dir() local vec_forward = {x=dir.x*speed,y=-2,z=dir.z*speed} local vec_backward = {x=-dir.x*speed,y=-2,z=-dir.z*speed} local vec_stop = {x=0,y=0,z=0} - local yaw = entity.driver:get_look_yaw(); + --local yaw = entity.driver:get_look_yaw() + local yaw = entity.driver:get_look_horizontal() if ctrl.up then entity.object:set_yaw(yaw+math.pi+math.pi/2) entity.object:set_velocity(vec_forward) @@ -119,7 +122,7 @@ function object_drive(entity, dtime, speed, shoots, arrow, moving_anim, stand_an local pos = entity.object:get_pos() local obj = minetest.add_entity({x=pos.x+0+dir.x*2,y=pos.y+1.5+dir.y,z=pos.z+0+dir.z*2}, arrow) local vec = {x=dir.x*6,y=dir.y*6,z=dir.z*6} - local yaw = entity.driver:get_look_yaw(); + local yaw = entity.driver:get_look_horizontal() + rotview obj:set_yaw(yaw+math.pi/2) obj:set_velocity(vec) end @@ -150,14 +153,17 @@ function object_drive(entity, dtime, speed, shoots, arrow, moving_anim, stand_an end function object_fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim) + + if entity and not entity.driver then return end + local ctrl = entity.driver:get_player_control() local velo = entity.object:get_velocity() - local dir = entity.driver:get_look_dir(); + local dir = entity.driver:get_look_dir() local vec_forward = {x=dir.x*speed,y=dir.y*speed+2,z=dir.z*speed} local vec_backward = {x=-dir.x*speed,y=dir.y*speed+2,z=-dir.z*speed} local vec_rise = {x=velo.x,y=velo.y+0.2,z=velo.z} local vec_stop = {x=0,y=-0.2,z=0} - local yaw = entity.driver:get_look_yaw(); + local yaw = entity.driver:get_look_horizontal() + rotview local pos = entity.object:get_pos() local node = minetest.get_node(pos).name @@ -182,7 +188,8 @@ function object_fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim local pos = entity.object:get_pos() local obj = minetest.add_entity({x=pos.x+0+dir.x*2.5,y=pos.y+1.5+dir.y,z=pos.z+0+dir.z*2.5}, arrow) local vec = vector.multiply(dir, 12) - local yaw = entity.driver:get_look_yaw(); + --local yaw = entity.driver:get_look_yaw() + local yaw = entity.driver:get_look_horizontal() entity.loaded = true obj:set_yaw(yaw+math.pi/2) obj:set_velocity(vec) @@ -239,15 +246,16 @@ function lib_mount.attach(entity, player, attach_at, eye_offset) force_detach(player) entity.driver = player player:set_attach(entity.object, "", attach_at, {x=0, y=0, z=0}) - + player:set_properties({visual_size = {x=1, y=1}}) - + player:set_eye_offset(eye_offset, {x=0, y=0, z=0}) default.player_attached[player:get_player_name()] = true minetest.after(0.2, function() default.player_set_animation(player, "sit" , 30) end) - entity.object:set_yaw(player:get_look_yaw() - math.pi / 2) +-- --entity.object:set_yaw(player:get_look_yaw() - math.pi / 2) +-- entity.object:set_yaw(player:get_look_horizontal() - math.pi / 2) end function lib_mount.detach(entity, player, offset) @@ -265,7 +273,7 @@ end function lib_mount.drive(entity, dtime, moving_anim, stand_anim, can_fly) entity.v = get_v(entity.object:get_velocity()) * get_sign(entity.v) - + local ctrl = entity.driver:get_player_control() local yaw = entity.object:get_yaw() if ctrl.up then @@ -286,7 +294,7 @@ function lib_mount.drive(entity, dtime, moving_anim, stand_anim, can_fly) entity.object:set_yaw(yaw - (1 + dtime) * 0.03) end end - + local velo = entity.object:get_velocity() if entity.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then if stand_anim and stand_anim ~= nil and mobs_redo == true then @@ -351,7 +359,7 @@ function lib_mount.drive(entity, dtime, moving_anim, stand_anim, can_fly) end end end - if can_fly and can_fly == true and ctrl.jump then + if can_fly and can_fly == true and ctrl.jump then new_velo.y = new_velo.y + 0.75 end entity.object:set_velocity(new_velo)