Tidy code, separate replace function

This commit is contained in:
TenPlus1 2015-10-16 16:51:27 +01:00
parent 4ae41c4d52
commit 534686ba33

44
api.lua
View File

@ -449,6 +449,21 @@ local function breed(self)
end end
end end
local function replace(self, pos)
if self.replace_rate
and self.child == false
and math.random(1, self.replace_rate) == 1 then
local pos = self.object:getpos()
pos.y = pos.y + self.replace_offset
-- print ("replace node = ".. minetest.get_node(pos).name, pos.y)
if self.replace_what
and self.object:getvelocity().y == 0
and #minetest.find_nodes_in_area(pos, pos, self.replace_what) > 0 then
minetest.set_node(pos, {name = self.replace_with})
end
end
end
-- register mob function -- register mob function
function mobs:register_mob(name, def) function mobs:register_mob(name, def)
@ -528,9 +543,12 @@ minetest.register_entity(name, {
on_step = function(self, dtime) on_step = function(self, dtime)
local pos = self.object:getpos()
local yaw = 0
-- remove monsters if playing on peaceful -- remove monsters if playing on peaceful
if (self.type == "monster" and peaceful_only) if (self.type == "monster" and peaceful_only)
or not within_limits(self.object:getpos(), 0) then or not within_limits(pos, 0) then
self.object:remove() self.object:remove()
return return
end end
@ -543,31 +561,17 @@ minetest.register_entity(name, {
and self.state ~= "attack" then and self.state ~= "attack" then
minetest.log("action", minetest.log("action",
"lifetimer expired, removed "..self.name) "lifetimer expired, removed "..self.name)
effect(self.object:getpos(), 15, "tnt_smoke.png") effect(pos, 15, "tnt_smoke.png")
self.object:remove() self.object:remove()
return return
end end
end end
-- node replace check (chicken lays egg, cow eats grass etc) -- node replace check (chicken lays egg, cow eats grass etc.)
if self.replace_rate replace(self, pos)
and self.child == false
and math.random(1, self.replace_rate) == 1 then
local pos = self.object:getpos()
pos.y = pos.y + self.replace_offset
-- print ("replace node = ".. minetest.get_node(pos).name, pos.y)
if self.replace_what
and self.object:getvelocity().y == 0
and #minetest.find_nodes_in_area(pos, pos, self.replace_what) > 0 then
minetest.set_node(pos, {name = self.replace_with})
end
end
local yaw = 0
if not self.fly then if not self.fly then
-- floating in water (or falling) -- floating in water (or falling)
local pos = self.object:getpos()
local v = self.object:getvelocity() local v = self.object:getvelocity()
-- going up then apply gravity -- going up then apply gravity
@ -599,10 +603,10 @@ minetest.register_entity(name, {
-- fall damage -- fall damage
if self.fall_damage == 1 if self.fall_damage == 1
and self.object:getvelocity().y == 0 then and self.object:getvelocity().y == 0 then
local d = (self.old_y or 0) - self.object:getpos().y local d = self.old_y - self.object:getpos().y
if d > 5 then if d > 5 then
self.object:set_hp(self.object:get_hp() - math.floor(d - 5)) self.object:set_hp(self.object:get_hp() - math.floor(d - 5))
effect(self.object:getpos(), 5, "tnt_smoke.png") effect(pos, 5, "tnt_smoke.png")
if check_for_death(self) then if check_for_death(self) then
return return
end end