Yaw and velocity

Post Reply
User avatar
runs
Member
Posts: 1722
Joined: Sat Oct 27, 2018 08:32
GitHub: runsy

Yaw and velocity

by runs » Post

I want to set a yawn for an entity and want to increase the velocity in that yaw. My knowledge of trigonometry is terrible. :-/

Code: Select all

local yaw = clicker:get_look_horizontal()
self.object:set_yaw(yaw) --the mob has to runaway in the same way that the clicker
self.object:set_velocity( ????? )
Day 42 of the quarantine

User avatar
AiTechEye
Member
Posts: 817
Joined: Fri May 29, 2015 21:14
GitHub: AiTechEye
Location: ¯\_(ツ)_/¯

Re: Yaw and velocity

by AiTechEye » Post

Code: Select all

lookat=function(self,pos2)
	local pos1=self.object:get_pos()
	local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z}
	local yaw = math.atan(vec.z/vec.x)-math.pi/2
	if pos1.x >= pos2.x then yaw = yaw+math.pi end
	self.object:set_yaw(yaw)
end

walk=function(self,speed)
	local yaw = self.object:get_yaw()
	local speed = speed or 1
	local x = math.sin(yaw) * -1
	local z = math.cos(yaw) * 1
	local y = self.object:get_velocity().y
	self.object:set_velocity({
		x = x*speed,
		y = y,
		z = z*speed
	})
	return self
end

run_away=function(self,pos)
	lookat(self,pos)
	self.object:get_yaw()
	self.object:set_yaw(yaw+math.pi)
	walk(self,2)
end

Termos
Member
Posts: 318
Joined: Sun Dec 16, 2018 12:50

Re: Yaw and velocity

by Termos » Post

????? = vector.multiply(minetest.yaw_to_dir(yaw),speed)

User avatar
runs
Member
Posts: 1722
Joined: Sat Oct 27, 2018 08:32
GitHub: runsy

Re: Yaw and velocity

by runs » Post

AiTechEye wrote:

Code: Select all

lookat=function(self,pos2)
	local pos1=self.object:get_pos()
	local vec = {x=pos1.x-pos2.x, y=pos1.y-pos2.y, z=pos1.z-pos2.z}
	local yaw = math.atan(vec.z/vec.x)-math.pi/2
	if pos1.x >= pos2.x then yaw = yaw+math.pi end
	self.object:set_yaw(yaw)
end

walk=function(self,speed)
	local yaw = self.object:get_yaw()
	local speed = speed or 1
	local x = math.sin(yaw) * -1
	local z = math.cos(yaw) * 1
	local y = self.object:get_velocity().y
	self.object:set_velocity({
		x = x*speed,
		y = y,
		z = z*speed
	})
	return self
end

run_away=function(self,pos)
	lookat(self,pos)
	self.object:get_yaw()
	self.object:set_yaw(yaw+math.pi)
	walk(self,2)
end
Wow, thanks!!! It works like a charm!!!

Just a little error:

local yaw = self.object:get_yaw()
Day 42 of the quarantine

User avatar
runs
Member
Posts: 1722
Joined: Sat Oct 27, 2018 08:32
GitHub: runsy

Re: Yaw and velocity

by runs » Post

Termos wrote:????? = vector.multiply(minetest.yaw_to_dir(yaw),speed)
Thanks.
Day 42 of the quarantine

User avatar
Krock
Developer
Posts: 4534
Joined: Thu Oct 03, 2013 07:48
GitHub: SmallJoker
Location: Switzerland
Contact:

Re: Yaw and velocity

by Krock » Post

To rotate it automatically into the movement direction: https://github.com/minetest/minetest/bl ... .txt#L5683

Smoothen it: https://github.com/minetest/minetest/bl ... .txt#L5687

Code: Select all

-- entity definition .....
automatic_face_movement_dir = 0,
automatic_face_movement_max_rotation_per_sec = 100,
Look, I programmed a bug for you. >> Mod Search Engine << - Mods by Krock - DuckDuckGo mod search bang: !mtmod <keyword here>

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest