View difference between Paste ID: K4aw0Ajg and MHfCydwa
SHOW: | | - or go back to the newest paste.
1
if(fs.exists("widget") == false) then
2
	shell.run("pastebin get 6JsWa9Bj widget")
3
	term.clear()
4
end
5
os.loadAPI("widget")
6
7
if not term.isColor() then
8
  print("Advanced computer required")
9
  error()
10
end
11
12
local radar
13
local sides = peripheral.getNames()
14
for key,side in pairs(sides) do
15
  if peripheral.getType(side) == "warpdriveRadar" then
16
    print("Radar found on " .. side)
17
    radar = peripheral.wrap(side)
18
  end
19
end
20
if radar == nil or radar.isInterfaced() == nil then
21
  showErrorAndExit("No radar detected")
22
end
23
24
local range
25
if(fs.exists("range.settings") == false) then
26
	file = fs.open("range.settings", "w")
27
	file.write("100")
28
	file.close()
29
end
30
if(fs.exists("range.settings")) then
31
	file = fs.open("range.settings", "r")
32
	range = tonumber(file.readAll())
33
	file.close()
34
end
35
36
shipName = {}
37
shipX = {}
38
shipY = {}
39
shipZ = {}
40
shipMass = {}
41
shipRange = {}
42
43
for i=0, 27 do
44
	shipName[i]=""
45
	shipX[i]=0
46
	shipY[i]=0
47
	shipZ[i]=0
48
	shipMass[i]=0
49
	shipRange[i]=0
50
end
51
52
function interface() 
53
	term.clear()
54
	title = widget.newLabel("Aegis Scanning System MK1")
55
	row1 = widget.newRow()
56
	row1:add(title)
57
	ship1 = widget.newButton(shipName[0])
58
	ship2 = widget.newButton(shipName[1])
59
	ship3 = widget.newButton(shipName[2])
60
	row2 = widget.newRow()
61
	row2:add(ship1)
62
	function ship1.onClick(button)
63
		shipData(0)
64
	end
65
	row2:add(ship2)
66
	function ship2.onClick(button)
67
		shipData(1)
68
	end
69
	row2:add(ship3)
70
	function ship3.onClick(button)
71
		shipData(2)
72
	end
73
	ship4 = widget.newButton(shipName[3])
74
	ship5 = widget.newButton(shipName[4])
75
	ship6 = widget.newButton(shipName[5])
76
	row3 = widget.newRow()
77
	row3:add(ship4)
78
	function ship4.onClick(button)
79
		shipData(3)
80
	end
81
	row3:add(ship5)
82
	function ship5.onClick(button)
83
		shipData(4)
84
	end
85
	row3:add(ship6)
86
	function ship6.onClick(button)
87
		shipData(5)
88
	end
89
	ship7 = widget.newButton(shipName[6])
90
	ship8 = widget.newButton(shipName[7])
91
	ship9 = widget.newButton(shipName[8])
92
	row4 = widget.newRow()
93
	row4:add(ship7)
94
	function ship7.onClick(button)
95
		shipData(6)
96
	end
97
	row4:add(ship8)
98
	function ship8.onClick(button)
99
		shipData(7)
100
	end
101
	row4:add(ship9)
102
	function ship9.onClick(button)
103
		shipData(8)
104
	end
105
	ship10 = widget.newButton(shipName[9])
106
	ship11 = widget.newButton(shipName[10])
107
	ship12 = widget.newButton(shipName[11])
108
	row5 = widget.newRow()
109
	row5:add(ship10)
110
	function ship10.onClick(button)
111
		shipData(9)
112
	end
113
	row5:add(ship11)
114
	function ship11.onClick(button)
115
		shipData(10)
116
	end
117
	row5:add(ship12)
118
	function ship12.onClick(button)
119
		shipData(11)
120
	end
121
	ship13 = widget.newButton(shipName[12])
122
	ship14 = widget.newButton(shipName[13])
123
	ship15 = widget.newButton(shipName[14])
124
	row6 = widget.newRow()
125
	row6:add(ship13)
126
	function ship13.onClick(button)
127
		shipData(12)
128
	end
129
	row6:add(ship14)
130
	function ship14.onClick(button)
131
		shipData(13)
132
	end
133
	row6:add(ship15)
134
	function ship15.onClick(button)
135
		shipData(14)
136
	end
137
	ship16 = widget.newButton(shipName[15])
138
	ship17 = widget.newButton(shipName[16])
139
	ship18 = widget.newButton(shipName[17])
140
	row7 = widget.newRow()
141
	row7:add(ship16)
142
	function ship16.onClick(button)
143
		shipData(15)
