Apply pitch to arrows
This commit is contained in:
parent
1cbee9de18
commit
2478d8817e
|
@ -9,6 +9,12 @@ local GRAVITY = 9.81
|
||||||
|
|
||||||
local YAW_OFFSET = -math.pi/2
|
local YAW_OFFSET = -math.pi/2
|
||||||
|
|
||||||
|
local dir_to_pitch = function(dir)
|
||||||
|
local dir2 = vector.normalize(dir)
|
||||||
|
local xz = math.abs(dir.x) + math.abs(dir.z)
|
||||||
|
return -math.atan2(-dir.y, xz)
|
||||||
|
end
|
||||||
|
|
||||||
local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements")
|
local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements")
|
||||||
local mod_button = minetest.get_modpath("mesecons_button")
|
local mod_button = minetest.get_modpath("mesecons_button")
|
||||||
|
|
||||||
|
@ -108,7 +114,7 @@ ARROW_ENTITY.on_step = function(self, dtime)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- Drop arrow as item when it is no longer stuck
|
-- Drop arrow as item when it is no longer stuck
|
||||||
-- FIXME: Arrows are a bit slot to react and continue to float in mid air for a few seconds.
|
-- FIXME: Arrows are a bit slow to react and continue to float in mid air for a few seconds.
|
||||||
if self._stuckrechecktimer > STUCK_RECHECK_TIME then
|
if self._stuckrechecktimer > STUCK_RECHECK_TIME then
|
||||||
local stuckin_def
|
local stuckin_def
|
||||||
if self._stuckin then
|
if self._stuckin then
|
||||||
|
@ -290,7 +296,9 @@ ARROW_ENTITY.on_step = function(self, dtime)
|
||||||
-- Update yaw
|
-- Update yaw
|
||||||
if not self._stuck then
|
if not self._stuck then
|
||||||
local vel = self.object:get_velocity()
|
local vel = self.object:get_velocity()
|
||||||
self.object:set_yaw(minetest.dir_to_yaw(vel)+YAW_OFFSET)
|
local yaw = minetest.dir_to_yaw(vel)+YAW_OFFSET
|
||||||
|
local pitch = dir_to_pitch(vel)
|
||||||
|
self.object:set_rotation({ x = 0, y = yaw, z = pitch })
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Update internal variable
|
-- Update internal variable
|
||||||
|
|
Loading…
Reference in New Issue
Block a user