This repository has been archived by the owner on Aug 16, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPacked for pastebin.lua
112 lines (100 loc) · 2.36 KB
/
Packed for pastebin.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
local component = require("component")
local event = require("event")
local term = require("term")
MiningLaserController = {
layerOffset = 1,
onlyOres = true,
silktouch = false,
}
function MiningLaserController:new(address)
o = {}
setmetatable(o, self)
self.__index = self
o.proxy = component.proxy(address)
return o
end
function MiningLaserController:getState()
status, isActive, energy, currentLayer, mined, total = self.proxy.state()
return {
status = status,
isActive = isActive,
energy = energy,
currentLayer = currentLayer,
mined = mined,
total = total,
}
end
function MiningLaserController:start()
state = self:getState()
if not state.isActive then
self.proxy.offset(self.layerOffset)
self.proxy.onlyOres(self.onlyOres)
self.proxy.silktouch(self.silktouch)
self.proxy.start()
end
end
function MiningLaserController:stop()
state = self:getState()
if state.isActive then
self.proxy.stop()
end
end
Table = {
items = {},
offset = 1
}
function Table:new(renderHeader, renderItem, newLine)
o = {}
setmetatable(o, self)
self.__index = self
o.renderHeader = renderHeader
o.renderItem = renderItem
o.newLine = newLine
return o
end
function Table:render()
if (self.offset > #self.items) then
print("Invalid offset")
end
self.renderHeader()
for i=self.offset,#self.items do
self.newLine()
self.renderItem(self.items[i], i)
end
end
function renderHeader()
term.write("Status")
end
function newLine()
col, row = term.getCursor()
term.setCursor(1, row + 1)
end
function renderItem(item, index)
state = item:getState()
term.write(state.status .. " " .. tostring(state.isActive) .. " " .. state.energy .. " " .. state.currentLayer .. " " .. state.mined .. " " .. state.total)
end
local running = true
local miners = {}
for address,type in component.list("warpdriveMiningLaser", true) do
table.insert(miners, MiningLaserController:new(address))
end
local table = Table:new(renderHeader, renderItem, newLine)
table.items = miners
term.clear()
for key,miner in pairs(miners) do
miner:start()
end
while running do
term.setCursor(1,1)
table:render()
newLine()
print("Mining in progress. Press any key to stop.")
params = { event.pull(0.1) }
eventName = params[1]
if eventName == "key_down" then
running = false
end
end
for key,miner in pairs(miners) do
miner:stop()
end