mirror of
https://github.com/ElCeejo/creatura.git
synced 2025-03-15 04:11:24 +00:00
Minor Improvements
This commit is contained in:
parent
c202b2e7c3
commit
b090238df0
4 changed files with 22 additions and 8 deletions
16
boids.lua
16
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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue