View difference between Paste ID: CskpEW72 and Qgf8PrJV
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();