View difference between Paste ID: tgxDyYjW and h6n37nfq
SHOW: | | - or go back to the newest paste.
1
-- locals
2
local logs = {}
3-
local openTime = 5
3+
local openTime = 2
4
local textSize = 1
5
local minimumNameLength = 4
6
local buttonPadding = 1 --Min 1, Space before/after
7
local centerPadding = 0 --Min 0, Space before/after
8
9-
local buttonColor = colors.lightGray
9+
local buttonColor = colors.blue
10-
local buttonActiveColor = colors.orange
10+
local buttonActiveColor = colors.gray
11
local pageBack = "Prev Page"
12
local pageFore = "Next Page"
13
local resetButton = "Refresh"
14
-- Hub Portals
15
local portals = {
16
17-
  { name="Nether"; address="Dehsetcro Migomcor Ormpra" },
17+
  { name="Spawn", x="238", y="139", z="-3038"},
18-
  { name="DS7"; address="Sileston Alsetbrei Lanulf" },
18+
  { name="BloodMagic", x="-729", y="66", z="4116"},
19-
  { name="Rapture"; address="Sileston Amecar Othgon"},
19+
  { name="Doomgull", x="-3629", y="65", z="-1070"},
20-
  { name="Spawn"; address="Sileston Protaset Erpulf"},
20+
  { name="DLI/Kelec", x="4569", y="90", z="-538"},
21-
  { name="Reign"; address="Sileston Vamaclos Othas"},
21+
  { name="Blue", x="-619", y="64", z="1055"}
22-
  { name="Moon"; address="Croursal Gonarva Ecsil"},
22+
23-
  { name="The End"; address="Erpclaus Ommaculf Lanal"}
23+
24
25
26-
--local portals = {
26+
27-
--  { name="Hub"; address="Dehsetcro Migomcor Ormpra" }
27+
28-
--}
28+
local transporter
29
local monitorLocation
30
local monX = 0
31
local monY = 0
32-
local gate
32+
33
local monMidR = 0
34
local maxNameLength = 0
35
local problem = false
36
local names = {}
37
local curPage = 1
38
local lastPage = 1
39
local namesPerPage = 1
40
local pages = {}
41
local transType = 'mo_transporter'
42
--transporter = peripheral.find(transType)
43
transporter = peripheral.wrap("mo_transporter_0")
44
45-
local gateType = 'Abstract Bus Adapter'
45+
46
  print(text)
47
end
48
49
function init()
50
  if not fs.exists('apis') then
51
    fs.makeDir('apis')
52
  end
53
  if not fs.exists('apis/touchpoint') then
54
    writeLog("You don't have the touchpoint API. Beaming it down.")
55
    shell.run('pastebin get pFHeia96 apis/touchpoint')
56
  end
57
  os.loadAPI('apis/touchpoint')
58
  
59
  
60
  if not fs.exists('apis/json') then
61
    writeLog("You don't have the JSON API. Grabboring it.")
62
    shell.run("pastebin get 4nRg9CHU apis/json")
63
  end
64
  os.loadAPI('apis/json')
65
  
66
  monitorLocation = findSideFor('monitor')
67
  monitor = peripheral.wrap(monitorLocation)
68
69
  
70
  setupScreen()
71-
  gate    = peripheral.find(gateType)
71+
72
73
function handleMonitorResize()
74
  writeLog("Screen resized. Setting up screen!")
75
  setupScreen()
76
  refresh()
77
end
78
79
80
function determineLength(myString)
81
  local theLength = 0
82
  if string.len(myString) > maxNameLength then
83
    theLength = maxNameLength + buttonPadding * 2
84
  else
85
    theLength = string.len(myString) + buttonPadding * 2
86
  end
87
 
88
  return theLength
89
end
90
 
91
92
function setupScreen()
93
  monitor.clear()
94
  monitor.setTextScale(textSize)
95
  monX, monY = monitor.getSize()
96
  monitor.setTextColor(colors.orange)
97
98
  writeLog("Screen Dimensions: (x: "..monX..", y: "..monY..")")
99
  
100
  if (monY < 5) or (monX < (minimumNameLength * 2) + 4) then
101
    monitor.setBackgroundColor(colors.red)
102
    monitor.setTextColor(colors.black)
103
    centerText("!!!", 3)
104
    centerText("ERROR", 4)
105
    centerText("VIEW COMPUTER", 5)
106
    writeLog("Screen too small with current resolution, please adjust.")
107
    problem = true
108
  else
109
    if math.floor(monX/2) == math.ceil(monX/2) then --Even
110
      monMidR = monX/2 + 1
111
      monMidL = monMidR - 1
112
      maxNameLength = (monX - 4)/2 - (centerPadding + buttonPadding) * 2
113
    else --Odd
114
      monMidR = math.floor(monX/2) + 1
115
      monMidL = monMidR
116
      maxNameLength = (monX - 3)/2 - (centerPadding + buttonPadding) * 2
117
    end
118
    namesPerPage = math.ceil((monY - 4) / 2) * 2
119
  end
120
end
121
122
function rebuildPages(p1)
123
  pages[curPage]:toggleButton(resetButton)
124
  refresh()
125
end
126
127
function doAction(buttonName)
128
  local pressedButtonDesc = 0;
129
  
130-
  local pressedButtonDesc
130+
131
  
132
  for k,v in ipairs(portals) do
133
    if v["name"] == buttonName then
134
      pressedButtonDesc = v
135
      break
136
    end
137
  end
138
  --writeLog("array variable = "..pressedButtonDesc["x"])
139
  startTransport(pressedButtonDesc["x"],pressedButtonDesc["y"],pressedButtonDesc["z"])
140-
  dialGate(pressedButtonDesc["address"])
140+
141
end
142
143
function prevPage()
144
  lastPage = curPage
145
  
146
  pages[lastPage]:flash(pageBack, 0.125)
147
 
148
  curPage = curPage - 1
149
  if curPage < 1 then
150
    curPage = #pages
151
  end
152
  pages[curPage]:draw()
153
  
154
end
155
156
function nextPage()
157
  lastPage = curPage
158
  
159
  pages[lastPage]:flash(pageFore, 0.125)
160
 
161
  curPage = curPage + 1
162
  if curPage > #pages then
163
    curPage = 1
164
  end
165
  pages[curPage]:draw()
166
end
167
168
function displayError(error)
169
  monitor.clear()
170
  monitor.setBackgroundColor(colors.red)
171
  monitor.setTextColor(colors.black)
172
  centerText("!!!", 3)
173
  centerText(error, 4)
174
  writeLog("Error: "..error)
175
end
176
177
function buildPage(pN)
178
  pages[pN] = touchpoint.new(monitorLocation)
179
  pages[pN]:add(pageBack, prevPage, 1, 1, determineLength(pageBack), 1, buttonColor, buttonActiveColor)
180
  pages[pN]:add(pageFore, nextPage, monX - determineLength(pageFore) + 1, 1, monX, 1, buttonColor, buttonActiveColor)
181
  
182
  if #portals > 0 then
183
    local curIndex = (pN - 1) * namesPerPage + 1
184
    for y = 3, monY - 2, 2 do
185
      if curIndex < #portals + 1 then
186
        pages[pN]:add(portals[curIndex]["name"], doAction, 2, y, monMidL - 1 - centerPadding, y, buttonColor, buttonActiveColor)
187
      else
188
        break
189
      end
190
      curIndex = curIndex + 1
191
      if curIndex < #portals + 1 then
192
        pages[pN]:add(portals[curIndex]["name"], doAction, monMidR + 1 + centerPadding, y, monX - 1, y, buttonColor, buttonActiveColor)
193
      else
194
        break
195
      end
196
      curIndex = curIndex + 1
197
    end
198
  end
199
  
200
  pages[pN]:add(resetButton, rebuildPages, 1, monY, determineLength(resetButton), monY, buttonColor, buttonActiveColor)
201
202
end
203
  
204
function refresh()
205
  writeLog("Refreshing Destination list.")
206-
  writeLog("Refreshing stargate list.")
206+
207
  local myPage = 1
208
  
209
  writeLog("# Detinations: "..#portals)
210-
  writeLog("# stargates: "..#portals)
210+
211
    writeLog('Names/Page: '..namesPerPage)
212
    while (myPage - 1) * namesPerPage < #portals do
213
      writeLog('Populating Page'..myPage..'.')
214
      buildPage(myPage)
215
      myPage = myPage + 1
216
      
217
    end
218
  else
219
    buildPage(1)
220
  end
221
  
222
  if curPage > #pages then
223
    curPage = #pages
224
  end
225
  
226
  writeLog('Current Page:'..curPage)
227
  pages[curPage]:draw()
228
end
229
230
function startTransport(Tx,Ty,Tz)
231-
function dialGate(address)
231+
232
  writeLog("Setting Transporter Address X:"..Tx.." Y:"..Ty.." Z:"..Tz)  
233-
  writeLog("Dialing "..address)  
233+
  transporter.setX(0,tonumber(Tx))
234-
  result = gate.sendPacket("FFFF", "action: dial", "timeout: "..openTime, "address: "..address)
234+
  transporter.setY(0,tonumber(Ty))
235-
  writeLog("Gate told to dial. Result: "..result)
235+
  transporter.setZ(0,tonumber(Tz))
236-
  return result
236+
237
238
239-
function closeGate()
239+
240-
  writeLog("Force closing the gate.")
240+
241-
  result = gate.sendPacket("FFFF", "action: disconnect")
241+
242-
  writeLog("Gate told to close. Result: "..result)
242+
243
  monitor.write(text)
244
end
245
246
function findSideFor(typeToFind)
247
  local sides = peripheral.getNames()
248
  for i, side in ipairs(sides) do
249
    local type = peripheral.getType(side)
250
    if type == typeToFind then
251
      return(side)
252
    end
253
  end
254
end
255
256
257
init()
258
259
if not problem then
260
  refresh()
261
  while true do
262
    event, p1 = pages[curPage]:handleEvents(os.pullEvent())
263
    if event == "button_click" then
264
      pages[curPage].buttonList[p1].func(p1)
265
    elseif event == "monitor_resize" then
266
      handleMonitorResize()
267
    end
268
  end
269
end