144
	end
145
	row7:add(ship17)
146
	function ship17.onClick(button)
147
		shipData(16)
148
	end
149
	row7:add(ship18)
150
	function ship18.onClick(button)
151
		shipData(17)
152
	end
153
	ship19 = widget.newButton(shipName[18])
154
	ship20 = widget.newButton(shipName[19])
155
	ship21 = widget.newButton(shipName[20])
156
	row8 = widget.newRow()
157
	row8:add(ship19)
158
	function ship19.onClick(button)
159
		shipData(18)
160
	end
161
	row8:add(ship20)
162
	function ship20.onClick(button)
163
		shipData(19)
164
	end
165
	row8:add(ship21)
166
	function ship21.onClick(button)
167
		shipData(20)
168
	end
169
	row20 = widget.newRow()
170
	sRange = widget.newButton("Range Settings")
171
	function sRange.onClick(button)
172
		rangeSettings()
173
	end
174
	startScan = widget.newButton("Scan")
175
	function startScan.onClick(button)
176
		scan()
177
	end
178
	row20:add(sRange)
179
	row20:add(startScan)
180
	main = widget.newColumn()
181
	main:add(row1)
182
	main:add(row2)
183
	main:add(row3)
184
	main:add(row4)
185
	main:add(row5)
186
	main:add(row6)
187
	main:add(row7)
188
	main:add(row8)
189
	main:add(row20)
190
	main:run()
191
end
192
193
function scan()
194
	radar.radius(range)
195
	local success, result = radar.getEnergyRequired()
196
	if not success then
197
		term.clear()
198
		title = widget.newLabel("Aegis Scanning System MK1")
199
		row1 = widget.newRow()
200
		row1:add(title)
201
		row2 = widget.newRow()
202
		energy = widget.newLabel("Not enough Energy!")
203
		row3 = widget.newRow()
204
		row3:add(energy)
205
		row4 = widget.newRow()
206
		row5 = widget.newRow()
207
		row6 = widget.newRow()
208
		row7 = widget.newRow()
209
		row8 = widget.newRow()
210
		okay = widget.newButton("Okay!")
211
		function okay.onClick(button)
212
			interface()
213
		end
214
		row20 = widget.newRow()
215
		row20:add(okay)
216
		main = widget.newColumn()
217
		main:add(row1)
218
		main:add(row2)
219
		main:add(row3)
220
		main:add(row4)
221
		main:add(row5)
222
		main:add(row6)
223
		main:add(row7)
224
		main:add(row8)
225
		main:add(row20)
226
		main:run()
227
	end
228
	local energyRequired = result
229
	local energyStored, _, energyUnits = radar.getEnergyStatus()
230
	if energyStored < energyRequired then
231
			term.clear()
232
		title = widget.newLabel("Aegis Scanning System MK1")
233
		row1 = widget.newRow()
234
		row1:add(title)
235
		row2 = widget.newRow()
236
		energy = widget.newLabel("Not enough Energy!")
237
		row3 = widget.newRow()
238
		row3:add(energy)
239
		row4 = widget.newRow()
240
		row5 = widget.newRow()
241
		row6 = widget.newRow()
242
		row7 = widget.newRow()
243
		row8 = widget.newRow()
244
		okay = widget.newButton("Okay!")
245
		function okay.onClick(button)
246
			interface()
247
		end
248
		row20 = widget.newRow()
249
		row20:add(okay)
250
		main = widget.newColumn()
251
		main:add(row1)
252
		main:add(row2)
253
		main:add(row3)
254
		main:add(row4)
255
		main:add(row5)
256
		main:add(row6)
257
		main:add(row7)
258
		main:add(row8)
259
		main:add(row20)
260
		main:run()
261
	end
262
	local scanDuration = radar.getScanDuration()
263
	radar.start()
264
	os.sleep(0.5)
265
	 
266
	print("        Scanning... (" .. scanDuration .. " s)")
267
	os.sleep(scanDuration)
268
	
269
	local delay = 0
270
	local count
271
	repeat
272
	  count = radar.getResultsCount()
273
	  os.sleep(0.1)
274
	  delay = delay + 1
275
	until (count ~= nil and count ~= -1) or delay > 10
276
	
277
	if count ~= nil and count > 0 then
278
		term.clear()
279
		term.setCursorPos(1, 1)
280
		filtered = 0
281
		for i=0, count-1 do
282
			local success, type, name, x, y, z, mass = radar.getResult(i)
283
			local ssuccess, dimension, sx, sy, sz, system = radar.getGlobalPosition()
284
			if success then
285
				if name ~= "" then
286
					shipName[i-filtered] = name
