Minor Improvements

This commit is contained in:
ElCeejo 2022-10-17 14:25:33 -07:00
parent c202b2e7c3
commit b090238df0
4 changed files with 22 additions and 8 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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