SHOW:
|
|
- or go back to the newest paste.
1 | function clear() | |
2 | term.clear() | |
3 | term.setCursorPos(1,1) | |
4 | end | |
5 | - | function setTable(name, freq, xmin, xmax, ymin, ymax) |
5 | + | |
6 | lock = false | |
7 | - | mob[name]["freq"] = freq |
7 | + | |
8 | - | mob[name]["active"] = false |
8 | + | |
9 | tX, tY = term.getSize() | |
10 | ||
11 | - | mob[name]["xmax"] = xmax |
11 | + | rednet.open("right") |
12 | - | mob[name]["ymax"] = ymax |
12 | + | |
13 | clear() | |
14 | local mob={} | |
15 | redout = {} | |
16 | - | setTable("Chicken", colors.red, 17, 24, 2, 3) |
16 | + | sheep = false |
17 | - | setTable("Cow", colors.white, 17, 20, 6, 7) |
17 | + | |
18 | - | setTable("Pig", colors.yellow, 17, 20, 4, 5) |
18 | + | function setTable(name, active, xmin, ymin, actiontype, action) |
19 | --start, Whether it should be on or off when the program starts (true = on, false = off) | |
20 | --Modified by SuPeRMiNoR2 | |
21 | mob[name] = {} | |
22 | mob[name]["action"] = action | |
23 | mob[name]["actiontype"] = actiontype | |
24 | mob[name]["active"] = active | |
25 | mob[name]["xmin"] = xmin | |
26 | mob[name]["ymin"] = ymin | |
27 | templen = xmin + #name - 1 | |
28 | mob[name]["xmax"] = templen | |
29 | mob[name]["ymax"] = ymin | |
30 | end | |
31 | ||
32 | - | local on = data["active"] |
32 | + | |
33 | setTable("Reboot", false, 35, 17, "other", "reboot") | |
34 | - | fill(17,y,currColor, name) |
34 | + | setTable("Steam Engines", true, 1, 3, "other", "steam") |
35 | - | y = y+2 |
35 | + | setTable("Lock", true, 1, 17, "other", "lock") |
36 | setTable("Lights", true, 1, 1, "other", "lights") | |
37 | end | |
38 | ||
39 | function fill(x,y,color,text) | |
40 | term.setBackgroundColor(color) | |
41 | term.setCursorPos(x,y) | |
42 | term.write(text) | |
43 | term.setBackgroundColor(colors.black) | |
44 | - | print(name) |
44 | + | |
45 | ||
46 | function screen() | |
47 | while true do | |
48 | term.clear() | |
49 | if lock == false then | |
50 | - | function setWire() |
50 | + | |
51 | local currColor | |
52 | for name,data in pairs(mob) do | |
53 | - | if data["active"] == false then |
53 | + | x = data["xmin"] |
54 | - | wire = colors.combine(wire, data["freq"]) |
54 | + | y = data["ymin"] |
55 | local on = data["active"] | |
56 | if on == true then currColor = colors.lime else currColor = colors.red end | |
57 | - | redstone.setBundledOutput("bottom", wire) |
57 | + | fill(x,y,currColor, name) |
58 | end | |
59 | fill(36, 1, colors.lime, os.time()) | |
60 | - | fillTable() |
60 | + | |
61 | - | setWire() |
61 | + | if lock == true then |
62 | fill(12, 9, colors.red, "Control Panel Locked") | |
63 | - | term.clear() |
63 | + | |
64 | - | screen() |
64 | + | |
65 | - | -- fill(17,2,colors.lime, "Chicken") |
65 | + | sleep(0.2) |
66 | - | local e,side,x,y = os.pullEvent("monitor_touch") |
66 | + | |
67 | - | print(x..":"..y) |
67 | + | |
68 | - | checkxy(x,y) |
68 | + | |
69 | - | setWire() |
69 | + | |
70 | - | sleep(.1) |
70 | + | |
71 | - | end |
71 | + | |
72 | if x>=data["xmin"] and x<= data["xmax"] then | |
73 | if lock == false then | |
74 | data["active"] = not data["active"] | |
75 | print(name..":"..tostring(x)..":"..tostring(y)) | |
76 | end | |
77 | if lock == true then | |
78 | if name == "Lock" then | |
79 | data["active"] = not data["active"] | |
80 | end | |
81 | end | |
82 | end | |
83 | end | |
84 | end | |
85 | end | |
86 | ||
87 | function doStuff() | |
88 | local wire = 0 | |
89 | for name, data in pairs(mob) do | |
90 | if data["active"] == true then | |
91 | if data["actiontype"] == "other" then | |
92 | if data["action"] == "reboot" then | |
93 | os.reboot() | |
94 | end | |
95 | if data["action"] == "sheep" then | |
96 | sheep = true | |
97 | end | |
98 | if data["action"] == "steam" then | |
99 | rednet.broadcast("steam_on") | |
100 | end | |
101 | if data["action"] == "lock" then | |
102 | lock = true | |
103 | end | |
104 | if data["action"] == "lights" then | |
105 | rednet.broadcast("lights_on") | |
106 | end | |
107 | end | |
108 | end | |
109 | if data["active"] == false then | |
110 | if data["actiontype"] == "wire" then | |
111 | if data["inver"] == true then | |
112 | wire = colors.combine(wire, data["action"]) | |
113 | end | |
114 | end | |
115 | if data["actiontype"] == "other" then | |
116 | if data["action"] == "sheep" then | |
117 | sheep = false | |
118 | end | |
119 | end | |
120 | if data["action"] == "steam" then | |
121 | rednet.broadcast("steam_off") | |
122 | end | |
123 | if data["action"] == "lock" then | |
124 | lock = false | |
125 | end | |
126 | if data["action"] == "lights" then | |
127 | rednet.broadcast("lights_off") | |
128 | end | |
129 | end | |
130 | end | |
131 | redstone.setBundledOutput("bottom", wire) | |
132 | end | |
133 | ||
134 | function mainLoop() | |
135 | while true do | |
136 | local e,side,x,y = os.pullEvent("monitor_touch") --Get event | |
137 | print("Click: "..tostring(x)..":"..tostring(y)) | |
138 | checkxy(x,y) --Check to see if click is on a button, and toggle state if it is | |
139 | doStuff() --Reads button state and does actions | |
140 | sleep(0.1) | |
141 | end | |
142 | end | |
143 | ||
144 | function main() | |
145 | fillTable() --Populate data table | |
146 | sleep(2) | |
147 | doStuff() --Run once to start autostart things | |
148 | parallel.waitForAll(mainLoop, screen) | |
149 | end | |
150 | ||
151 | main() |