+
+ --if the function was given a pos
+ if pos2 then
+ --compare the head yaw to the body
+ --we must do a bunch of calculations to correct
+ --strange function returns
+ --for some reason get_yaw is offset 90 degrees
+ local head_yaw = minetest.dir_to_yaw(vector.direction(pos,pos2))
+ head_yaw = minetest.dir_to_yaw(minetest.yaw_to_dir(head_yaw))
+ head_yaw = degrees(head_yaw)-degrees(body_yaw)
+
+ if head_yaw < -180 then
+ head_yaw = head_yaw + 360
+ elseif head_yaw > 180 then
+ head_yaw = head_yaw - 360
+ end
+
+ --if within range then do calculations
+ if head_yaw >= -90 and head_yaw <= 90 then
+ ---begin pitch calculation
+ --feed a 2D coordinate flipped into dir to yaw to calculate pitch
+ head_rotation.x = degrees(minetest.dir_to_yaw(vector.new(vector.distance(vector.new(pos.x,0,pos.z),vector.new(pos2.x,0,pos2.z)),0,pos.y-pos2.y))+(math.pi/2))
+ head_rotation.z = head_yaw
+ self.object:set_bone_position(self.head_bone, head_position, head_rotation)
+ return(true)
+ --nothing to look at
+ else
+ self.return_head_to_origin(self,dtime)
+ return(false)
+ end
+
+ --if nothing to look at
+ else
+ self.return_head_to_origin(self,dtime)
+ return(false)
+ end
+
+ elseif self.head_coord == "vertical" then
+ --print(self.head_bone)
+ local head_position,head_rotation = self.object:get_bone_position(self.head_bone)
+ --[[ debug
+ if rotation then
+ --print("--------------------------------")
+ --rotation.x = rotation.x + 1
+ rotation.z = rotation.z + 1
+ rotation.y = 0
+
+ if rotation.x > 90 then
+ rotation.x = -90
+ end
+ if rotation.z > 90 then
+ rotation.z = -90
+ end
+
+ --print(rotation.x)
+ self.object:set_bone_position(self.head_bone, head_position, rotation)