forked from VoxeLibre/VoxeLibre
Add in mob auto rotation (implementation 1)
This commit is contained in:
parent
8b200c7352
commit
61124905f3
|
@ -233,21 +233,29 @@ end
|
||||||
|
|
||||||
-- move mob in facing direction
|
-- move mob in facing direction
|
||||||
local set_velocity = function(self, v)
|
local set_velocity = function(self, v)
|
||||||
local c_x, c_y = 0, 0
|
--local c_x, c_y = 0, 0
|
||||||
|
|
||||||
-- halt mob if it has been ordered to stay
|
-- halt mob if it has been ordered to stay
|
||||||
if self.order == "stand" then
|
--if self.order == "stand" then
|
||||||
self.object:set_velocity({x = 0, y = 0, z = 0})
|
--self.object:set_velocity({x = 0, y = 0, z = 0})
|
||||||
return
|
-- return
|
||||||
end
|
--end
|
||||||
|
|
||||||
local yaw = (self.object:get_yaw() or 0) + self.rotate
|
local yaw = (self.yaw or 0)
|
||||||
|
|
||||||
self.object:add_velocity({
|
local current_velocity = self.object:get_velocity()
|
||||||
x = (math_sin(yaw) * -v) + c_x,
|
|
||||||
y = self.object:get_velocity().y,
|
local goal_velocity = {
|
||||||
z = (math_cos(yaw) * v) + c_y,
|
x = (math_sin(yaw) * -v),
|
||||||
})
|
y = 0,
|
||||||
|
z = (math_cos(yaw) * v),
|
||||||
|
}
|
||||||
|
|
||||||
|
local new_velocity_addition = vector.subtract(goal_velocity,current_velocity)
|
||||||
|
|
||||||
|
new_velocity_addition.y = 0
|
||||||
|
|
||||||
|
self.object:add_velocity(new_velocity_addition)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -277,7 +285,7 @@ local set_yaw = function(self, yaw, delay, dtime)
|
||||||
if self.shaking and dtime then
|
if self.shaking and dtime then
|
||||||
yaw = yaw + (math_random() * 2 - 1) * 5 * dtime
|
yaw = yaw + (math_random() * 2 - 1) * 5 * dtime
|
||||||
end
|
end
|
||||||
self.object:set_yaw(yaw)
|
self.yaw(yaw)
|
||||||
update_roll(self)
|
update_roll(self)
|
||||||
return yaw
|
return yaw
|
||||||
end
|
end
|
||||||
|
@ -380,7 +388,15 @@ end
|
||||||
local do_states = function(self, dtime)
|
local do_states = function(self, dtime)
|
||||||
local yaw = self.object:get_yaw() or 0
|
local yaw = self.object:get_yaw() or 0
|
||||||
|
|
||||||
|
self.state_timer = self.state_timer - dtime
|
||||||
|
|
||||||
|
if self.state_timer <= 0 then
|
||||||
|
self.state_timer = math.random(0,2) + math.random()
|
||||||
|
--let's do a random state
|
||||||
|
self.yaw = (math_random() * (math.pi * 2)) - math.pi
|
||||||
|
end
|
||||||
|
|
||||||
|
set_velocity(self,1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -605,19 +621,21 @@ local mob_step = function(self, dtime)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--print(self.object:get_yaw())
|
||||||
|
|
||||||
--if self.state == "die" then
|
--if self.state == "die" then
|
||||||
-- print("need custom die stop moving thing")
|
-- print("need custom die stop moving thing")
|
||||||
-- return
|
-- return
|
||||||
--end
|
--end
|
||||||
|
|
||||||
-- can mob be pushed, if so calculate direction -- do this first to prevent issues
|
|
||||||
if self.pushable then
|
|
||||||
collision(self)
|
|
||||||
end
|
|
||||||
|
|
||||||
do_states(self, dtime)
|
do_states(self, dtime)
|
||||||
|
|
||||||
|
-- can mob be pushed, if so calculate direction -- do this last (overrides everything)
|
||||||
|
if self.pushable then
|
||||||
|
collision(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--if not self.fire_resistant then
|
--if not self.fire_resistant then
|
||||||
|
@ -650,50 +668,6 @@ local mob_step = function(self, dtime)
|
||||||
-- return
|
-- return
|
||||||
--end
|
--end
|
||||||
|
|
||||||
-- smooth rotation by ThomasMonroe314
|
|
||||||
--[[
|
|
||||||
if self.delay and self.delay > 0 then
|
|
||||||
|
|
||||||
local yaw = self.object:get_yaw() or 0
|
|
||||||
|
|
||||||
if self.delay == 1 then
|
|
||||||
yaw = self.target_yaw
|
|
||||||
else
|
|
||||||
local dif = math_abs(yaw - self.target_yaw)
|
|
||||||
|
|
||||||
if yaw > self.target_yaw then
|
|
||||||
|
|
||||||
if dif > math_pi then
|
|
||||||
dif = 2 * math_pi - dif -- need to add
|
|
||||||
yaw = yaw + dif / self.delay
|
|
||||||
else
|
|
||||||
yaw = yaw - dif / self.delay -- need to subtract
|
|
||||||
end
|
|
||||||
|
|
||||||
elseif yaw < self.target_yaw then
|
|
||||||
|
|
||||||
if dif > math_pi then
|
|
||||||
dif = 2 * math_pi - dif
|
|
||||||
yaw = yaw - dif / self.delay -- need to subtract
|
|
||||||
else
|
|
||||||
yaw = yaw + dif / self.delay -- need to add
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if yaw > (math_pi * 2) then yaw = yaw - (math_pi * 2) end
|
|
||||||
if yaw < 0 then yaw = yaw + (math_pi * 2) end
|
|
||||||
end
|
|
||||||
|
|
||||||
self.delay = self.delay - 1
|
|
||||||
if self.shaking then
|
|
||||||
yaw = yaw + (math_random() * 2 - 1) * 5 * dtime
|
|
||||||
end
|
|
||||||
self.object:set_yaw(yaw)
|
|
||||||
--update_roll(self)
|
|
||||||
end
|
|
||||||
]]--
|
|
||||||
|
|
||||||
-- end rotation
|
|
||||||
|
|
||||||
-- run custom function (defined in mob lua file)
|
-- run custom function (defined in mob lua file)
|
||||||
--if self.do_custom then
|
--if self.do_custom then
|
||||||
|
@ -1028,6 +1002,7 @@ minetest.register_entity(name, {
|
||||||
replace_offset = def.replace_offset or 0,
|
replace_offset = def.replace_offset or 0,
|
||||||
on_replace = def.on_replace,
|
on_replace = def.on_replace,
|
||||||
timer = 0,
|
timer = 0,
|
||||||
|
state_timer = 0,
|
||||||
env_damage_timer = 0,
|
env_damage_timer = 0,
|
||||||
tamed = false,
|
tamed = false,
|
||||||
pause_timer = 0,
|
pause_timer = 0,
|
||||||
|
@ -1068,8 +1043,9 @@ minetest.register_entity(name, {
|
||||||
|
|
||||||
--j4i stuff
|
--j4i stuff
|
||||||
--automatic_rotate = 360,
|
--automatic_rotate = 360,
|
||||||
|
yaw = 0,
|
||||||
automatic_face_movement_dir = def.rotate or 0, -- 0=front, 90=side, 180=back, 270=side2
|
automatic_face_movement_dir = def.rotate or 0, -- 0=front, 90=side, 180=back, 270=side2
|
||||||
automatic_face_movement_max_rotation_per_sec = 360,
|
automatic_face_movement_max_rotation_per_sec = 270, --degrees
|
||||||
backface_culling = true,
|
backface_culling = true,
|
||||||
--end j4i stuff
|
--end j4i stuff
|
||||||
|
|
||||||
|
|
|
@ -2595,7 +2595,7 @@ local mob_detach_child = function(self, child)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[
|
function do_states(self)
|
||||||
|
|
||||||
if self.state == "stand" then
|
if self.state == "stand" then
|
||||||
|
|
||||||
|
@ -3148,7 +3148,7 @@ end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
]]--
|
end
|
||||||
|
|
||||||
|
|
||||||
mobs.death_effect = function(pos, yaw, collisionbox, rotate)
|
mobs.death_effect = function(pos, yaw, collisionbox, rotate)
|
||||||
|
|
Loading…
Reference in New Issue