SHOW:
|
|
- or go back to the newest paste.
1 | local args = {...}; | |
2 | ||
3 | local BRControl = { protocol = "BRControl" } | |
4 | ||
5 | - | local screen = "monitor_2" |
5 | + | local screen = "monitor_14" |
6 | - | local reactor = "BigReactors-Reactor_3" |
6 | + | local reactor = "BigReactors-Reactor_11" |
7 | local reactor1 = "BigReactors-Reactor_11" | |
8 | local reactor2 = "BigReactors-Reactor_10" | |
9 | local reactor3 = "BigReactors-Reactor_9" | |
10 | local reactor4 = "BigReactors-Reactor_7" | |
11 | local reactor5 = "BigReactors-Reactor_8" | |
12 | local reactor6 = "BigReactors-Reactor_5" | |
13 | local reactor7 = "BigReactors-Reactor_6" | |
14 | local reactor8 = "BigReactors-Reactor_12" | |
15 | ||
16 | local turbine1 = "BigReactors-Turbine_1" | |
17 | local turbine2 = "BigReactors-Turbine_2" | |
18 | local turbine3 = "BigReactors-Turbine_3" | |
19 | local turbine4 = "BigReactors-Turbine_4" | |
20 | local turbine5 = "BigReactors-Turbine_5" | |
21 | local turbine6 = "BigReactors-Turbine_6" | |
22 | local turbine7 = "BigReactors-Turbine_7" | |
23 | local turbine8 = "BigReactors-Turbine_8" | |
24 | ||
25 | - | function BRControl:ratio() |
25 | + | |
26 | - | return math.min( 100, 100*math.pow((self.info.energy_p+25)/100, 3) ); |
26 | + | |
27 | setmetatable(o,self); | |
28 | self.__index = self; | |
29 | return o:init(); | |
30 | end | |
31 | ||
32 | function BRControl:init() return self; end | |
33 | ||
34 | - | self.reactor = peripheral.wrap(reactor); |
34 | + | |
35 | while true do | |
36 | self:tick(); | |
37 | self:show(); | |
38 | self:wait(); | |
39 | end | |
40 | end | |
41 | ||
42 | local BRServer = BRControl:new{monitors={}}; | |
43 | - | active = self.reactor.getActive(), |
43 | + | |
44 | local monitors = self.monitors or {}; | |
45 | - | temp = self.reactor.getCasingTemperature(), |
45 | + | |
46 | - | waste = self.reactor.getWasteAmount(), |
46 | + | self.reactor1 = peripheral.wrap(reactor1); |
47 | self.reactor2 = peripheral.wrap(reactor2); | |
48 | - | fuel = self.reactor.getFuelAmount(), |
48 | + | self.reactor3 = peripheral.wrap(reactor3); |
49 | - | fuel_max = self.reactor.getFuelAmountMax(), |
49 | + | self.reactor4 = peripheral.wrap(reactor4); |
50 | - | fuel_reac = self.reactor.getFuelReactivity(), |
50 | + | self.reactor5 = peripheral.wrap(reactor5); |
51 | - | fuel_temp = self.reactor.getFuelTemperature(), |
51 | + | self.reactor6 = peripheral.wrap(reactor6); |
52 | - | fuel_tick = self.reactor.getFuelConsumedLastTick(), |
52 | + | self.reactor7 = peripheral.wrap(reactor7); |
53 | - | cool_p = 100 / self.reactor.getCoolantAmountMax() * self.reactor.getCoolantAmount(), |
53 | + | self.reactor8 = peripheral.wrap(reactor8); |
54 | - | steam_p = 100 / self.reactor.getHotFluidAmountMax() * self.reactor.getHotFluidAmount(), |
54 | + | self.turbine1 = peripheral.wrap(turbine1); |
55 | - | cool_max = self.reactor.getCoolantAmountMax(), |
55 | + | self.turbine2 = peripheral.wrap(turbine2); |
56 | - | cool_am = self.reactor.getCoolantAmount(), |
56 | + | self.turbine3 = peripheral.wrap(turbine3); |
57 | self.turbine4 = peripheral.wrap(turbine4); | |
58 | - | energy = self.reactor.getEnergyStored(), |
58 | + | self.turbine5 = peripheral.wrap(turbine5); |
59 | - | energy_p = self.reactor.getEnergyStored()/100000, |
59 | + | self.turbine6 = peripheral.wrap(turbine6); |
60 | - | energy_tick = self.reactor.getEnergyProducedLastTick() |
60 | + | self.turbine7 = peripheral.wrap(turbine7); |
61 | self.turbine8 = peripheral.wrap(turbine8); | |
62 | - | self.info.ratio = self:ratio(); |
62 | + | |
63 | - | self.reactor.setAllControlRodLevels(self:ratio()); |
63 | + | |
64 | - | rednet.broadcast(textutils.serialize(self.info),self.protocole); |
64 | + | |
65 | return self; | |
66 | end | |
67 | ||
68 | function BRServer:tick() | |
69 | self.info = { | |
70 | active1 = self.reactor1.getActive(), | |
71 | ||
72 | temp1 = self.reactor1.getCasingTemperature(), | |
73 | waste1 = self.reactor1.getWasteAmount(), | |
74 | ||
75 | fuel1 = self.reactor1.getFuelAmount(), | |
76 | fuel_max1 = self.reactor1.getFuelAmountMax(), | |
77 | fuel_reac1 = self.reactor1.getFuelReactivity(), | |
78 | fuel_temp1 = self.reactor1.getFuelTemperature(), | |
79 | fuel_tick1 = self.reactor1.getFuelConsumedLastTick(), | |
80 | ||
81 | cool_p1 = 100 / self.reactor1.getCoolantAmountMax() * self.reactor1.getCoolantAmount(), | |
82 | steam_p1 = 100 / self.reactor1.getHotFluidAmountMax() * self.reactor1.getHotFluidAmount(), | |
83 | csteam_p1 = self.reactor1.getHotFluidAmount(), | |
84 | power_max1 = self.turbine1.getEnergyProducedLastTick(), | |
85 | cool_max1 = self.reactor1.getCoolantAmountMax(), | |
86 | cool_am1 = self.reactor1.getCoolantAmount(), | |
87 | ||
88 | energy1 = self.reactor1.getEnergyStored(), | |
89 | energy_p1 = self.reactor1.getEnergyStored()/100000, | |
90 | energy_tick1 = self.reactor1.getEnergyProducedLastTick(), | |
91 | --___________________ | |
92 | active2 = self.reactor2.getActive(), | |
93 | ||
94 | temp2 = self.reactor2.getCasingTemperature(), | |
95 | - | UI.rectangle( monitor, 1,1,w,1, self.info.active and colors.blue or colors.orange ); |
95 | + | waste2 = self.reactor2.getWasteAmount(), |
96 | - | if self.info.active then |
96 | + | |
97 | - | UI.print.center(monitor, 1, "Reactor active", colors.white); |
97 | + | fuel2 = self.reactor2.getFuelAmount(), |
98 | - | else |
98 | + | fuel_max2 = self.reactor2.getFuelAmountMax(), |
99 | - | UI.print.center(monitor, 1, "Reactor inactive", colors.red); |
99 | + | fuel_reac2 = self.reactor2.getFuelReactivity(), |
100 | fuel_temp2 = self.reactor2.getFuelTemperature(), | |
101 | - | -- UI.print.center( monitor, 1, "Reactor Panel", colors.white ); |
101 | + | fuel_tick2 = self.reactor2.getFuelConsumedLastTick(), |
102 | ||
103 | - | UI.progress_bar( monitor, w-5, 3, 1, h-3, self.info.cool_p, colors.gray, colors.orange ); |
103 | + | cool_p2 = 100 / self.reactor2.getCoolantAmountMax() * self.reactor2.getCoolantAmount(), |
104 | - | UI.progress_bar( monitor, w-3, 3, 1, h-3, self.info.steam_p, colors.combine(colors.red, colors.orange), colors.gray); |
104 | + | steam_p2 = 100 / self.reactor2.getHotFluidAmountMax() * self.reactor2.getHotFluidAmount(), |
105 | - | UI.progress_bar( monitor, w-1, 3, 1, h-3, 100-self.info.ratio, colors.blue, colors.gray); |
105 | + | csteam_p2 = self.reactor2.getHotFluidAmount(), |
106 | power_max2 = self.turbine2.getEnergyProducedLastTick(), | |
107 | cool_max2 = self.reactor2.getCoolantAmountMax(), | |
108 | - | local align = w-8; |
108 | + | cool_am2 = self.reactor2.getCoolantAmount(), |
109 | ||
110 | - | UI.print.title( monitor, 3, 2, w-6, colors.gray, "ENERGY", colors.white ); |
110 | + | energy2 = self.reactor2.getEnergyStored(), |
111 | energy_p2 = self.reactor2.getEnergyStored()/100000, | |
112 | energy_tick2 = self.reactor2.getEnergyProducedLastTick(), | |
113 | - | UI.print.left( monitor, 5, "Coolant:", colors.lightGray, 1); |
113 | + | --___________________ |
114 | - | UI.print.left( monitor, 5, self.info.cool_am, colors.lightBlue,10 ); |
114 | + | active3 = self.reactor3.getActive(), |
115 | - | UI.print.left( monitor, 5, "/", colors.lightGray, 18); |
115 | + | |
116 | - | UI.print.left( monitor, 5, self.info.cool_max, colors.lightBlue, 20); |
116 | + | temp3 = self.reactor3.getCasingTemperature(), |
117 | - | UI.print.left( monitor, 5, "mB", colors.lightGray, 28); |
117 | + | waste3 = self.reactor3.getWasteAmount(), |
118 | ||
119 | - | UI.print.left(monitor, 12, self.info.fuel, colors.lime, 1); |
119 | + | fuel3 = self.reactor3.getFuelAmount(), |
120 | - | UI.print.left(monitor, 12, "/", colors.lightGray, 10); |
120 | + | fuel_max3 = self.reactor3.getFuelAmountMax(), |
121 | - | UI.print.left(monitor, 12, self.info.fuel_max, colors.lime, 12); |
121 | + | fuel_reac3 = self.reactor3.getFuelReactivity(), |
122 | - | UI.print.left(monitor, 12, "( )",colors.lightGray, 23); |
122 | + | fuel_temp3 = self.reactor3.getFuelTemperature(), |
123 | - | UI.print.left(monitor, 12, self.info.waste, colors.orange, 25); |
123 | + | fuel_tick3 = self.reactor3.getFuelConsumedLastTick(), |
124 | ||
125 | cool_p3 = 100 / self.reactor3.getCoolantAmountMax() * self.reactor3.getCoolantAmount(), | |
126 | - | UI.print.title( monitor, 8, 2, w-6, colors.gray, "FUEL", colors.white ); |
126 | + | steam_p3 = 100 / self.reactor3.getHotFluidAmountMax() * self.reactor3.getHotFluidAmount(), |
127 | csteam_p3 = self.reactor3.getHotFluidAmount(), | |
128 | power_max3 = self.turbine3.getEnergyProducedLastTick(), | |
129 | - | UI.bar( monitor, 2, 10, w-8, 1, colors.combine(colors.red, colors.yellow), { |
129 | + | cool_max3 = self.reactor3.getCoolantAmountMax(), |
130 | - | {["p"] = self.info.waste, ["color"] = colors.cyan }, |
130 | + | cool_am3 = self.reactor3.getCoolantAmount(), |
131 | - | {["p"] = self.info.fuel, ["color"] = colors.lime }, |
131 | + | |
132 | - | }, self.info.fuel_max ); |
132 | + | energy3 = self.reactor3.getEnergyStored(), |
133 | energy_p3 = self.reactor3.getEnergyStored()/100000, | |
134 | - | UI.print.title( monitor, 14, 2, w-6, colors.gray, "INFO", colors.white ); |
134 | + | energy_tick3 = self.reactor3.getEnergyProducedLastTick(), |
135 | --___________________ | |
136 | active4 = self.reactor4.getActive(), | |
137 | - | UI.print.right (monitor, 6, "Control Rod Level: ", colors.lightGray, align -12); |
137 | + | |
138 | - | UI.print.left(monitor, 6 , string.format("%i %",self.info.ratio),colors.orange, 21); |
138 | + | temp4 = self.reactor4.getCasingTemperature(), |
139 | - | UI.print.left(monitor,6, "%", colors.lightGray, 24); |
139 | + | waste4 = self.reactor4.getWasteAmount(), |
140 | ||
141 | - | UI.print.right( monitor, 16, "Case:", colors.lightGray, align +2 ); |
141 | + | fuel4 = self.reactor4.getFuelAmount(), |
142 | - | UI.print.left( monitor, 16, string.format("%i C",self.info.temp), colors.orange, 7 ); |
142 | + | fuel_max4 = self.reactor4.getFuelAmountMax(), |
143 | fuel_reac4 = self.reactor4.getFuelReactivity(), | |
144 | - | UI.print.right( monitor, 16, "Core:", colors.lightGray, align - 13 ); |
144 | + | fuel_temp4 = self.reactor4.getFuelTemperature(), |
145 | - | UI.print.left( monitor, 16, string.format("%i C",self.info.fuel_temp), colors.red, 22 ); |
145 | + | fuel_tick4 = self.reactor4.getFuelConsumedLastTick(), |
146 | ||
147 | cool_p4 = 100 / self.reactor4.getCoolantAmountMax() * self.reactor4.getCoolantAmount(), | |
148 | - | UI.print.right( monitor, 17, "Burn:", colors.lightGray, align +2 ); |
148 | + | steam_p4 = 100 / self.reactor4.getHotFluidAmountMax() * self.reactor4.getHotFluidAmount(), |
149 | - | UI.print.left( monitor, 17, string.format("%i ml/t",math.floor(self.info.fuel_tick*1000)), colors.orange, 7 ); |
149 | + | csteam_p4 = self.reactor4.getHotFluidAmount(), |
150 | power_max4 = self.turbine4.getEnergyProducedLastTick(), | |
151 | - | UI.print.right( monitor, 17, "E:", colors.lightGray, align -13 ); |
151 | + | cool_max4 = self.reactor4.getCoolantAmountMax(), |
152 | - | UI.print.left( monitor, 17, string.format("%i rf/ml",self.info.energy_tick/math.floor(self.info.fuel_tick*1000)), colors.orange, 22 ); |
152 | + | cool_am4 = self.reactor4.getCoolantAmount(), |
153 | ||
154 | energy4 = self.reactor4.getEnergyStored(), | |
155 | - | UI.print.right( monitor, 18, "Reac:", colors.lightGray, align +2 ); |
155 | + | energy_p4 = self.reactor4.getEnergyStored()/100000, |
156 | - | UI.print.left( monitor, 18, string.format("%i",self.info.fuel_reac), colors.yellow, 7 ); |
156 | + | energy_tick4 = self.reactor4.getEnergyProducedLastTick(), |
157 | - | UI.print.left( monitor, 18, "%", colors.lightGray, 10 ); |
157 | + | --___________________ |
158 | active5 = self.reactor5.getActive(), | |
159 | ||
160 | temp5 = self.reactor5.getCasingTemperature(), | |
161 | waste5 = self.reactor5.getWasteAmount(), | |
162 | ||
163 | fuel5 = self.reactor5.getFuelAmount(), | |
164 | fuel_max5 = self.reactor5.getFuelAmountMax(), | |
165 | fuel_reac5 = self.reactor5.getFuelReactivity(), | |
166 | fuel_temp5 = self.reactor5.getFuelTemperature(), | |
167 | fuel_tick5 = self.reactor5.getFuelConsumedLastTick(), | |
168 | ||
169 | cool_p5 = 100 / self.reactor5.getCoolantAmountMax() * self.reactor5.getCoolantAmount(), | |
170 | steam_p5 = 100 / self.reactor5.getHotFluidAmountMax() * self.reactor5.getHotFluidAmount(), | |
171 | csteam_p5 = self.reactor5.getHotFluidAmount(), | |
172 | power_max5 = self.turbine5.getEnergyProducedLastTick(), | |
173 | cool_max5 = self.reactor5.getCoolantAmountMax(), | |
174 | cool_am5 = self.reactor5.getCoolantAmount(), | |
175 | ||
176 | energy5 = self.reactor5.getEnergyStored(), | |
177 | energy_p5 = self.reactor5.getEnergyStored()/100000, | |
178 | energy_tick5 = self.reactor5.getEnergyProducedLastTick(), | |
179 | --___________________ | |
180 | active6 = self.reactor6.getActive(), | |
181 | ||
182 | temp6 = self.reactor6.getCasingTemperature(), | |
183 | waste6 = self.reactor6.getWasteAmount(), | |
184 | ||
185 | fuel6 = self.reactor6.getFuelAmount(), | |
186 | fuel_max6 = self.reactor6.getFuelAmountMax(), | |
187 | fuel_reac6 = self.reactor6.getFuelReactivity(), | |
188 | fuel_temp6 = self.reactor6.getFuelTemperature(), | |
189 | fuel_tick6 = self.reactor6.getFuelConsumedLastTick(), | |
190 | ||
191 | cool_p6 = 100 / self.reactor6.getCoolantAmountMax() * self.reactor6.getCoolantAmount(), | |
192 | steam_p6 = 100 / self.reactor6.getHotFluidAmountMax() * self.reactor6.getHotFluidAmount(), | |
193 | csteam_p6 = self.reactor6.getHotFluidAmount(), | |
194 | power_max6 = self.turbine6.getEnergyProducedLastTick(), | |
195 | cool_max6 = self.reactor6.getCoolantAmountMax(), | |
196 | cool_am6 = self.reactor6.getCoolantAmount(), | |
197 | ||
198 | energy6 = self.reactor6.getEnergyStored(), | |
199 | energy_p6 = self.reactor6.getEnergyStored()/100000, | |
200 | energy_tick6 = self.reactor6.getEnergyProducedLastTick(), | |
201 | --___________________ | |
202 | active7 = self.reactor7.getActive(), | |
203 | ||
204 | temp7 = self.reactor7.getCasingTemperature(), | |
205 | waste7 = self.reactor7.getWasteAmount(), | |
206 | ||
207 | fuel7 = self.reactor7.getFuelAmount(), | |
208 | fuel_max7 = self.reactor7.getFuelAmountMax(), | |
209 | fuel_reac7 = self.reactor7.getFuelReactivity(), | |
210 | fuel_temp7 = self.reactor7.getFuelTemperature(), | |
211 | fuel_tick7 = self.reactor7.getFuelConsumedLastTick(), | |
212 | ||
213 | cool_p7 = 100 / self.reactor7.getCoolantAmountMax() * self.reactor7.getCoolantAmount(), | |
214 | steam_p7 = 100 / self.reactor7.getHotFluidAmountMax() * self.reactor7.getHotFluidAmount(), | |
215 | csteam_p7 = self.reactor7.getHotFluidAmount(), | |
216 | power_max7 = self.turbine7.getEnergyProducedLastTick(), | |
217 | cool_max7 = self.reactor7.getCoolantAmountMax(), | |
218 | cool_am7 = self.reactor7.getCoolantAmount(), | |
219 | ||
220 | energy7 = self.reactor7.getEnergyStored(), | |
221 | energy_p7 = self.reactor7.getEnergyStored()/100000, | |
222 | energy_tick7 = self.reactor7.getEnergyProducedLastTick(), | |
223 | --___________________ | |
224 | active8 = self.reactor8.getActive(), | |
225 | ||
226 | temp8 = self.reactor8.getCasingTemperature(), | |
227 | waste8 = self.reactor8.getWasteAmount(), | |
228 | ||
229 | fuel8 = self.reactor8.getFuelAmount(), | |
230 | fuel_max8 = self.reactor8.getFuelAmountMax(), | |
231 | fuel_reac8 = self.reactor8.getFuelReactivity(), | |
232 | fuel_temp8 = self.reactor8.getFuelTemperature(), | |
233 | fuel_tick8 = self.reactor8.getFuelConsumedLastTick(), | |
234 | ||
235 | cool_p8 = 100 / self.reactor8.getCoolantAmountMax() * self.reactor8.getCoolantAmount(), | |
236 | steam_p8 = 100 / self.reactor8.getHotFluidAmountMax() * self.reactor8.getHotFluidAmount(), | |
237 | csteam_p8 = self.reactor8.getHotFluidAmount(), | |
238 | power_max8 = self.turbine8.getEnergyProducedLastTick(), | |
239 | cool_max8 = self.reactor8.getCoolantAmountMax(), | |
240 | cool_am8 = self.reactor8.getCoolantAmount(), | |
241 | ||
242 | energy8 = self.reactor8.getEnergyStored(), | |
243 | energy_p8 = self.reactor8.getEnergyStored()/100000, | |
244 | energy_tick8 = self.reactor8.getEnergyProducedLastTick() | |
245 | }; | |
246 | WasteSum = self.info.waste1 + self.info.waste2 + self.info.waste3 + self.info.waste4 + self.info.waste5 + self.info.waste6 + self.info.waste7 + self.info.waste8; | |
247 | ||
248 | FuelSum = self.info.fuel_tick1 + self.info.fuel_tick2 + self.info.fuel_tick3 + self.info.fuel_tick4 + self.info.fuel_tick5 + self.info.fuel_tick6 + self.info.fuel_tick7 + self.info.fuel_tick8; | |
249 | ||
250 | steam_sum = self.info.csteam_p8 + self.info.csteam_p7 + self.info.csteam_p6 + self.info.csteam_p5 + self.info.csteam_p4 + self.info.csteam_p3 + self.info.csteam_p2 + self.info.csteam_p1; | |
251 | ||
252 | power_sum = self.info.power_max8 + self.info.power_max7 + self.info.power_max6 + self.info.power_max5 + self.info.power_max4 + self.info.power_max3 + self.info.power_max2 + self.info.power_max1 ; | |
253 | ||
254 | rednet.broadcast(textutils.serialize(self.info),self.protocole); | |
255 | ||
256 | ||
257 | end | |
258 | ||
259 | function BRServer:show() | |
260 | local kiby = function ( i ,s ) | |
261 | local k = 0; | |
262 | while ( i >= 1000 ) do | |
263 | k = k+1; i = i/1000; | |
264 | end | |
265 | local suf = {[0] = "", [1] = "k", [2] = "M", [3] = "G", [4] = "T", [5] = "E"}; | |
266 | if ( k>5 ) then | |
267 | suf[k] = "{"..k.."}"; | |
268 | end | |
269 | return string.format("%i %s%s", i, suf[k], s ); | |
270 | end | |
271 | ||
272 | self.turn = self.turn ~= nil and self.turn + 1 or 1; | |
273 | term.current().setBackgroundColor( colors.gray ); | |
274 | term.current().clear(); | |
275 | ||
276 | local b,a = term.current().getSize(); | |
277 | local p = {[0]="-",[1]="/",[2]="|",[3]="\\"}; | |
278 | UI.rectangle( term.current(), 1,1,b,1, self.info.active and colors.blue or colors.orange ); | |
279 | UI.print.center( term.current(), 1, "BigReactor Server", colors.white ); | |
280 | UI.print.right( term.current(), 1, p[math.fmod(self.turn,4)], colors.white ); | |
281 | ||
282 | for i,monitor in pairs(self.monitors) do | |
283 | local w,h = monitor.getSize(); | |
284 | monitor.setBackgroundColor(colors.black); | |
285 | monitor.clear(); | |
286 | ||
287 | UI.rectangle( monitor, 1,1,w,1, colors.blue ); | |
288 | ||
289 | UI.print.center(monitor, 1, "REACTOR OVERVIEW", colors.white); | |
290 | ||
291 | UI.progress_bar( monitor, w-15, 3, 1, h-6, self.info.cool_p1, colors.gray, colors.lightBlue ); | |
292 | UI.progress_bar( monitor, w-13, 3, 1, h-6, self.info.cool_p2, colors.gray, colors.lightBlue ); | |
293 | UI.progress_bar( monitor, w-11, 3, 1, h-6, self.info.cool_p3, colors.gray, colors.lightBlue ); | |
294 | UI.progress_bar( monitor, w-9, 3, 1, h-6, self.info.cool_p4, colors.gray, colors.lightBlue ); | |
295 | UI.progress_bar( monitor, w-7, 3, 1, h-6, self.info.cool_p5, colors.gray, colors.lightBlue ); | |
296 | UI.progress_bar( monitor, w-5, 3, 1, h-6, self.info.cool_p6, colors.gray, colors.lightBlue ); | |
297 | UI.progress_bar( monitor, w-3, 3, 1, h-6, self.info.cool_p7, colors.gray, colors.lightBlue ); | |
298 | UI.progress_bar( monitor, w-1, 3, 1, h-6, self.info.cool_p8, colors.gray, colors.lightBlue ); | |
299 | ||
300 | UI.progress_bar( monitor, w-34, 3, 1, h-6, self.info.steam_p1, colors.gray, colors.orange ); | |
301 | UI.progress_bar( monitor, w-32, 3, 1, h-6, self.info.steam_p2, colors.gray, colors.orange ); | |
302 | UI.progress_bar( monitor, w-30, 3, 1, h-6, self.info.steam_p3, colors.gray, colors.orange ); | |
303 | UI.progress_bar( monitor, w-28, 3, 1, h-6, self.info.steam_p4, colors.gray, colors.orange ); | |
304 | UI.progress_bar( monitor, w-26, 3, 1, h-6, self.info.steam_p5, colors.gray, colors.orange ); | |
305 | UI.progress_bar( monitor, w-24, 3, 1, h-6, self.info.steam_p6, colors.gray, colors.orange ); | |
306 | UI.progress_bar( monitor, w-22, 3, 1, h-6, self.info.steam_p7, colors.gray, colors.orange ); | |
307 | UI.progress_bar( monitor, w-20, 3, 1, h-6, self.info.steam_p8, colors.gray, colors.orange ); | |
308 | ||
309 | ||
310 | ||
311 | UI.print.title( monitor, 3, 2, 23, colors.gray, "FUEL", colors.white ); | |
312 | monitor.setBackgroundColor( colors.black ); | |
313 | ||
314 | UI.print.left( monitor, 5,"1-A:" , colors.lightGray, 1); | |
315 | UI.print.left( monitor, 6,"1-B:" , colors.lightGray, 1); | |
316 | UI.print.left( monitor, 7,"2-A:" , colors.lightGray, 1); | |
317 | UI.print.left( monitor, 8,"2-B:" , colors.lightGray, 1); | |
318 | UI.print.left( monitor, 9,"3-A:" , colors.lightGray, 1); | |
319 | UI.print.left( monitor, 10,"3-B:" , colors.lightGray, 1); | |
320 | UI.print.left( monitor, 11,"4-A:" , colors.lightGray, 1); | |
321 | UI.print.left( monitor, 12,"4-B:" , colors.lightGray, 1); | |
322 | UI.print.left( monitor, 15,"SUM:" , colors.lightGray, 1); | |
323 | ||
324 | UI.print.left( monitor, 5, string.format("%i ml/t",math.floor(self.info.fuel_tick1*1000)), colors.orange, 8); | |
325 | UI.print.left( monitor, 6, string.format("%i ml/t",math.floor(self.info.fuel_tick2*1000)), colors.orange, 8); | |
326 | UI.print.left( monitor, 7, string.format("%i ml/t",math.floor(self.info.fuel_tick3*1000)), colors.orange, 8); | |
327 | UI.print.left( monitor, 8, string.format("%i ml/t",math.floor(self.info.fuel_tick4*1000)), colors.orange, 8); | |
328 | UI.print.left( monitor, 9, string.format("%i ml/t",math.floor(self.info.fuel_tick5*1000)), colors.orange, 8); | |
329 | UI.print.left( monitor, 10, string.format("%i ml/t",math.floor(self.info.fuel_tick6*1000)), colors.orange, 8); | |
330 | UI.print.left( monitor, 11, string.format("%i ml/t",math.floor(self.info.fuel_tick7*1000)), colors.orange, 8); | |
331 | UI.print.left( monitor, 12, string.format("%i ml/t",math.floor(self.info.fuel_tick8*1000)), colors.orange, 8); | |
332 | UI.print.left( monitor, 13, "_____________________", colors.lightGray, 1); | |
333 | UI.print.left( monitor, 15, string.format("%i ml/t",math.floor(FuelSum*1000)), colors.red, 7); | |
334 | ||
335 | UI.print.left( monitor, 5, string.format("%i",self.info.fuel_reac1), colors.yellow, 17 ) | |
336 | UI.print.left( monitor, 6, string.format("%i",self.info.fuel_reac2), colors.yellow, 17 ) | |
337 | UI.print.left( monitor, 7, string.format("%i",self.info.fuel_reac3), colors.yellow, 17 ) | |
338 | UI.print.left( monitor, 8, string.format("%i",self.info.fuel_reac4), colors.yellow, 17 ) | |
339 | UI.print.left( monitor, 9, string.format("%i",self.info.fuel_reac5), colors.yellow, 17 ) | |
340 | UI.print.left( monitor, 10, string.format("%i",self.info.fuel_reac6), colors.yellow, 17 ) | |
341 | UI.print.left( monitor, 11, string.format("%i",self.info.fuel_reac7), colors.yellow, 17 ) | |
342 | UI.print.left( monitor, 12, string.format("%i",self.info.fuel_reac8), colors.yellow, 17 ) | |
343 | ||
344 | UI.print.left( monitor, 5, "%", colors.yellow, 21 ) | |
345 | UI.print.left( monitor, 6, "%", colors.yellow, 21 ) | |
346 | UI.print.left( monitor, 7, "%", colors.yellow, 21 ) | |
347 | UI.print.left( monitor, 8, "%", colors.yellow, 21 ) | |
348 | UI.print.left( monitor, 9, "%", colors.yellow, 21 ) | |
349 | UI.print.left( monitor, 10, "%", colors.yellow, 21 ) | |
350 | UI.print.left( monitor, 11, "%", colors.yellow, 21 ) | |
351 | UI.print.left( monitor, 12, "%", colors.yellow, 21 ) | |
352 | ||
353 | --UI.print.left( monitor, 16, string.format("%i RF/t",math.floor(self.info.energy_tick)), colors.yellow, 9); | |
354 | ||
355 | UI.print.left( monitor, 17,"Current power production:" , colors.lightGray, 1); | |
356 | UI.print.left( monitor, 18,"Current steam production:" , colors.lightGray, 1); | |
357 | UI.print.right( monitor, 17,string.format("%i RF/t",math.floor(power_sum)) , colors.orange, w-39); | |
358 | UI.print.right( monitor, 18,string.format("%i l/t",math.floor(steam_sum)) , colors.yellow, w-38); | |
359 | ||
360 | end | |
361 | end | |
362 | ||
363 | function BRServer:wait() | |
364 | os.sleep(1); | |
365 | end | |
366 | ||
367 | local BRClient = BRControl:new{ inrange = false }; | |
368 | function BRControl:init() | |
369 | return self; | |
370 | end | |
371 | ||
372 | function BRClient:tick() end | |
373 | ||
374 | function BRClient:show() | |
375 | ||
376 | end | |
377 | ||
378 | function BRClient:wait() | |
379 | local s, m, p; | |
380 | if ( self.inrange ) then | |
381 | s, m, p = rednet.receive( self.protocol, 5 ); | |
382 | else | |
383 | s, m, p = rednet.receive( self.protocol ); | |
384 | end | |
385 | if ( m ~= nil ) then | |
386 | self.inrange = true; | |
387 | self:update( m ); | |
388 | else | |
389 | self.inrange = false; | |
390 | end | |
391 | end | |
392 | ||
393 | function BRClient:update( m ) | |
394 | m = textutils.unserialize(m); | |
395 | ||
396 | self.info.active = m.active; | |
397 | ||
398 | self.info.temp = m.temp; | |
399 | self.info.ratio = m.ratio; | |
400 | self.info.waste = m.waste; | |
401 | ||
402 | self.info.fuel = m.fuel; | |
403 | self.info.fuel_max = m.fuel_max; | |
404 | self.info.fuel_reac = m.fuel_reac; | |
405 | self.info.fuel_temp = m.fuel_temp; | |
406 | self.info.fuel_tick = m.fuel_tick; | |
407 | ||
408 | ||
409 | self.info.energy = m.energy; | |
410 | self.info.energy_tick = m.energy_tick; | |
411 | end | |
412 | ||
413 | UI = { print = {} }; | |
414 | function UI.print.rich( wd, x, y, text, color ) | |
415 | local a, b = wd.getCursorPos(); | |
416 | wd.setTextColor( color ); | |
417 | wd.setCursorPos( x, y ); | |
418 | wd.write(text); | |
419 | wd.setCursorPos( a, b ); | |
420 | end | |
421 | ||
422 | function UI.print.left( wd, line, text, color, offset ) | |
423 | UI.print.rich( wd, 1 + (offset or 0), line, text, color ); | |
424 | end | |
425 | ||
426 | function UI.print.center( wd, line, text, color, offset ) | |
427 | local w,h = wd.getSize(); | |
428 | UI.print.rich( wd, 1+(offset or 0) + w/2 - string.len(text)/2, line, text, color ); | |
429 | end | |
430 | ||
431 | function UI.print.right( wd, line, text, color, offset ) | |
432 | local w,h = wd.getSize(); | |
433 | UI.print.rich( wd, 1-(offset or 0) + w - string.len(text), line, text, color ); | |
434 | end | |
435 | ||
436 | function UI.print.title( wd, line, y1, y2, c1, title, c2) | |
437 | local t = UI.rectangle( wd, y1, line, y2-y1, 1, c1 ); | |
438 | UI.print.center( t, 1, title, c2 ); | |
439 | end | |
440 | ||
441 | function UI.rectangle( wd, x, y, w, h, color ) | |
442 | if type( wd ) ~= "table" or | |
443 | type( x ) ~= "number" or | |
444 | type( y ) ~= "number" or | |
445 | type( w ) ~= "number" or | |
446 | type( h ) ~= "number" then | |
447 | error( "Expected object, number, number, number, number, [boolean]", 2 ) | |
448 | end | |
449 | local r = window.create( wd, x, y, w, h ); | |
450 | r.setBackgroundColor( color ); r.clear(); | |
451 | return r; | |
452 | end | |
453 | ||
454 | function UI.bar( wd, x, y, w, h, c1, table, m ) | |
455 | local bar = UI.rectangle( wd, x, y, w, h, c1 ); | |
456 | local max, i = m or 100, ( h < w ) and 1 or 0; | |
457 | for k, pi in pairs( table ) do | |
458 | local p = pi.p / max; | |
459 | if ( h < w ) then | |
460 | UI.rectangle( bar, i, 1, p*w, h, pi.color ); | |
461 | i = i + p*w; | |
462 | else | |
463 | i = i + p*h; | |
464 | UI.rectangle( bar, 1, 2+h-i, w, math.ceil(p*h), pi.color ); | |
465 | end | |
466 | end | |
467 | end | |
468 | ||
469 | function UI.progress_bar( wd, x, y, w, h, p, c1, c2 ) | |
470 | UI.bar( wd, x, y, w, h, c1, {{ ["p"] = p+5, ["color"] = c2 }}); | |
471 | end | |
472 | ||
473 | function UI.modal( wd, x, y, w, h, title ) | |
474 | if ( type(title) == "table" ) then | |
475 | local head = window.create( wd, x, y, w, 3 ); | |
476 | head.setBackgroundColor( title.background ); | |
477 | head.clear(); head.setCursorPos(2,1); | |
478 | UI.print.center( head, title.text, title.color ); | |
479 | end | |
480 | return window.create(wd, x+3, y, w, h ); | |
481 | end | |
482 | ||
483 | ||
484 | -- Main [] | |
485 | local reactor = BRServer:new(); | |
486 | for i,arg in pairs(args) do | |
487 | if ( arg == "--client" ) then reactor = BRClient:new(); break; end; | |
488 | end | |
489 | for i,arg in pairs(args) do | |
490 | for protocol in arg:gmatch( "-p:(.*)" ) do | |
491 | reactor.protocole = protocol; break; | |
492 | end | |
493 | end; | |
494 | reactor:run(); |