Fix duplicate call for jump check

This commit is contained in:
ancientmarinerdev 2023-03-07 21:14:39 +00:00 committed by Gitea
parent 5fc78bf6b0
commit 5b7132ac5e
2 changed files with 24 additions and 20 deletions

View File

@ -40,15 +40,6 @@ if minetest.settings:get_bool("only_peaceful_mobs", false) then
end) end)
end end
local node_ok = function(pos, fallback)
fallback = fallback or mcl_mobs.fallback_node
local node = minetest.get_node_or_nil(pos)
if node and minetest.registered_nodes[node.name] then
return node
end
return minetest.registered_nodes[fallback]
end
function mob_class:update_tag() --update nametag and/or the debug box function mob_class:update_tag() --update nametag and/or the debug box
local tag local tag
if mobs_debug then if mobs_debug then

View File

@ -3,10 +3,7 @@ local mob_class = mcl_mobs.mob_class
local DEFAULT_FALL_SPEED = -9.81*1.5 local DEFAULT_FALL_SPEED = -9.81*1.5
local FLOP_HEIGHT = 6 local FLOP_HEIGHT = 6
local FLOP_HOR_SPEED = 1.5 local FLOP_HOR_SPEED = 1.5
local PATHFINDING = "gowp"
local node_ice = "mcl_core:ice"
local node_snowblock = "mcl_core:snowblock"
local node_snow = "mcl_core:snow" local node_snow = "mcl_core:snow"
@ -21,14 +18,19 @@ local function atan(x)
end end
end end
local registered_fallback_node = minetest.registered_nodes[mcl_mobs.fallback_node]
-- get node but use fallback for nil or unknown -- get node but use fallback for nil or unknown
local node_ok = function(pos, fallback) local node_ok = function(pos, fallback)
fallback = fallback or mcl_mobs.fallback_node
local node = minetest.get_node_or_nil(pos) local node = minetest.get_node_or_nil(pos)
if node and minetest.registered_nodes[node.name] then if node and minetest.registered_nodes[node.name] then
return node return node
end end
if fallback then
return minetest.registered_nodes[fallback] return minetest.registered_nodes[fallback]
else
return registered_fallback_node
end
end end
-- Returns true is node can deal damage to self -- Returns true is node can deal damage to self
@ -200,14 +202,19 @@ function mob_class:can_jump_cliff()
end end
-- is mob facing a cliff or danger -- is mob facing a cliff or danger
function mob_class:is_at_cliff_or_danger() function mob_class:is_at_cliff_or_danger(can_jump_cliff)
if self.fear_height == 0 or self:can_jump_cliff() or self._jumping_cliff or not self.object:get_luaentity() then -- 0 for no falling protection! if can_jump_cliff == nil then
can_jump_cliff = self:can_jump_cliff()
end
if self.fear_height == 0 or can_jump_cliff or self._jumping_cliff or not self.object:get_luaentity() then -- 0 for no falling protection!
return false return false
end end
local yaw = self.object:get_yaw() local yaw = self.object:get_yaw()
local dir_x = -math.sin(yaw) * (self.collisionbox[4] + 0.5) local dir_x = -math.sin(yaw) * (self.collisionbox[4] + 0.5)
local dir_z = math.cos(yaw) * (self.collisionbox[4] + 0.5) local dir_z = math.cos(yaw) * (self.collisionbox[4] + 0.5)
local pos = self.object:get_pos() local pos = self.object:get_pos()
local ypos = pos.y + self.collisionbox[2] -- just above floor local ypos = pos.y + self.collisionbox[2] -- just above floor
@ -234,8 +241,12 @@ end
-- copy the 'mob facing cliff_or_danger check' from above, and rework to avoid water -- copy the 'mob facing cliff_or_danger check' from above, and rework to avoid water
function mob_class:is_at_water_danger() function mob_class:is_at_water_danger(can_jump_cliff)
if not self.object:get_luaentity() or self:can_jump_cliff() or self._jumping_cliff then if can_jump_cliff == nil then
can_jump_cliff = self:can_jump_cliff()
end
if not self.object:get_luaentity() or can_jump_cliff or self._jumping_cliff then
return false return false
end end
local yaw = self.object:get_yaw() local yaw = self.object:get_yaw()
@ -276,7 +287,9 @@ end
function mob_class:env_danger_movement_checks(dtime) function mob_class:env_danger_movement_checks(dtime)
local yaw = 0 local yaw = 0
if self:is_at_water_danger() and self.state ~= "attack" then
local can_jump_cliff = self:can_jump_cliff()
if self:is_at_water_danger(can_jump_cliff) and self.state ~= "attack" then
if math.random(1, 10) <= 6 then if math.random(1, 10) <= 6 then
self:set_velocity(0) self:set_velocity(0)
self.state = "stand" self.state = "stand"
@ -291,7 +304,7 @@ function mob_class:env_danger_movement_checks(dtime)
end end
end end
if self:is_at_cliff_or_danger() then if self:is_at_cliff_or_danger(can_jump_cliff) then
self:set_velocity(0) self:set_velocity(0)
self.state = "stand" self.state = "stand"
self:set_animation( "stand") self:set_animation( "stand")