mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-11-27 17:43:53 +01:00
wea.parse.chance: add weight mode
This commit is contained in:
parent
040d7fbfde
commit
81f3a87180
@ -1,12 +1,15 @@
|
||||
|
||||
--- Parses a chance value, and returns the 1-in-N value thereof.
|
||||
-- @param str string The string to parse.
|
||||
-- @param invert_percent string The operation mode. Valid modes: "1-in-n" (default), "weight". "1-in-n" refers to a 1-in-N chance of something happening (lower numbers mean greater likelihood). "weight", on the other hand, is instead a weighting that something will happen (higher numbers mean a greater likelihood).
|
||||
-- @returns number|nil The 1-in-N chance if parsing was successful, otherwise nil.
|
||||
function worldeditadditions.parse.chance(str)
|
||||
function worldeditadditions.parse.chance(str, mode)
|
||||
if not mode then mode = "1-in-n" end
|
||||
if tonumber(str) ~= nil then return tonumber(str) end
|
||||
if str:sub(#str) == "%" then
|
||||
local result = tonumber(str:sub(1, #str-1))
|
||||
if not result then return nil end
|
||||
if mode == "weight" then result = 100 - result end
|
||||
return 1 / (result / 100) -- Convert percentage to 1-in-N chance
|
||||
end
|
||||
return nil
|
||||
|
@ -27,7 +27,7 @@ function worldeditadditions.parse.weighted_nodes(parts, as_list, func_normalise)
|
||||
mode = MODE_EITHER
|
||||
elseif mode == MODE_EITHER then
|
||||
-- print("mode: either");
|
||||
local chance = tonumber(part)
|
||||
local chance = worldeditadditions.parse.chance(part, "weight")
|
||||
if not chance then
|
||||
-- print("not a chance, trying a node name")
|
||||
local node_name
|
||||
@ -59,5 +59,7 @@ function worldeditadditions.parse.weighted_nodes(parts, as_list, func_normalise)
|
||||
else result[last_node_name] = 1 end
|
||||
end
|
||||
|
||||
print(worldeditadditions.format.map(result, " "))
|
||||
|
||||
return true, result
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user