From b090238df03649a0319a0f287157ac0e64870be6 Mon Sep 17 00:00:00 2001 From: ElCeejo Date: Mon, 17 Oct 2022 14:25:33 -0700 Subject: [PATCH] Minor Improvements --- boids.lua | 16 +++++++++------- mob_meta.lua | 2 +- settingtypes.txt | 3 +++ spawning.lua | 9 +++++++++ 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/boids.lua b/boids.lua index 58d81b7..a6fd7bc 100644 --- a/boids.lua +++ b/boids.lua @@ -111,13 +111,15 @@ function creatura.get_boid_dir(self) for _, object in ipairs(boids) do if object then boid_pos, vel = object:get_pos(), object:get_velocity() - local obj_yaw = object:get_yaw() - pos_no, pos_sum = pos_no + 1, vec_add(pos_sum, boid_pos) - sum_sin, sum_cos = sum_sin + sin(obj_yaw), sum_cos + cos(obj_yaw) - lift_no, lift_sum = lift_no + 1, lift_sum + vel.y - if not closest_pos - or vec_dist(pos, boid_pos) < vec_dist(pos, closest_pos) then - closest_pos = boid_pos + if boid_pos then + local obj_yaw = object:get_yaw() + pos_no, pos_sum = pos_no + 1, vec_add(pos_sum, boid_pos) + sum_sin, sum_cos = sum_sin + sin(obj_yaw), sum_cos + cos(obj_yaw) + lift_no, lift_sum = lift_no + 1, lift_sum + vel.y + if not closest_pos + or vec_dist(pos, boid_pos) < vec_dist(pos, closest_pos) then + closest_pos = boid_pos + end end end end diff --git a/mob_meta.lua b/mob_meta.lua index 57c85ee..18817c4 100644 --- a/mob_meta.lua +++ b/mob_meta.lua @@ -1187,7 +1187,7 @@ function mob:_vitals() local stand_def = creatura.get_node_def(node.name) if not self.max_breath or self.max_breath > 0 then - local head_pos = vec_raise(pos, self.height) + local head_pos = vec_raise(pos, self.height - 0.01) local head_node = minetest.get_node(head_pos) if minetest.get_item_group(head_node.name, "liquid") > 0 or creatura.get_node_def(head_node.name).walkable then diff --git a/settingtypes.txt b/settingtypes.txt index 81ff588..fb97f29 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -22,6 +22,9 @@ creatura_mapblock_limit (Max Mobs per Mapblock) int 99 # Minimum distance to a player for ABM Spawning creatura_min_abm_dist (Minimum ABM Spawning Distance) int 32 +# Allows Mobs to spawn in protected areas +creatura_protected_spawn (Protected Area Spawning) bool true + # Allotted time (in μs) per step for A* pathfinding (lower means less lag but slower pathfinding) creatura_a_star_alloted_time (A* Pathfinding Alloted time per step) int 500 diff --git a/spawning.lua b/spawning.lua index 8baa91c..fa6493e 100644 --- a/spawning.lua +++ b/spawning.lua @@ -311,6 +311,7 @@ local spawn_step = tonumber(minetest.settings:get("creatura_spawn_step")) or 15 local spawn_tick = 0 minetest.register_globalstep(function(dtime) + if #creatura.registered_mob_spawns < 1 then return end spawn_tick = spawn_tick - dtime if spawn_tick <= 0 then for _, player in ipairs(minetest.get_connected_players()) do @@ -487,6 +488,7 @@ minetest.register_abm({ spawn_cap = 5 })]] +local protected_spawn = minetest.settings:get_bool("creatura_protected_spawn", true) local abr = (tonumber(minetest.get_mapgen_setting("active_block_range")) or 4) * 16 local max_per_block = tonumber(minetest.settings:get("creatura_mapblock_limit")) or 99 local min_abm_dist = tonumber(minetest.settings:get("creatura_min_abm_dist")) or 32 @@ -517,6 +519,7 @@ function creatura.register_abm_spawn(mob, def) local max_light = def.max_light or 15 local min_group = def.min_group or 1 local max_group = def.max_group or 4 + local block_protected = def.block_protected_spawn or false local nodes = def.nodes or {"group:soil", "group:stone"} local neighbors = def.neighbors or {"air"} local spawn_on_load = def.spawn_on_load or false @@ -529,6 +532,12 @@ function creatura.register_abm_spawn(mob, def) pos.y = pos.y + 1 end + if (not protected_spawn + or block_protected) + and minetest.is_protected(pos, "") then + return + end + if spawn_on_load then -- Manual checks for LBMs if random(chance) > 1 then return end if not minetest.find_node_near(pos, 1, neighbors) then return end