Module:TAMNAMS: Difference between revisions
Remove spaces surrounding pipe for udp as the standard is no spaces |
Added hardness range lookup for a range with arbitrary endpoints |
||
| Line 13: | Line 13: | ||
-- TODO? | -- TODO? | ||
-- - Function to parse a UDP and (possibly) scale degrees | -- - Function to parse a UDP and (possibly) scale degrees. | ||
-- - Separate interval/degree lookup into separate functions for for abbrevs and | |||
-- non-abbrev formats. | |||
-- - Added arbitrary hardness lookup for a single ratio (EG, passing in 13:8 | |||
-- would return "quasisoft". | |||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
| Line 372: | Line 376: | ||
-- use_extended is used to toggle between central range and extended range | -- use_extended is used to toggle between central range and extended range | ||
local named_ratio_range = use_extended and p.step_ratio_ranges_ext[key] or p.step_ratio_ranges[key] | local named_ratio_range = use_extended and p.step_ratio_ranges_ext[key] or p.step_ratio_ranges[key] | ||
return named_ratio_range | |||
end | |||
-------------------------------------------------------------------------------- | |||
------------------------- NAME FINDER FUNCTIONS -------------------------------- | |||
-------------------------------------------------------------------------------- | |||
-- Helper function | |||
-- "Rounds" step ratios up to the nearest named ratio | |||
function p.step_ratio_ceil(step_ratio) | |||
local hardness = step_ratio[1] / step_ratio[2] | |||
local rounded_step_ratio = nil | |||
if hardness > 1/1 and hardness <= 4/3 then | |||
rounded_step_ratio = {4,3} | |||
elseif hardness > 4/3 and hardness <= 3/2 then | |||
rounded_step_ratio = {3,2} | |||
elseif hardness > 3/2 and hardness <= 5/3 then | |||
rounded_step_ratio = {5,3} | |||
elseif hardness > 5/3 and hardness <= 2/1 then | |||
rounded_step_ratio = {2,1} | |||
elseif hardness > 2/1 and hardness <= 5/2 then | |||
rounded_step_ratio = {5,2} | |||
elseif hardness > 5/2 and hardness <= 3/1 then | |||
rounded_step_ratio = {3,1} | |||
elseif hardness > 3/1 and hardness <= 4/1 then | |||
rounded_step_ratio = {4,1} | |||
elseif hardness > 4/1 and hardness <= 1/0 then | |||
rounded_step_ratio = {1,0} | |||
end | |||
return rounded_step_ratio | |||
end | |||
-- Helper function | |||
-- "Rounds" step ratios down to the nearest named ratio | |||
function p.step_ratio_floor(step_ratio) | |||
local hardness = step_ratio[1] / step_ratio[2] | |||
local rounded_step_ratio = nil | |||
if hardness >= 1/1 and hardness < 4/3 then | |||
rounded_step_ratio = {1,1} | |||
elseif hardness >= 4/3 and hardness < 3/2 then | |||
rounded_step_ratio = {4,3} | |||
elseif hardness >= 3/2 and hardness < 5/3 then | |||
rounded_step_ratio = {3,2} | |||
elseif hardness >= 5/3 and hardness < 2/1 then | |||
rounded_step_ratio = {5,3} | |||
elseif hardness >= 2/1 and hardness < 5/2 then | |||
rounded_step_ratio = {2,1} | |||
elseif hardness >= 5/2 and hardness < 3/1 then | |||
rounded_step_ratio = {5,2} | |||
elseif hardness >= 3/1 and hardness < 4/1 then | |||
rounded_step_ratio = {3,1} | |||
elseif hardness >= 4/1 and hardness < 1/0 then | |||
rounded_step_ratio = {4,1} | |||
end | |||
return rounded_step_ratio | |||
end | |||
-- Function for finding the smallest step ratio range that encompasses the two | |||
-- ratios passed in. | |||
function p.find_step_ratio_range_for_ratio_pair(step_ratio_1, step_ratio_2, use_extended) | |||
local use_extended = use_extended == true | |||
-- Swap ratios so they're in the right order | |||
local hardness_1 = step_ratio_1[1] / step_ratio_1[2] | |||
local hardness_2 = step_ratio_2[1] / step_ratio_2[2] | |||
local lower_ratio = nil | |||
local upper_ratio = nil | |||
local named_ratio_range = "" | |||
if hardness_1 <= hardness_2 then | |||
lower_ratio = p.step_ratio_floor(step_ratio_1) | |||
upper_ratio = p.step_ratio_ceil (step_ratio_2) | |||
named_ratio_range = p.lookup_step_ratio_range(lower_ratio, upper_ratio, use_extended) | |||
else | |||
lower_ratio = p.step_ratio_floor(step_ratio_2) | |||
upper_ratio = p.step_ratio_ceil (step_ratio_1) | |||
named_ratio_range = p.lookup_step_ratio_range(lower_ratio, upper_ratio, use_extended) | |||
end | |||
return named_ratio_range | return named_ratio_range | ||
| Line 905: | Line 990: | ||
function p.tester() | function p.tester() | ||
return p. | return p.find_step_ratio_range_for_ratio_pair({13,8},{13,8}) | ||
end | end | ||
return p | return p | ||