SHOW:
|
|
- or go back to the newest paste.
1 | - | --monitors = {peripheral.find("monitor")} |
1 | + | monitors = {peripheral.find("monitor")} |
2 | - | local mon = peripheral.wrap("top") |
2 | + | local allMon = {} |
3 | - | --local mon = {} |
3 | + | for funcName,_ in pairs(monitors[1]) do |
4 | - | --for funcName,_ in pairs(monitors[1]) do |
4 | + | allMon[funcName] = function(...) |
5 | - | -- mon[funcName] = function(...) |
5 | + | for i=1,#monitors-1 do monitors[i][funcName](unpack(arg)) end |
6 | - | -- for i=1,#monitors-1 do monitors[i][funcName](unpack(arg)) end |
6 | + | return monitors[#monitors][funcName](unpack(arg)) |
7 | - | -- return monitors[#monitors][funcName](unpack(arg)) |
7 | + | end |
8 | - | -- end |
8 | + | |
9 | - | --end |
9 | + | |
10 | local sides = {"left", "right", "front", "back", "bottom", "top"} | |
11 | - | mon.setTextScale(1) |
11 | + | local monitor = {} |
12 | - | mon.setTextColor(colors.white) |
12 | + | |
13 | for a,b in pairs(sides) do | |
14 | - | mon.setBackgroundColor(colors.black) |
14 | + | local monObject = peripheral.wrap(b) |
15 | if monObject then | |
16 | - | function clearTable() |
16 | + | monitor[b] = monObject |
17 | end | |
18 | end | |
19 | ||
20 | - | function setButton(name, buttonOn) |
20 | + | allMon.setTextScale(1) |
21 | - | print(name) |
21 | + | allMon.setTextColor(colors.white) |
22 | - | print(button[name]["active"]) |
22 | + | allMon.setBackgroundColor(colors.black) |
23 | - | button[name]["active"] = buttonOn |
23 | + | |
24 | - | screen() |
24 | + | |
25 | ||
26 | - | |
26 | + | function clearAll() |
27 | - | function setTable(name, func, param, xmin, xmax, ymin, ymax) |
27 | + | |
28 | - | button[name] = {} |
28 | + | |
29 | - | button[name]["func"] = func |
29 | + | |
30 | - | button[name]["active"] = "empty" |
30 | + | function clearTable(name) |
31 | - | button[name]["param"] = param |
31 | + | button[name] = {} |
32 | - | button[name]["xmin"] = xmin |
32 | + | |
33 | - | button[name]["ymin"] = ymin |
33 | + | |
34 | - | button[name]["xmax"] = xmax |
34 | + | function getPlayer(name) |
35 | - | button[name]["ymax"] = ymax |
35 | + | return button[name]["player"] |
36 | end | |
37 | ||
38 | - | function funcName() |
38 | + | function setPlayer(name, player) |
39 | - | print("You clicked buttonText") |
39 | + | button[name]["player"] = player |
40 | screen() | |
41 | - | |
41 | + | |
42 | - | function fillTable() |
42 | + | |
43 | - | setTable("ButtonText", funcName, 5, 25, 4, 8) |
43 | + | function getState(name) |
44 | return button[name]["active"] | |
45 | end | |
46 | ||
47 | - | mon.setBackgroundColor(color) |
47 | + | function setState(name, state) |
48 | - | local yspot = math.floor((bData["ymin"] + bData["ymax"]) /2) |
48 | + | button[name]["active"] = state |
49 | - | local xspot = math.floor((bData["xmax"] - bData["xmin"] - string.len(text)) /2) +1 |
49 | + | screen() |
50 | - | for j = bData["ymin"], bData["ymax"] do |
50 | + | |
51 | - | mon.setCursorPos(bData["xmin"], j) |
51 | + | |
52 | - | if j == yspot then |
52 | + | -- monSide: "left", "right", "front", "back", "bottom", "top" |
53 | - | for k = 0, bData["xmax"] - bData["xmin"] - string.len(text) +1 dofile( |
53 | + | function setTable(name, func, param, xmin, xmax, ymin, ymax, monSide) |
54 | - | if k == xspot then |
54 | + | button[name] = {} |
55 | - | mon.write(text) |
55 | + | button[name]["func"] = func |
56 | - | else |
56 | + | button[name]["active"] = false |
57 | - | mon.write(" ") |
57 | + | button[name]["player"] = "empty" |
58 | - | end |
58 | + | button[name]["param"] = param |
59 | - | end |
59 | + | button[name]["xmin"] = xmin |
60 | - | else |
60 | + | button[name]["ymin"] = ymin |
61 | - | for i = bData["xmin"], bData["xmax"] do |
61 | + | button[name]["xmax"] = xmax |
62 | - | mon.write(" ") |
62 | + | button[name]["ymax"] = ymax |
63 | - | end |
63 | + | if not monitor[monSide] then |
64 | - | end |
64 | + | print("There is no monitor on the "..monSide.." side! The button named \""..name.."\" won't be displayed.") |
65 | - | end |
65 | + | button[name]["mon"] = nil |
66 | - | mon.setBackgroundColor(colors.black) |
66 | + | else |
67 | button[name]["mon"] = monSide | |
68 | - | |
68 | + | end |
69 | end | |
70 | - | local currColor |
70 | + | |
71 | - | local currDisplayName |
71 | + | -- returns true if there is a monitor connected at the given side |
72 | - | for name,data in pairs(button) do |
72 | + | function testForMonitor(monSide) |
73 | - | local on = data["active"] |
73 | + | if not monSide then |
74 | - | if on == "empty" then |
74 | + | return false |
75 | - | currColor = colors.white |
75 | + | end |
76 | - | currDisplayName = " " |
76 | + | if not monitors[monSide] then |
77 | - | elseif on == "x" then |
77 | + | return false |
78 | - | currColor = colors.lightGray |
78 | + | end |
79 | - | currDisplayName = on |
79 | + | return true |
80 | - | elseif on == "o" then |
80 | + | |
81 | - | currColor = colors.lightGray |
81 | + | |
82 | - | currDisplayName = on |
82 | + | |
83 | - | end |
83 | + | |
84 | - | fill(currDisplayName, currColor, data) |
84 | + | if not testForMonitor(bData["mon"]) then |
85 | - | end |
85 | + | return |
86 | end | |
87 | local display = monitors[bData["mon"]] | |
88 | display.setBackgroundColor(color) | |
89 | - | --button[name]["active"] = not button[name]["active"] |
89 | + | local on = bData["player"] |
90 | - | screen() |
90 | + | local xSize = bData["xmax"] - bData["xmin"] |
91 | local ySize = bData["ymax"] - bData["ymin"] | |
92 | local sizeRel = xSize / ySize | |
93 | for j = bData["ymin"], bData["ymax"] do -- draws a rectangle | |
94 | - | toggleButton(name) |
94 | + | display.setCursorPos(bData["xmin"], j) |
95 | - | screen() |
95 | + | for i = bData["xmin"], bData["xmax"] do |
96 | - | sleep(0.15) |
96 | + | display.write(" ") |
97 | - | toggleButton(name) |
97 | + | end |
98 | - | screen() |
98 | + | end |
99 | if on == "x" then -- draws a cross on top | |
100 | - | |
100 | + | local xOffset = 0 |
101 | - | function checkxy(x, y) |
101 | + | local scaledYOffset = 0 |
102 | - | for name, data in pairs(button) do |
102 | + | display.setBackgroundColor(colors.red) |
103 | - | if y>=data["ymin"] and y <= data["ymax"] then |
103 | + | for j = bData["ymin"], bData["ymax"] do |
104 | - | if x>=data["xmin"] and x<= data["xmax"] then |
104 | + | scaledYOffset = (j - bData["ymin"]) * sizeRel |
105 | - | if data["param"] == "" then |
105 | + | for i = bData["xmin"], bData["xmax"] do |
106 | - | data["func"]() |
106 | + | xOffset = i - bData["xmin"] |
107 | - | else |
107 | + | if (math.floor(math.abs(xOffset - scaledYOffset)-2.2) < 0) or (math.floor(math.abs(xOffset + scaledYOffset - xSize)-2.2) < 0) then |
108 | - | data["func"](data["param"]) |
108 | + | display.setCursorPos(i, j) |
109 | - | end |
109 | + | display.write(" ") |
110 | - | return true |
110 | + | end |
111 | - | --data["active"] = not data["active"] |
111 | + | end |
112 | - | --print(name) |
112 | + | end |
113 | - | end |
113 | + | elseif on == "o" then -- draws a circle on top |
114 | - | end |
114 | + | local xOffset = 0 |
115 | - | end |
115 | + | local scaledYOffset = 0 |
116 | - | return false |
116 | + | local halfSize = xSize / 2 |
117 | display.setBackgroundColor(colors.red) | |
118 | - | |
118 | + | for j = bData["ymin"], bData["ymax"] do |
119 | - | function heading(text) |
119 | + | scaledYOffset = math.abs(halfSize - ((j - bData["ymin"]) * sizeRel)) |
120 | - | w, h = mon.getSize() |
120 | + | for i = bData["xmin"], bData["xmax"] do |
121 | - | mon.setCursorPos((w-string.len(text))/2+1, 1) |
121 | + | xOffset = math.abs(halfSize - (i - bData["xmin"])) |
122 | - | mon.write(text) |
122 | + | if math.floor(math.abs(math.sqrt(scaledYOffset^2+xOffset^2) - halfSize)-1.9) < 0 then |
123 | display.setCursorPos(i, j) | |
124 | - | |
124 | + | display.write(" ") |
125 | - | function label(w, h, text) |
125 | + | end |
126 | - | mon.setCursorPos(w, h) |
126 | + | end |
127 | - | mon.write(text) |
127 | + | end |
128 | end | |
129 | display.setBackgroundColor(colors.black) | |
130 | end | |
131 | ||
132 | function screen() | |
133 | local currColor | |
134 | local currDisplayName | |
135 | for name,data in pairs(button) do | |
136 | local on = data["player"] | |
137 | if on == "empty" then | |
138 | currDisplayName = " " | |
139 | elseif on == "x" then | |
140 | currDisplayName = on | |
141 | elseif on == "o" then | |
142 | currDisplayName = on | |
143 | end | |
144 | if data["active"] then | |
145 | currColor = colors.lime | |
146 | else | |
147 | if on == "empty" then | |
148 | currColor = colors.white | |
149 | elseif on == "x" then | |
150 | currColor = colors.lightGray | |
151 | elseif on == "o" then | |
152 | currColor = colors.lightGray | |
153 | end | |
154 | end | |
155 | fill(currDisplayName, currColor, data) | |
156 | end | |
157 | end | |
158 | ||
159 | function toggleButton(name) | |
160 | button[name]["active"] = not button[name]["active"] | |
161 | screen() | |
162 | end | |
163 | ||
164 | function flash(name) | |
165 | toggleButton(name) | |
166 | screen() | |
167 | sleep(0.15) | |
168 | toggleButton(name) | |
169 | screen() | |
170 | end | |
171 | ||
172 | function checkxy(x, y, side) | |
173 | for name, data in pairs(button) do | |
174 | if data["mon"] == side then | |
175 | if y>=data["ymin"] and y <= data["ymax"] then | |
176 | if x>=data["xmin"] and x<= data["xmax"] then | |
177 | if data["param"] == "" then | |
178 | data["func"]() | |
179 | else | |
180 | data["func"](data["param"]) | |
181 | end | |
182 | return true | |
183 | --data["active"] = not data["active"] | |
184 | --print(name) | |
185 | end | |
186 | end | |
187 | end | |
188 | end | |
189 | return false | |
190 | end | |
191 | ||
192 | function heading(text, monSide) | |
193 | if not testForMonitor(monSide) then | |
194 | print("Heading cannot be displayed on "..monSide..".") | |
195 | return | |
196 | end | |
197 | local display = monitors[bData["mon"]] | |
198 | w, h = display.getSize() | |
199 | display.setCursorPos((w-string.len(text))/2+1, 1) | |
200 | display.write(text) | |
201 | end | |
202 | ||
203 | function label(w, h, text, monSide) | |
204 | if not testForMonitor(monSide) then | |
205 | print("Heading cannot be displayed on "..monSide..".") | |
206 | return | |
207 | end | |
208 | local display = monitors[bData["mon"]] | |
209 | display.setCursorPos(w, h) | |
210 | display.write(text) | |
211 | end |