mirror of
https://github.com/minetest-mods/technic.git
synced 2024-12-25 10:20:37 +01:00
Better number formating
Is it 120000 or 1200000?
This commit is contained in:
parent
0c3f55e0c9
commit
d9bf9830b0
@ -1,3 +1,16 @@
|
|||||||
|
--load config
|
||||||
|
local sepchar, baresepchar = nil, nil
|
||||||
|
do
|
||||||
|
local sepcode = technic.config:get("thousand_separator")
|
||||||
|
--default is SI style
|
||||||
|
sepchar = sepcode and string.char(sepcode) or " "
|
||||||
|
baresepchar = sepchar
|
||||||
|
--handling if sepchar is magic...
|
||||||
|
for magic in string.gmatch("().%+-*?[^$", ".") do
|
||||||
|
if sepchar == magic then sepchar = "%"..sepchar end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Only changes name, keeps other params
|
-- Only changes name, keeps other params
|
||||||
function technic.swap_node(pos, name)
|
function technic.swap_node(pos, name)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
@ -44,3 +57,39 @@ function technic.get_or_load_node(pos)
|
|||||||
local MinEdge, MaxEdge = vm:read_from_map(pos, pos)
|
local MinEdge, MaxEdge = vm:read_from_map(pos, pos)
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function technic.format(str, ...)
|
||||||
|
local arg={...}
|
||||||
|
local param = nil
|
||||||
|
local percent = false
|
||||||
|
local res = ""
|
||||||
|
local i = 1
|
||||||
|
for c in str:gmatch"." do
|
||||||
|
if percent then
|
||||||
|
assert(c ~= "%") --syntax error
|
||||||
|
if c == "e" then
|
||||||
|
-- use enhanced number formatting
|
||||||
|
-- only works for unsigned numbers
|
||||||
|
local numstr = tostring(math.abs(arg[i]))
|
||||||
|
local a, b, body, frac = numstr:find("^(%d+)([.]?.-)$")
|
||||||
|
a = 1
|
||||||
|
body = body..baresepchar
|
||||||
|
while a ~= 0 do
|
||||||
|
body, a = body:gsub("(%d)(%d%d%d)"..sepchar, "%1"..sepchar.."%2"..sepchar, 1)
|
||||||
|
end
|
||||||
|
body = body:gsub(sepchar.."$", "")
|
||||||
|
res = res .. body .. frac
|
||||||
|
else
|
||||||
|
--use traditional string:format
|
||||||
|
res = res .. (string.format(("%"..c), arg[i]))
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
percent = false
|
||||||
|
elseif c == "%" then
|
||||||
|
percent = true
|
||||||
|
else
|
||||||
|
res = res .. c
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return res
|
||||||
|
end
|
@ -24,7 +24,7 @@ local run = function(pos, node)
|
|||||||
local charge_to_give = math.floor((light + pos1.y) * 3)
|
local charge_to_give = math.floor((light + pos1.y) * 3)
|
||||||
charge_to_give = math.max(charge_to_give, 0)
|
charge_to_give = math.max(charge_to_give, 0)
|
||||||
charge_to_give = math.min(charge_to_give, 200)
|
charge_to_give = math.min(charge_to_give, 200)
|
||||||
meta:set_string("infotext", S("%s Active"):format(machine_name).." ("..charge_to_give.."EU)")
|
meta:set_string("infotext", technic.format(S("%s Active (%e EU)"), machine_name, charge_to_give))
|
||||||
meta:set_int("LV_EU_supply", charge_to_give)
|
meta:set_int("LV_EU_supply", charge_to_give)
|
||||||
else
|
else
|
||||||
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
||||||
|
@ -55,7 +55,7 @@ local run = function(pos, node)
|
|||||||
meta:set_int("MV_EU_supply", power)
|
meta:set_int("MV_EU_supply", power)
|
||||||
end
|
end
|
||||||
|
|
||||||
meta:set_string("infotext", machine_name.." ("..power.."EU)")
|
meta:set_string("infotext", technic.format("%s (%eEU)", machine_name, power))
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node("technic:wind_mill", {
|
minetest.register_node("technic:wind_mill", {
|
||||||
|
@ -142,7 +142,7 @@ function technic.register_battery_box(data)
|
|||||||
.."^[lowpart:"..charge_percent
|
.."^[lowpart:"..charge_percent
|
||||||
..":technic_power_meter_fg.png]")
|
..":technic_power_meter_fg.png]")
|
||||||
|
|
||||||
local infotext = S("%s Battery Box: %d/%d"):format(tier,
|
local infotext = technic.format(S("%s Battery Box: %e/%e"), tier,
|
||||||
current_charge, max_charge)
|
current_charge, max_charge)
|
||||||
if eu_input == 0 then
|
if eu_input == 0 then
|
||||||
infotext = S("%s Idle"):format(infotext)
|
infotext = S("%s Idle"):format(infotext)
|
||||||
|
@ -28,7 +28,7 @@ function technic.register_solar_array(data)
|
|||||||
local charge_to_give = math.floor((light + pos.y) * data.power)
|
local charge_to_give = math.floor((light + pos.y) * data.power)
|
||||||
charge_to_give = math.max(charge_to_give, 0)
|
charge_to_give = math.max(charge_to_give, 0)
|
||||||
charge_to_give = math.min(charge_to_give, data.power * 50)
|
charge_to_give = math.min(charge_to_give, data.power * 50)
|
||||||
meta:set_string("infotext", S("%s Active"):format(machine_name).." ("..charge_to_give.."EU)")
|
meta:set_string("infotext", technic.format(S("%s Active (%e EU)"), machine_name, charge_to_give))
|
||||||
meta:set_int(tier.."_EU_supply", charge_to_give)
|
meta:set_int(tier.."_EU_supply", charge_to_give)
|
||||||
else
|
else
|
||||||
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
meta:set_string("infotext", S("%s Idle"):format(machine_name))
|
||||||
|
@ -291,7 +291,7 @@ minetest.register_abm({
|
|||||||
--dprint("Total BA demand:"..BA_eu_demand)
|
--dprint("Total BA demand:"..BA_eu_demand)
|
||||||
|
|
||||||
meta:set_string("infotext",
|
meta:set_string("infotext",
|
||||||
S("%s. Supply: %d Demand: %d"):format(
|
technic.format(S("%s. Supply: %e Demand: %e"),
|
||||||
machine_name, PR_eu_supply, RE_eu_demand))
|
machine_name, PR_eu_supply, RE_eu_demand))
|
||||||
|
|
||||||
-- If the PR supply is enough for the RE demand supply them all
|
-- If the PR supply is enough for the RE demand supply them all
|
||||||
|
Loading…
Reference in New Issue
Block a user