Implement review/testing feedback

This commit is contained in:
ancientmarinerdev 2023-02-09 20:43:46 +00:00 committed by Gitea
parent b2dbf48e92
commit d4c2802afb
1 changed files with 35 additions and 45 deletions

View File

@ -40,7 +40,8 @@ local dbg_spawn_counts = {}
local remove_far = true local remove_far = true
local WAIT_FOR_SPAWN_ATTEMPT = 10 local WAIT_FOR_SPAWN_ATTEMPT = 10
local FIND_SPAWN_POS_RETRIES = 10 local FIND_SPAWN_POS_RETRIES = 16
local FIND_SPAWN_POS_RETRIES_SUCCESS_RESPIN = 8
local MOB_SPAWN_ZONE_INNER = 24 local MOB_SPAWN_ZONE_INNER = 24
local MOB_SPAWN_ZONE_MIDDLE = 32 local MOB_SPAWN_ZONE_MIDDLE = 32
@ -309,14 +310,14 @@ local function count_mobs_all(categorise_by, pos)
local mob_pos = entity.object:get_pos() local mob_pos = entity.object:get_pos()
if mob_pos then if mob_pos then
local distance = vector.distance(pos, mob_pos) local distance = vector.distance(pos, mob_pos)
mcl_log("distance: ".. distance) --mcl_log("distance: ".. distance)
if distance <= MOB_SPAWN_ZONE_MIDDLE then if distance <= MOB_SPAWN_ZONE_MIDDLE then
mcl_log("distance is close") --mcl_log("distance is close")
count_mobs_add_entry (mobs_found_close, mob_cat) count_mobs_add_entry (mobs_found_close, mob_cat)
count_mobs_add_entry (mobs_found_wide, mob_cat) count_mobs_add_entry (mobs_found_wide, mob_cat)
add_entry = true add_entry = true
elseif distance <= MOB_SPAWN_ZONE_OUTER then elseif distance <= MOB_SPAWN_ZONE_OUTER then
mcl_log("distance is wide") --mcl_log("distance is wide")
count_mobs_add_entry (mobs_found_wide, mob_cat) count_mobs_add_entry (mobs_found_wide, mob_cat)
add_entry = true add_entry = true
else else
@ -334,7 +335,7 @@ local function count_mobs_all(categorise_by, pos)
end end
end end
end end
mcl_log("num: ".. num) --mcl_log("num: ".. num)
return mobs_found_close, mobs_found_wide, num return mobs_found_close, mobs_found_wide, num
end end
@ -350,14 +351,27 @@ local function count_mobs_total_cap(mob_type)
return num return num
end end
local function output_mob_stats(mob_counts, total_mobs) local function output_mob_stats(mob_counts, total_mobs, chat_display)
if (total_mobs) then if (total_mobs) then
minetest.log("action", "Total mobs found: " .. total_mobs) local total_output = "Total mobs found: " .. total_mobs
if chat_display then
minetest.log(total_output)
else
minetest.log("action", total_output)
end
end end
local detailed = ""
if mob_counts then if mob_counts then
for k, v1 in pairs(mob_counts) do for k, v1 in pairs(mob_counts) do
minetest.log("action", "k: " .. tostring(k)) detailed = detailed .. tostring(k) .. ": " .. tostring(v1) .. "; "
minetest.log("action", "v1: " .. tostring(v1)) end
end
if detailed and detailed ~= "" then
if chat_display then
minetest.log(detailed)
else
minetest.log("action", detailed)
end end
end end
end end
@ -510,11 +524,13 @@ local two_pi = 2 * math.pi
local function get_next_mob_spawn_pos(pos) local function get_next_mob_spawn_pos(pos)
-- TODO We should consider spawning something a little further away sporadically. -- TODO We should consider spawning something a little further away sporadically.
-- It would be good for sky farms and variance, rather than all being on the 24 - 32 block away radius -- It would be good for sky farms and variance, rather than all being on the 24 - 32 block away radius
local distance = math_random(MOB_SPAWN_ZONE_INNER + 1, MOB_SPAWN_ZONE_MIDDLE) local distance = math_random(MOB_SPAWN_ZONE_INNER, MOB_SPAWN_ZONE_MIDDLE)
local angle = math_random() * two_pi local angle = math_random() * two_pi
-- TODO Floor xoff and zoff and add 0.5 so it tries to spawn in the middle of the square. Less failed attempts.
local xoff = math_round(distance * math_cos(angle)) local xoff = math_round(distance * math_cos(angle))
local yoff = math_round(distance * math_sin(angle)) local zoff = math_round(distance * math_sin(angle))
return vector.offset(pos, xoff, 0, yoff) return vector.offset(pos, xoff, 0, zoff)
end end
local function decypher_limits(posy) local function decypher_limits(posy)
@ -776,29 +792,6 @@ if mobs_spawn then
mcl_log("cap_space_close: " .. cap_space_close) mcl_log("cap_space_close: " .. cap_space_close)
end end
--TODO Remove old checks
local compare_to_old_checks = false
if compare_to_old_checks then
local mob_count_wide = count_mobs(pos,MOB_SPAWN_ZONE_OUTER,mob_type)
local mob_count_close = count_mobs(pos,MOB_CAP_INNER_RADIUS,mob_type)
if mob_total_wide ~= mob_count_wide then
mcl_log("old mob_count_wide: " .. mob_count_wide)
mcl_log("A difference in wide mob count")
else
--mcl_log("No difference in wide mob count")
end
if mob_total_close ~= mob_count_close then
mcl_log("old mob_count_close: " .. mob_count_close)
mcl_log("A difference in close mob count")
else
--mcl_log("No difference in close mob count")
end
end
return cap_space_wide, cap_space_close return cap_space_wide, cap_space_close
end end
@ -853,9 +846,8 @@ if mobs_spawn then
end end
local mob_counts_close, mob_counts_wide, total_mobs = count_mobs_all("spawn_class", spawning_position) local mob_counts_close, mob_counts_wide, total_mobs = count_mobs_all("spawn_class", spawning_position)
-- TODO remove output --output_mob_stats(mob_counts_close, total_mobs)
output_mob_stats(mob_counts_close, total_mobs) --output_mob_stats(mob_counts_wide)
output_mob_stats(mob_counts_wide, total_mobs)
--grab mob that fits into the spawning location --grab mob that fits into the spawning location
--randomly grab a mob, don't exclude any possibilities --randomly grab a mob, don't exclude any possibilities
@ -949,7 +941,7 @@ if mobs_spawn then
if spawned then if spawned then
--mcl_log("We have spawned") --mcl_log("We have spawned")
mob_counts_close, mob_counts_wide, total_mobs = count_mobs_all("type", pos) mob_counts_close, mob_counts_wide, total_mobs = count_mobs_all("type", pos)
local new_spawning_position = find_spawning_position(pos, 3) local new_spawning_position = find_spawning_position(pos, FIND_SPAWN_POS_RETRIES_SUCCESS_RESPIN)
if new_spawning_position then if new_spawning_position then
mcl_log("Setting new spawning position") mcl_log("Setting new spawning position")
spawning_position = new_spawning_position spawning_position = new_spawning_position
@ -1028,14 +1020,12 @@ end
minetest.register_chatcommand("mobstats",{ minetest.register_chatcommand("mobstats",{
privs = { debug = true }, privs = { debug = true },
func = function(n,param) func = function(n,param)
minetest.chat_send_player(n,dump(dbg_spawn_counts)) --minetest.chat_send_player(n,dump(dbg_spawn_counts))
local pos = minetest.get_player_by_name(n):get_pos() local pos = minetest.get_player_by_name(n):get_pos()
minetest.chat_send_player(n,"mobs within 32 radius of player:"..count_mobs(pos,MOB_CAP_INNER_RADIUS)) minetest.chat_send_player(n,"mobs: within 32 radius of player/total loaded :"..count_mobs(pos,MOB_CAP_INNER_RADIUS) .. "/" .. count_mobs_total())
minetest.chat_send_player(n,"total mobs:"..count_mobs_total()) minetest.chat_send_player(n,"spawning attempts since server start:" .. dbg_spawn_succ .. "/" .. dbg_spawn_attempts)
minetest.chat_send_player(n,"spawning attempts since server start:"..dbg_spawn_attempts)
minetest.chat_send_player(n,"successful spawns since server start:"..dbg_spawn_succ)
local mob_counts_close, mob_counts_wide, total_mobs = count_mobs_all("name") -- Can use "type" local mob_counts_close, mob_counts_wide, total_mobs = count_mobs_all("name") -- Can use "type"
output_mob_stats(mob_counts_wide, total_mobs) output_mob_stats(mob_counts_wide, total_mobs, true)
end end
}) })