replace get_look_yaw with get_look_horizontal and add nil check for driver

This commit is contained in:
tenplus1 2022-01-02 11:28:56 +00:00
parent 74fc8110c1
commit 4f22460ff2

38
api.lua
View File

@ -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)