forked from VoxeLibre/VoxeLibre
Make mobs jump properly
This commit is contained in:
parent
6cb6d714c9
commit
d07d0ae31c
|
@ -1,5 +1,14 @@
|
||||||
local math_random = math.random
|
local math_random = math.random
|
||||||
|
|
||||||
|
local vector_multiply = vector.multiply
|
||||||
|
|
||||||
|
local minetest_yaw_to_dir = minetest.yaw_to_dir
|
||||||
|
local minetest_get_item_group = minetest.get_item_group
|
||||||
|
local minetest_get_node = minetest.get_node
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- execute current state (stand, walk, run, attacks)
|
-- execute current state (stand, walk, run, attacks)
|
||||||
-- returns true if mob has died
|
-- returns true if mob has died
|
||||||
local do_states = function(self, dtime)
|
local do_states = function(self, dtime)
|
||||||
|
@ -17,6 +26,35 @@ local do_states = function(self, dtime)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--check if a mob needs to jump
|
||||||
|
local jump_check = function(self,dtime)
|
||||||
|
|
||||||
|
local pos = self.object:get_pos()
|
||||||
|
pos.y = pos.y + 0.1
|
||||||
|
local dir = minetest_yaw_to_dir(self.yaw)
|
||||||
|
|
||||||
|
local collisionbox = self.object:get_properties().collisionbox
|
||||||
|
local radius = collisionbox[4] + 0.5
|
||||||
|
|
||||||
|
vector_multiply(dir, radius)
|
||||||
|
|
||||||
|
|
||||||
|
local test_dir = vector.add(pos,dir)
|
||||||
|
|
||||||
|
if minetest_get_item_group(minetest_get_node(test_dir).name, "solid") ~= 0 then
|
||||||
|
print("jump")
|
||||||
|
mobs.jump(self)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mobs.mob_step = function(self, dtime)
|
mobs.mob_step = function(self, dtime)
|
||||||
|
|
||||||
--do not continue if non-existent
|
--do not continue if non-existent
|
||||||
|
@ -34,6 +72,8 @@ mobs.mob_step = function(self, dtime)
|
||||||
|
|
||||||
do_states(self, dtime)
|
do_states(self, dtime)
|
||||||
|
|
||||||
|
jump_check(self)
|
||||||
|
|
||||||
|
|
||||||
mobs.movement_rotation_lock(self)
|
mobs.movement_rotation_lock(self)
|
||||||
|
|
||||||
|
@ -201,4 +241,6 @@ mobs.mob_step = function(self, dtime)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
]]--
|
]]--
|
||||||
|
|
||||||
|
self.old_velocity = self.object:get_velocity()
|
||||||
end
|
end
|
||||||
|
|
|
@ -51,4 +51,16 @@ mobs.get_velocity = function(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
--make mobs jump
|
||||||
|
mobs.jump = function(self, velocity)
|
||||||
|
|
||||||
|
if self.object:get_velocity().y ~= 0 or not self.old_velocity or (self.old_velocity and self.old_velocity.y > 0) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
velocity = velocity or 5
|
||||||
|
|
||||||
|
self.object:add_velocity(vector_new(0,velocity,0))
|
||||||
end
|
end
|
Loading…
Reference in New Issue