@@ -45,30 +45,51 @@ events.on_entity_died = on_entity_remove
45
45
events .on_robot_pre_mined = on_entity_remove
46
46
47
47
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 )
50
51
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
54
56
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
57
64
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
60
69
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 )
66
78
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 )
72
93
end
73
94
end
74
95
end
0 commit comments