i have some kind of solution for this: quality
a few small changes are enough (just replace the following two functions and leave the rest as it is):
local function get_current_tech_signals()
local alltechs = game.forces.player.technologies
log_debug(#alltechs.." techs total")
log_debug(#valid_signals.." infinite techs")
local techmap = {}
for _, techname in pairs(valid_signals) do
--log_debug(techname)
if techname then
--log_debug(techstring.." valid")
if game.forces.player.technologies[techname].valid then
log_debug(game.forces.player.technologies[techname].name)
log_debug(game.forces.player.technologies[techname].level)
table.insert(techmap, {
name = techname,
level = game.forces.player.technologies[techname].level,
cost = game.forces.player.technologies[techname].research_unit_count
})
end
end
end
log_debug(#techmap.." mapped")
return techmap
end
local function update_combinators()
if not storage.combinators then
log_debug("no combinators to update")
return
end
local signals = get_current_tech_signals()
local j = 0
for _, combinator in pairs(storage.combinators) do
control = combinator.get_control_behavior(defines.control_behavior.type.constant_combinator)
--log_debug(control.object_name)
for i = control.sections_count,1,-1 do
control.remove_section(i)
end
--log_debug(control.sections_count)
local section_level = control.add_section("[virtual-signal=signal-science-pack]")
local section_cost, section_costk, section_costkk, section_costkkk
if settings.global["research-analyzer-output-setting"].value == true then
section_cost = control.add_section("[virtual-signal=signal-science-pack] Cost")
section_costk = control.add_section("[virtual-signal=signal-science-pack] Cost / 1.000")
section_costkk = control.add_section("[virtual-signal=signal-science-pack] Cost / 1.000.000")
section_costkkk = control.add_section("[virtual-signal=signal-science-pack] Cost / 1.000.000.000")
end
if j==0 then
for i = 1, #signals do
local sig_value = { type = "virtual", name = signals[i].name, quality = "normal", comparator = nil }
local lf_level = { value = sig_value, min = signals[i].level, max = signals[i].level }
section_level.set_slot(i, lf_level)
if settings.global["research-analyzer-output-setting"].value == true then
local sig_cost = { type = "virtual", name = signals[i].name, quality = "uncommon", comparator = nil }
local lf_cost = { value = sig_cost, min = signals[i].cost, max = signals[i].cost }
section_cost.set_slot(i, lf_cost)
local sig_cost = { type = "virtual", name = signals[i].name, quality = "rare", comparator = nil }
local lf_costk = { value = sig_cost, min = math.floor(signals[i].cost / 1000), max = math.floor(signals[i].cost / 1000) }
section_costk.set_slot(i, lf_costk)
local sig_cost = { type = "virtual", name = signals[i].name, quality = "epic", comparator = nil }
local lf_costkk = { value = sig_cost, min = math.floor(signals[i].cost / 1000000), max = math.floor(signals[i].cost / 1000000) }
section_costkk.set_slot(i, lf_costkk)
local sig_cost = { type = "virtual", name = signals[i].name, quality = "legendary", comparator = nil }
local lf_costkkk = { value = sig_cost, min = math.floor(signals[i].cost / 1000000000), max = math.floor(signals[i].cost / 1000000000) }
section_costkkk.set_slot(i, lf_costkkk)
end
end
j=1
end
end
end
what does it do?
if the config you used for the switch between cost/level is true, it'll add 4 new sections to the research analyzer: one for each quality.
you only need one of those but since many costs exceed 2³² you can choose between:
uncommon = normal cost
rare = cost / 1 000
epic = cost / 1 000 000 and
legendary = cost / 1 000 000 000
at some point normal or even rare won't be enough to represent the cost so you can switch between them at any time.
why quality and not different signals?
because it's way easier to map a quality signal (cost) to a normal one (level) which is needed to set the next research.
example blueprint to auto research the cheapest one:
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