287
					shipX[i-filtered] = x
288
					shipY[i-filtered] = y
289
					shipZ[i-filtered] = z
290
					shipMass[i-filtered] = mass
291
					shipRange[i-filtered] = math.floor(math.sqrt((x-sx)^2+(z-sz)^2))
292
				else
293
					filtered = filtered+1
294
				end
295
			else
296
				showError("Error " .. type)
297
			end
298
		end
299
		interface()
300
	end
301
end
302
303
function rangeSettings()
304
	term.clear()
305
	title = widget.newLabel("Aegis Scanning System MK1")
306
	row1 = widget.newRow()
307
	row1:add(title)
308
	row2 = widget.newRow()
309
	cRange = widget.newLabel("Current Range: "..range)
310
	row3 = widget.newRow()
311
	row3:add(cRange)
312
	slider = widget.newSlider(1, 40)
313
	sValue = slider.value
314
	row4 = widget.newRow()
315
	row4:add(slider)
316
	row5 = widget.newRow()
317
	row6 = widget.newRow()
318
	row7 = widget.newRow()
319
	accept = widget.newButton("Accept")
320
	function accept.onClick(button)
321
		range = slider.value*25
322
		if(fs.exists("range.settings")) then
323
			file = fs.open("range.settings", "w")
324
			file.write(slider.value*25)
325
			file.close()
326
		end
327
		interface()
328
	end
329
	decline = widget.newButton("Decline")
330
	function decline.onClick(button)
331
		interface()
332
	end
333
	row8 = widget.newRow()
334
	row8:add(accept)
335
	row8:add(decline)
336
	row20 = widget.newRow()
337
	main = widget.newColumn()
338
	main:add(row1)
339
	main:add(row2)
340
	main:add(row3)
341
	main:add(row4)
342
	main:add(row5)
343
	main:add(row6)
344
	main:add(row7)
345
	main:add(row8)
346
	main:add(row20)
347
	main:run()
348
end
349
350
function shipData(num)
351
	if(shipName[num] ~= "") then
352
		term.clear()
353
		title = widget.newLabel("Aegis Scanning System MK1")
354
		row1 = widget.newRow()
355
		row1:add(title)
356
		row2 = widget.newRow()
357
		sName = widget.newLabel("Name: "..shipName[num])
358
		row3 = widget.newRow()
359
		row2:add(sName)
360
		sX = widget.newLabel("Position X: "..shipX[num])
361
		row4 = widget.newRow()
362
		row3:add(sX)
363
		sY = widget.newLabel("Position Y: "..shipY[num])
364
		row5 = widget.newRow()
365
		row4:add(sY)
366
		sZ = widget.newLabel("Position Z: "..shipZ[num])
367
		row6 = widget.newRow()
368
		row5:add(sZ)
369
		sMass = widget.newLabel("Mass: "..shipMass[num].." tons")
370
		row7 = widget.newRow()
371
		row6:add(sMass)
372
		sRange = widget.newLabel("Distance: "..shipRange[num].."m")
373
		row8 = widget.newRow()
374
		row7:add(sRange)
375
		okay = widget.newButton("Okay!")
376
		function okay.onClick(button)
377
			interface()
378
		end
379
		row20 = widget.newRow()
380
		row20:add(okay)
381
		main = widget.newColumn()
382
		main:add(row1)
383
		main:add(row2)
384
		main:add(row3)
385
		main:add(row4)
386
		main:add(row5)
387
		main:add(row6)
388
		main:add(row7)
389
		main:add(row8)
390
		main:add(row20)
391
		main:run()
392
	else 
393
		term.clear()
394
		title = widget.newLabel("Aegis Scanning System MK1")
395
		row1 = widget.newRow()
396
		row1:add(title)
397
		row2 = widget.newRow()
398
		noShips = widget.newLabel("No Ship found!")
399
		row3 = widget.newRow()
400
		row3:add(noShips)
401
		row4 = widget.newRow()
402
		row5 = widget.newRow()
403
		row6 = widget.newRow()
404
		row7 = widget.newRow()
405
		row8 = widget.newRow()
406
		okay = widget.newButton("Okay!")
407
		function okay.onClick(button)
408
			interface()
409
		end
410
		row20 = widget.newRow()
411
		row20:add(okay)
412
		main = widget.newColumn()
413
		main:add(row1)
414
		main:add(row2)
415
		main:add(row3)
416
		main:add(row4)
417
		main:add(row5)
418
		main:add(row6)
419
		main:add(row7)
420
		main:add(row8)
421
		main:add(row20)
422
		main:run()
423
	end
424
end
425
426
interface()