Skip to content

Commit c8527b2

Browse files
committed
Merge red and green circuit values for monitors
The monitors shouldn't be terribly expensive, so there's no reason to keep their number down (I might change my mind if it turns out terribly expensive to keep reading circuit networks, but it probably won't be).
1 parent 31a7fcd commit c8527b2

File tree

1 file changed

+40
-19
lines changed

1 file changed

+40
-19
lines changed

Diff for: control.lua

+40-19
Original file line numberDiff line numberDiff line change
@@ -45,30 +45,51 @@ events.on_entity_died = on_entity_remove
4545
events.on_robot_pre_mined = on_entity_remove
4646

4747

48-
local function update_signals(tick)
49-
log("Update signals")
48+
local function merged_signals_from(entity)
49+
local red_network = entity.get_circuit_network(defines.wire_type.red)
50+
local green_network = entity.get_circuit_network(defines.wire_type.green)
5051

51-
for name, combi in combinators.each() do
52-
local red_network = combi.get_circuit_network(defines.wire_type.red)
53-
local green_network = combi.get_circuit_network(defines.wire_type.green)
52+
local merged = {}
53+
if red_network and red_network.signals then
54+
for _, s in pairs(red_network.signals) do
55+
if not merged[s.signal.type] then merged[s.signal.type] = {} end
5456

55-
local red_name = name.." red"
56-
local green_name = name.." green"
57+
local old_val = merged[s.signal.type][s.signal.name] or 0
58+
merged[s.signal.type][s.signal.name] = old_val + s.count
59+
end
60+
end
61+
if green_network and green_network.signals then
62+
for _, s in pairs(green_network.signals) do
63+
if not merged[s.signal.type] then merged[s.signal.type] = {} end
5764

58-
gui.remove_data_rows(red_name)
59-
gui.remove_data_rows(green_name)
65+
local old_val = merged[s.signal.type][s.signal.name] or 0
66+
merged[s.signal.type][s.signal.name] = old_val + s.count
67+
end
68+
end
6069

61-
if red_network and red_network.signals then
62-
for _, s in pairs(red_network.signals) do
63-
signals.add_sample(tick, s)
64-
gui.set_data_row(red_name, s)
65-
end
70+
local merged_signals = {}
71+
for type, sig in pairs(merged) do
72+
for name, count in pairs(sig) do
73+
local new_sig = {
74+
signal = { type = type, name = name },
75+
count = count
76+
}
77+
table.insert(merged_signals, new_sig)
6678
end
67-
if green_network and green_network.signals then
68-
for _, s in pairs(green_network.signals) do
69-
signals.add_sample(tick, s)
70-
gui.set_data_row(green_name, s)
71-
end
79+
end
80+
81+
return pairs(merged_signals)
82+
end
83+
84+
85+
local function update_signals(tick)
86+
log("Update signals")
87+
88+
for name, combi in combinators.each() do
89+
gui.remove_data_rows(name)
90+
for _, s in merged_signals_from(combi) do
91+
signals.add_sample(tick, s)
92+
gui.set_data_row(name, s)
7293
end
7394
end
7495
end

0 commit comments

Comments
 (0)