simplify code and add comments
This commit is contained in:
parent
84202237f8
commit
476b36de6d
1 changed files with 8 additions and 13 deletions
|
@ -2055,34 +2055,29 @@ local do_states = function(self, dtime)
|
||||||
-- If mob in or on dangerous block, look for land
|
-- If mob in or on dangerous block, look for land
|
||||||
if is_in_danger then
|
if is_in_danger then
|
||||||
local tab_lp = nil
|
local tab_lp = nil
|
||||||
|
-- if water breathing, get water blocks around mob position
|
||||||
if self.breathes_in_water and self.fly then
|
if self.breathes_in_water and self.fly then
|
||||||
tab_lp = minetest.find_nodes_in_area({x=s.x-1, y=s.y-1, z=s.z-1}, {x=s.x+1, y=s.y+1, z=s.z+1}, {"group:water"})
|
tab_lp = minetest.find_nodes_in_area({x=s.x-1, y=s.y-1, z=s.z-1}, {x=s.x+1, y=s.y+1, z=s.z+1}, {"group:water"})
|
||||||
|
-- if mob is standing in water, it can only escape, if the destination is at water level
|
||||||
elseif minetest.get_item_group(self.standing_in, "water") then
|
elseif minetest.get_item_group(self.standing_in, "water") then
|
||||||
tab_lp = minetest.find_nodes_in_area_under_air({x=s.x-1, y=s.y-self.fear_height, z=s.z-1}, {x=s.x+1, y=s.y-1, z=s.z+1}, {"group:solid"})
|
|
||||||
elseif not self.jump then
|
|
||||||
tab_lp = minetest.find_nodes_in_area_under_air({x=s.x-1, y=s.y-1, z=s.z-1}, {x=s.x+1, y=s.y-1, z=s.z+1}, {"group:solid"})
|
tab_lp = minetest.find_nodes_in_area_under_air({x=s.x-1, y=s.y-1, z=s.z-1}, {x=s.x+1, y=s.y-1, z=s.z+1}, {"group:solid"})
|
||||||
|
-- if not jumping, destination needs to be on the same level, but we can consider falling down to the destination
|
||||||
|
elseif not self.jump then
|
||||||
|
tab_lp = minetest.find_nodes_in_area_under_air({x=s.x-1, y=s.y-self.fear_height, z=s.z-1}, {x=s.x+1, y=s.y-1, z=s.z+1}, {"group:solid"})
|
||||||
|
-- otherwise mob can also jump up to its destination
|
||||||
else
|
else
|
||||||
tab_lp = minetest.find_nodes_in_area_under_air({x=s.x-1, y=s.y-self.fear_height, z=s.z-1}, {x=s.x+1, y=s.y+(self.jump_height - 1), z=s.z+1}, {"group:solid"})
|
tab_lp = minetest.find_nodes_in_area_under_air({x=s.x-1, y=s.y-self.fear_height, z=s.z-1}, {x=s.x+1, y=s.y+(self.jump_height - 1), z=s.z+1}, {"group:solid"})
|
||||||
end
|
end
|
||||||
|
|
||||||
-- did we find land?
|
-- did we find land? Iterate over results
|
||||||
if #tab_lp >= 1 then
|
if #tab_lp >= 1 then
|
||||||
for index, lp in ipairs(tab_lp) do
|
for index, lp in ipairs(tab_lp) do
|
||||||
|
|
||||||
local nn = minetest.get_node(lp).name
|
local nn = minetest.get_node(lp).name
|
||||||
local node_above_ok = false
|
local node_above_ok = false
|
||||||
|
|
||||||
local y_difference = lp.y - s.y
|
|
||||||
local y_difference_ok = false
|
|
||||||
|
|
||||||
if y_difference <= 0 then
|
|
||||||
y_difference_ok = true
|
|
||||||
elseif (y_difference <= self.jump_height) and not minetest.get_item_group(nn, "water") then
|
|
||||||
y_difference_ok = true
|
|
||||||
end
|
|
||||||
|
|
||||||
-- is the chosen destination safe and walkable?
|
-- is the chosen destination safe and walkable?
|
||||||
if not is_node_dangerous(self, nn) and minetest.registered_nodes[nn].walkable and y_difference_ok then
|
if not is_node_dangerous(self, nn) and minetest.registered_nodes[nn].walkable then
|
||||||
-- check node at y + 2 above
|
-- check node at y + 2 above
|
||||||
local lp_above = {x = lp.x, y = lp.y + 1, z = lp.z}
|
local lp_above = {x = lp.x, y = lp.y + 1, z = lp.z}
|
||||||
local nn_above = minetest.get_node(lp_above).name
|
local nn_above = minetest.get_node(lp_above).name
|
||||||
|
|
Loading…
Add table
Reference in a new issue