From f326fa620f1e715c541d56d59be4afce303f42f6 Mon Sep 17 00:00:00 2001 From: ancientmarinerdev Date: Fri, 12 May 2023 21:00:01 +0100 Subject: [PATCH] Optimise do states and env danger check --- mods/ENTITIES/mcl_mobs/api.lua | 8 +++---- mods/ENTITIES/mcl_mobs/movement.lua | 33 ++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 485ea1f65..323d25f10 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -316,7 +316,7 @@ end -- execute current state (stand, walk, run, attacks) -- returns true if mob has died -function mob_class:do_states(dtime) +function mob_class:do_states(dtime, player_in_active_range) --if self.can_open_doors then check_doors(self) end -- knockback timer. set in on_punch @@ -325,7 +325,7 @@ function mob_class:do_states(dtime) return end - self:env_danger_movement_checks (dtime) + self:env_danger_movement_checks(player_in_active_range) if self.state == PATHFINDING then self:check_gowp(dtime) @@ -336,7 +336,7 @@ function mob_class:do_states(dtime) else if mcl_util.check_dtime_timer(self, dtime, "onstep_dostates", 1) then if self.state == "stand" then - self:do_states_stand() + self:do_states_stand(player_in_active_range) elseif self.state == "walk" then self:do_states_walk() elseif self.state == "runaway" then @@ -452,7 +452,7 @@ local function on_step_work (self, dtime) end end - if self:do_states(dtime) then return end + if self:do_states(dtime, player_in_active_range) then return end if mobs_debug then self:update_tag() end diff --git a/mods/ENTITIES/mcl_mobs/movement.lua b/mods/ENTITIES/mcl_mobs/movement.lua index 147930b87..377e25f6e 100644 --- a/mods/ENTITIES/mcl_mobs/movement.lua +++ b/mods/ENTITIES/mcl_mobs/movement.lua @@ -6,6 +6,8 @@ local FLOP_HOR_SPEED = 1.5 local CHECK_HERD_FREQUENCY = 4 +local PATHFINDING = "gowp" + local node_snow = "mcl_core:snow" local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false @@ -279,10 +281,19 @@ function mob_class:is_at_water_danger() return false end -function mob_class:env_danger_movement_checks(dtime) +function mob_class:env_danger_movement_checks(player_in_active_range) local yaw = 0 - if self.state ~= "attack" and self:is_at_water_danger() then + if not player_in_active_range then return end + + if self.state == PATHFINDING + or self.state == "attack" + or self.state == "stand" + or self.state == "runaway" then + return + end + + if self:is_at_water_danger() then --minetest.log("At water danger for mob, stop?: " .. self.name) if math.random(1, 10) <= 7 then if self.state ~= "stand" then @@ -884,7 +895,7 @@ function mob_class:do_states_walk() end end -function mob_class:do_states_stand() +function mob_class:do_states_stand(player_in_active_range) local yaw = self.object:get_yaw() or 0 if math.random(1, 4) == 1 then @@ -928,14 +939,16 @@ function mob_class:do_states_stand() if self.order == "stand" or self.order == "sleep" or self.order == "work" then else - if self.walk_chance ~= 0 - and self.facing_fence ~= true - and math.random(1, 100) <= self.walk_chance - and self:is_at_cliff_or_danger() == false then + if player_in_active_range then + if self.walk_chance ~= 0 + and self.facing_fence ~= true + and math.random(1, 100) <= self.walk_chance + and self:is_at_cliff_or_danger() == false then - self:set_velocity(self.walk_velocity) - self.state = "walk" - self:set_animation( "walk") + self:set_velocity(self.walk_velocity) + self.state = "walk" + self:set_animation( "walk") + end end end end