forked from mtcontrib/mobs_monster
add do_custom function so that spiders can climb walls
This commit is contained in:
parent
a8df74e063
commit
d6420071ab
57
spider.lua
57
spider.lua
@ -1,6 +1,12 @@
|
|||||||
|
|
||||||
local S = mobs.intllib
|
local S = mobs.intllib
|
||||||
|
|
||||||
|
local get_velocity = function(self)
|
||||||
|
|
||||||
|
local v = self.object:get_velocity()
|
||||||
|
|
||||||
|
return (v.x * v.x + v.z * v.z) ^ 0.5
|
||||||
|
end
|
||||||
|
|
||||||
-- Spider by AspireMint (CC-BY-SA 3.0 license)
|
-- Spider by AspireMint (CC-BY-SA 3.0 license)
|
||||||
|
|
||||||
@ -94,6 +100,57 @@ mobs:register_mob("mobs_monster:spider", {
|
|||||||
|
|
||||||
return true -- run only once, false/nil runs every activation
|
return true -- run only once, false/nil runs every activation
|
||||||
end,
|
end,
|
||||||
|
-- custom function to make spiders climb vertical facings
|
||||||
|
do_custom = function(self, dtime)
|
||||||
|
|
||||||
|
-- quarter second timer
|
||||||
|
self.spider_timer = (self.spider_timer or 0) + dtime
|
||||||
|
if self.spider_timer < 0.25 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
self.spider_timer = 0
|
||||||
|
|
||||||
|
-- need to be stopped to go onwards
|
||||||
|
if get_velocity(self) > 0.2 then
|
||||||
|
self.disable_falling = false
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local pos = self.object:get_pos()
|
||||||
|
local yaw = self.object:get_yaw()
|
||||||
|
|
||||||
|
pos.y = pos.y + self.collisionbox[2] - 0.2
|
||||||
|
|
||||||
|
local dir_x = -math.sin(yaw) * (self.collisionbox[4] + 0.5)
|
||||||
|
local dir_z = math.cos(yaw) * (self.collisionbox[4] + 0.5)
|
||||||
|
local nod = minetest.get_node_or_nil({
|
||||||
|
x = pos.x + dir_x,
|
||||||
|
y = pos.y + 0.5,
|
||||||
|
z = pos.z + dir_z
|
||||||
|
})
|
||||||
|
|
||||||
|
-- get current velocity
|
||||||
|
local v = self.object:get_velocity()
|
||||||
|
|
||||||
|
-- can only climb solid facings
|
||||||
|
if not nod or not minetest.registered_nodes[nod.name]
|
||||||
|
or not minetest.registered_nodes[nod.name].walkable then
|
||||||
|
self.disable_falling = nil
|
||||||
|
v.y = 0
|
||||||
|
self.object:set_velocity(v)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
--print ("----", nod.name, self.disable_falling, dtime)
|
||||||
|
|
||||||
|
-- turn off falling if attached to facing
|
||||||
|
self.disable_falling = true
|
||||||
|
|
||||||
|
-- move up facing
|
||||||
|
v.y = self.jump_height
|
||||||
|
mobs:set_animation(self, "jump")
|
||||||
|
self.object:set_velocity(v)
|
||||||
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user