View difference between Paste ID: bq2Np5id and eJzgRq1B
SHOW: | | - or go back to the newest paste.
1-
global_lamps = {"cf0", "95c", "ad9", "a1a", "d97", "afb", "cc5", "335", "a75"}
1+
-- Lamp-o-mat. Controls CX lamps using OC computer. Minecraft. --
2-
global_exit = false
2+
global_lamps = {"cf0", "95c", "ad9", "a1a", "d97", "afb", "cc5", "335", "a75"}
3-
3+
global_exit = false
4-
local com = require("component")
4+
local com = require("component")
5-
local event = require("event")
5+
local event = require("event")
6-
6+
7-
base = {__index = base}
7+
base = {__index = base}
8-
function base.__call(self, count)
8+
function base.__call(self, count)
9-
  if not global_exit then
9+
  if not global_exit then
10-
    count = count or math.huge
10+
    count = count or math.huge
11-
    self.init()
11+
    self.init()
12-
    if not self.customSet then
12+
    if not self.customSet then
13-
      self.getLamps(self)
13+
      self.getLamps(self)
14-
      local lamps = self.lamps
14+
      local lamps = self.lamps
15-
      local r = self.r
15+
      local r = self.r
16-
      local g = self.g
16+
      local g = self.g
17-
      local b = self.b
17+
      local b = self.b
18-
      local formula = self.formula
18+
      local formula = self.formula
19-
      local noExit = true
19+
      local noExit = true
20-
      local cycle = 1
20+
      local cycle = 1
21-
      while noExit and cycle <= count and not global_exit do
21+
      while noExit and cycle <= count and not global_exit do
22-
        for num, i in ipairs(lamps) do
22+
        for num, i in ipairs(lamps) do
23-
          pcall(com.invoke, i, "setLampColor", formula(r(), g(), b()))
23+
          pcall(com.invoke, i, "setLampColor", formula(r(), g(), b()))
24-
          if event.pull(0.6, "key_down") then
24+
          if event.pull(0.6, "key_down") then
25-
            noExit = false
25+
            noExit = false
26-
            global_exit = true
26+
            global_exit = true
27-
          end
27+
          end
28-
        end
28+
        end
29-
        cycle = cycle + 1
29+
        cycle = cycle + 1
30-
      end
30+
      end
31-
    else
31+
    else
32-
      self.customSet(self, count)
32+
      self.customSet(self, count)
33-
    end
33+
    end
34-
    for i in com.list("colorful_lamp") do
34+
    for i in com.list("colorful_lamp") do
35-
      com.invoke(i, "setLampColor", 0)
35+
      com.invoke(i, "setLampColor", 0)
36-
    end
36+
    end
37-
    self.destruct()
37+
    self.destruct()
38-
  end
38+
  end
39
end
40-
40+
41-
--- WAVE ---
41+
--- WAVE ---
42-
42+
43-
wave = setmetatable({}, base)
43+
wave = setmetatable({}, base)
44-
function wave:getLamps()
44+
function wave:getLamps()
45-
  local lampOrder = global_lamps
45+
  local lampOrder = global_lamps
46-
  local lamps = {}
46+
  local lamps = {}
47-
  for i = 1, #lampOrder, 1 do
47+
  for i = 1, #lampOrder, 1 do
48-
    if com.get(lampOrder[i]) then
48+
    if com.get(lampOrder[i]) then
49-
      table.insert(lamps, com.get(lampOrder[i]))
49+
      table.insert(lamps, com.get(lampOrder[i]))
50-
    end
50+
    end
51-
  end
51+
  end
52-
  wave.lamps = lamps
52+
  wave.lamps = lamps
53
end
54-
wave.r = function() return math.random(0, 16) end
54+
wave.r = function() return math.random(0, 16) end
55-
wave.g = function() return math.random(16, 31) end
55+
wave.g = function() return math.random(16, 31) end
56-
wave.b = function() return math.random(0, 16) end
56+
wave.b = function() return math.random(0, 16) end
57-
wave.formula = function(r, g, b)
57+
wave.formula = function(r, g, b)
58-
  return r * 32 * 32 + g * 32 + b
58+
  return r * 32 * 32 + g * 32 + b
59
end
60-
function wave.added(_, addr, name)
60+
function wave.added(_, addr, name)
61-
  if name == "colorful_lamp" then
61+
  if name == "colorful_lamp" then
62-
    table.insert(wave.lamps, addr)
62+
    table.insert(wave.lamps, addr)
63-
  end
63+
  end
64
end
65-
function wave.removed(_, addr, name)
65+
function wave.removed(_, addr, name)
66-
  if name == "colorful_lamp" then
66+
  if name == "colorful_lamp" then
67-
    table.remove(wave.lamps, addr)
67+
    table.remove(wave.lamps, addr)
68-
  end
68+
  end
69
end
70-
function wave.init()
70+
function wave.init()
71-
  event.listen("component_added", wave.added)
71+
  event.listen("component_added", wave.added)
72-
  event.listen("component_removed", wave.removed)
72+
  event.listen("component_removed", wave.removed)
73
end
74-
function wave.destruct()
74+
function wave.destruct()
75-
  event.ignore("component_added", wave.added)
75+
  event.ignore("component_added", wave.added)
76-
  event.ignore("component_removed", wave.removed)
76+
  event.ignore("component_removed", wave.removed)
77
end
78-
78+
79-
--- SMOOTH WAVE ---
79+
--- SMOOTH WAVE ---
80-
80+
81-
smwv = setmetatable({}, base)
81+
smwv = setmetatable({}, base)
82-
smwv.r = function() return math.random(16, 31) end
82+
smwv.r = function() return math.random(16, 31) end
83-
smwv.g = function() return math.random(16, 31) end
83+
smwv.g = function() return math.random(16, 31) end
84-
smwv.b = function() return math.random(16, 31) end
84+
smwv.b = function() return math.random(16, 31) end
85-
function smwv.onKeyDown()
85+
function smwv.onKeyDown()
86-
  smwv.noExit = false
86+
  smwv.noExit = false
87-
  global_exit = true
87+
  global_exit = true
88-
  print("Please wait until cycle ends...")
88+
  print("Please wait until cycle ends...")
89
end
90-
function smwv.added(_, addr, name)
90+
function smwv.added(_, addr, name)
91-
  if name == "colorful_lamp" then
91+
  if name == "colorful_lamp" then
92-
    table.insert(smwv.lamps, {addr, 0})
92+
    table.insert(smwv.lamps, {addr, 0})
93-
    pcall(com.invoke, addr, "setLampColor", 0)
93+
    pcall(com.invoke, addr, "setLampColor", 0)
94-
    print("New lamp available lamp, adding: " .. addr)
94+
    print("New lamp available lamp, adding: " .. addr)
95-
  end
95+
  end
96
end
97-
function smwv.removed(_, addr, name)
97+
function smwv.removed(_, addr, name)
98-
  if name == "colorful_lamp" then
98+
  if name == "colorful_lamp" then
99-
    for i = 1, #smwv.lamps, 1 do
99+
    for i = 1, #smwv.lamps, 1 do
100-
      if addr == smwv.lamps[i][1] then
100+
      if addr == smwv.lamps[i][1] then
101-
        table.remove(smwv.lamps, i)
101+
        table.remove(smwv.lamps, i)
102-
        print("Lamp is unavailable, removing: " .. addr)
102+
        print("Lamp is unavailable, removing: " .. addr)
103-
      end
103+
      end
104-
    end
104+
    end
105-
  end
105+
  end
106
end
107-
function smwv.init()
107+
function smwv.init()
108-
  smwv.noExit = true
108+
  smwv.noExit = true
109-
  event.listen("key_down", smwv.onKeyDown)
109+
  event.listen("key_down", smwv.onKeyDown)
110-
  event.listen("component_added", smwv.added)
110+
  event.listen("component_added", smwv.added)
111-
  event.listen("component_removed", smwv.removed)
111+
  event.listen("component_removed", smwv.removed)
112
end
113-
function smwv.destruct()
113+
function smwv.destruct()
114-
  event.ignore("key_down", smwv.onKeyDown)
114+
  event.ignore("key_down", smwv.onKeyDown)
115-
  event.ignore("component_added", smwv.added)
115+
  event.ignore("component_added", smwv.added)
116-
  event.ignore("component_removed", smwv.removed)
116+
  event.ignore("component_removed", smwv.removed)
117
end
118-
function smwv:set()
118+
function smwv:set()
119-
  for i = 1, #self.lamps, 1 do
119+
  for i = 1, #self.lamps, 1 do
120-
    pcall(com.invoke, self.lamps[i][1], "setLampColor", self.lamps[i][2])
120+
    pcall(com.invoke, self.lamps[i][1], "setLampColor", self.lamps[i][2])
121-
  end
121+
  end
122
end
123-
function smwv:customSet(count)
123+
function smwv:customSet(count)
124-
  local lamps = global_lamps
124+
  local lamps = global_lamps
125-
  self.lamps = {}
125+
  self.lamps = {}
126-
  for _, i in ipairs(lamps) do
126+
  for _, i in ipairs(lamps) do
127-
    if ({pcall(com.get, i)})[1] then
127+
    if ({pcall(com.get, i)})[1] then
128-
      table.insert(self.lamps, {com.get(i), 0})
128+
      table.insert(self.lamps, {com.get(i), 0})
129-
    end
129+
    end
130-
  end
130+
  end
131-
  local cycle = 1
131+
  local cycle = 1
132-
  while smwv.noExit and cycle <= count do
132+
  while smwv.noExit and cycle <= count do
133-
    local color = self.r() * 32 * 32 + self.g() * 32 + self.b()
133+
    local color = self.r() * 32 * 32 + self.g() * 32 + self.b()
134-
    for i = 1, #self.lamps, 1 do
134+
    for i = 1, #self.lamps, 1 do
135-
      if self.lamps[i] then
135+
      if self.lamps[i] then
136-
        self.lamps[i][2] = color
136+
        self.lamps[i][2] = color
137-
        if i > 1 then
137+
        if i > 1 then
138-
          for j = 1, #self.lamps, 1 do
138+
          for j = 1, #self.lamps, 1 do
139-
            if self.lamps[j] and j ~= i then
139+
            if self.lamps[j] and j ~= i then
140-
              local prevcolor = self.lamps[j][2] or 0
140+
              local prevcolor = self.lamps[j][2] or 0
141-
              local pr = math.floor(prevcolor / 32 / 32)
141+
              local pr = math.floor(prevcolor / 32 / 32)
142-
              local pg = math.floor((prevcolor - pr * 32 * 32) / 32)
142+
              local pg = math.floor((prevcolor - pr * 32 * 32) / 32)
143-
              local pb = prevcolor - pr * 32 * 32 - pg * 32
143+
              local pb = prevcolor - pr * 32 * 32 - pg * 32
144-
              local mlpr = ((#self.lamps - 1) / (#self.lamps))
144+
              local mlpr = ((#self.lamps - 1) / (#self.lamps))
145-
              local newcolor = math.floor(pr * mlpr) * 32 * 32 + math.floor(pg * mlpr) * 32 + math.floor(pb * mlpr)
145+
              local newcolor = math.floor(pr * mlpr) * 32 * 32 + math.floor(pg * mlpr) * 32 + math.floor(pb * mlpr)
146-
              self.lamps[j][2] = self.lamps[j] and math.floor(newcolor) or nil
146+
              self.lamps[j][2] = self.lamps[j] and math.floor(newcolor) or nil
147-
            end
147+
            end
148-
          end
148+
          end
149-
        end
149+
        end
150-
        self:set()
150+
        self:set()
151-
        os.sleep(0.1)
151+
        os.sleep(0.1)
152-
      end
152+
      end
153-
    end
153+
    end
154-
    cycle = cycle + 1
154+
    cycle = cycle + 1
155-
  end
155+
  end
156
end
157-
157+
158-
--- GROUP BLINK ---
158+
--- GROUP BLINK ---
159-
159+
160-
blink = setmetatable({}, base)
160+
blink = setmetatable({}, base)
161-
blink.r = function() return math.random(0, 31) end
161+
blink.r = function() return math.random(0, 31) end
162-
blink.g = function() return math.random(0, 31) end
162+
blink.g = function() return math.random(0, 31) end
163-
blink.b = function() return math.random(0, 31) end
163+
blink.b = function() return math.random(0, 31) end
164-
blink.r1 = function() return math.random(0, 31) end
164+
blink.r1 = function() return math.random(0, 31) end
165-
blink.g1 = function() return math.random(0, 31) end
165+
blink.g1 = function() return math.random(0, 31) end
166-
blink.b1 = function() return math.random(0, 31) end
166+
blink.b1 = function() return math.random(0, 31) end
167-
function blink.added(_, addr, name)
167+
function blink.added(_, addr, name)
168-
  if name == "colorful_lamp" then
168+
  if name == "colorful_lamp" then
169-
    if blink.next then
169+
    if blink.next then
170-
      table.insert(blink.even, addr)
170+
      table.insert(blink.even, addr)
171-
    else
171+
    else
172-
      table.insert(blink.odd, addr)
172+
      table.insert(blink.odd, addr)
173-
    end
173+
    end
174-
    blink.lamps[addr] = blink.next
174+
    blink.lamps[addr] = blink.next
175-
    print("New lamp available: " .. addr .. ", " .. (blink.next and "even" or "odd"))
175+
    print("New lamp available: " .. addr .. ", " .. (blink.next and "even" or "odd"))
176-
    blink.next = not blink.next
176+
    blink.next = not blink.next
177-
  end
177+
  end
178
end
179-
function blink.removed(_, addr, name)
179+
function blink.removed(_, addr, name)
180-
  if name == "colorful_lamp" then
180+
  if name == "colorful_lamp" then
181-
    if blink.lamps[addr] == true then
181+
    if blink.lamps[addr] == true then
182-
      table.remove(blink.even, addr)
182+
      table.remove(blink.even, addr)
183-
    else
183+
    else
184-
      table.remove(blink.odd, addr)
184+
      table.remove(blink.odd, addr)
185-
    end
185+
    end
186-
    blink.lamps[addr] = nil
186+
    blink.lamps[addr] = nil
187-
  end
187+
  end
188
end
189-
function blink.onKeyDown()
189+
function blink.onKeyDown()
190-
  blink.noExit = false
190+
  blink.noExit = false
191-
  global_exit = true
191+
  global_exit = true
192-
  print("Please wait until cycle ends...")
192+
  print("Please wait until cycle ends...")
193
end
194-
function blink.init()
194+
function blink.init()
195-
  event.listen("component_added", blink.added)
195+
  event.listen("component_added", blink.added)
196-
  event.listen("component_removed", blink.removed)
196+
  event.listen("component_removed", blink.removed)
197-
  event.listen("key_down", blink.onKeyDown)
197+
  event.listen("key_down", blink.onKeyDown)
198
end
199-
function blink.destruct()
199+
function blink.destruct()
200-
  event.ignore("component_added", blink.added)
200+
  event.ignore("component_added", blink.added)
201-
  event.ignore("component_removed", blink.removed)
201+
  event.ignore("component_removed", blink.removed)
202-
  event.ignore("key_down", blink.onKeyDown)
202+
  event.ignore("key_down", blink.onKeyDown)
203
end
204-
function blink:set(cur, color)
204+
function blink:set(cur, color)
205-
  local lamps = {}
205+
  local lamps = {}
206-
  if cur then
206+
  if cur then
207-
    lamps = self.even
207+
    lamps = self.even
208-
  else
208+
  else
209-
    lamps = self.odd
209+
    lamps = self.odd
210-
  end
210+
  end
211-
  for _, i in ipairs(lamps) do
211+
  for _, i in ipairs(lamps) do
212-
    pcall(com.invoke, i, "setLampColor", color)
212+
    pcall(com.invoke, i, "setLampColor", color)
213-
  end
213+
  end
214
end
215-
function blink.clear()
215+
function blink.clear()
216-
  for i in com.list("colorful_lamp") do
216+
  for i in com.list("colorful_lamp") do
217-
    pcall(com.invoke, i, "setLampColor", 0)
217+
    pcall(com.invoke, i, "setLampColor", 0)
218-
  end
218+
  end
219
end
220-
function blink:customSet(count)
220+
function blink:customSet(count)
221-
  local cycle = 1
221+
  local cycle = 1
222-
  self.noExit = true
222+
  self.noExit = true
223-
  local lamps = global_lamps
223+
  local lamps = global_lamps
224-
  self.odd = {}
224+
  self.odd = {}
225-
  self.even = {}
225+
  self.even = {}
226-
  self.lamps = {}
226+
  self.lamps = {}
227-
  self.next = false
227+
  self.next = false
228-
  for _, i in ipairs(lamps) do
228+
  for _, i in ipairs(lamps) do
229-
    if com.get(i) then
229+
    if com.get(i) then
230-
      if self.next then
230+
      if self.next then
231-
        table.insert(self.even, com.get(i))
231+
        table.insert(self.even, com.get(i))
232-
      else
232+
      else
233-
        table.insert(self.odd, com.get(i))
233+
        table.insert(self.odd, com.get(i))
234-
      end
234+
      end
235-
      self.lamps[com.get(i)] = self.next
235+
      self.lamps[com.get(i)] = self.next
236-
      self.next = not self.next
236+
      self.next = not self.next
237-
    end
237+
    end
238-
  end
238+
  end
239-
  while self.noExit and cycle <= count do
239+
  while self.noExit and cycle <= count do
240-
    self.color1 = self.r() * 32 * 32 + self.g() * 32 + self.b()
240+
    self.color1 = self.r() * 32 * 32 + self.g() * 32 + self.b()
241-
    self.color2 = self.r1() * 32 * 32 + self.g1() * 32 + self.b1()
241+
    self.color2 = self.r1() * 32 * 32 + self.g1() * 32 + self.b1()
242-
    self:set(false, self.color1)
242+
    self:set(false, self.color1)
243-
    self:set(true, self.color2)
243+
    self:set(true, self.color2)
244-
    os.sleep(0.4)
244+
    os.sleep(0.4)
245-
    self.clear()
245+
    self.clear()
246-
    os.sleep(0.4)
246+
    os.sleep(0.4)
247-
    cycle = cycle + 1
247+
    cycle = cycle + 1
248-
  end
248+
  end
249
end
250-
250+
251-
--- RANDOM ---
251+
--- RANDOM ---
252-
252+
253-
rand = setmetatable({}, base)
253+
rand = setmetatable({}, base)
254-
function rand:getLamps()
254+
function rand:getLamps()
255-
  self.lamps = {}
255+
  self.lamps = {}
256-
  for i in com.list("colorful_lamp") do
256+
  for i in com.list("colorful_lamp") do
257-
    table.insert(self.lamps, i)
257+
    table.insert(self.lamps, i)
258-
  end
258+
  end
259
end
260-
rand.r = function() return math.random(0, 31) end
260+
rand.r = function() return math.random(0, 31) end
261-
rand.g = function() return math.random(0, 31) end
261+
rand.g = function() return math.random(0, 31) end
262-
rand.b = function() return math.random(0, 31) end
262+
rand.b = function() return math.random(0, 31) end
263-
rand.formula = function(r, g, b) return r * 32 * 32 + g * 32 + b end
263+
rand.formula = function(r, g, b) return r * 32 * 32 + g * 32 + b end
264-
function rand.init() end
264+
function rand.init() end
265-
function rand.destruct() end
265+
function rand.destruct() end
266-
266+
267-
--- BIGLAMP ---
267+
--- BIGLAMP ---
268-
268+
269-
big = setmetatable({}, base)
269+
big = setmetatable({}, base)
270-
big.r = function() return math.random(0, 31) end
270+
big.r = function() return math.random(0, 31) end
271-
big.g = function() return math.random(0, 31) end
271+
big.g = function() return math.random(0, 31) end
272-
big.b = function() return math.random(0, 31) end
272+
big.b = function() return math.random(0, 31) end
273-
function big.onKeyDown()
273+
function big.onKeyDown()
274-
  big.noExit = false
274+
  big.noExit = false
275-
  global_exit = true
275+
  global_exit = true
276-
  print("Please wait until cycle ends...")
276+
  print("Please wait until cycle ends...")
277
end
278-
function big.init()
278+
function big.init()
279-
  event.listen("key_down", big.onKeyDown)
279+
  event.listen("key_down", big.onKeyDown)
280
end
281-
function big.destruct()
281+
function big.destruct()
282-
  event.ignore("key_down", big.onKeyDown)
282+
  event.ignore("key_down", big.onKeyDown)
283
end
284-
function big:customSet(count)
284+
function big:customSet(count)
285-
  self.noExit = true
285+
  self.noExit = true
286-
  local cycle = 0
286+
  local cycle = 0
287-
  local color = {0, 0, 0}
287+
  local color = {0, 0, 0}
288-
  local mlpr = 8/9
288+
  local mlpr = 8/9
289-
  while self.noExit and cycle <= count do
289+
  while self.noExit and cycle <= count do
290-
    color = {math.floor(color[1] * mlpr), math.floor(color[2] * mlpr), math.floor(color[3] * mlpr)}
290+
    color = {math.floor(color[1] * mlpr), math.floor(color[2] * mlpr), math.floor(color[3] * mlpr)}
291-
    if color[1] < 1 and color[2] < 1 and color[3] < 1 then
291+
    if color[1] < 1 and color[2] < 1 and color[3] < 1 then
292-
      color = {self.r(), self.g(), self.b()}
292+
      color = {self.r(), self.g(), self.b()}
293-
      cycle = cycle + 1
293+
      cycle = cycle + 1
294-
      os.sleep(0.8)
294+
      os.sleep(0.8)
295-
      if cycle > count then break end
295+
      if cycle > count then break end
296-
    end
296+
    end
297-
    for i in com.list("colorful_lamp") do
297+
    for i in com.list("colorful_lamp") do
298-
      pcall(com.invoke, i, "setLampColor", color[1] * 32 * 32 + color[2] * 32 + color[3])
298+
      pcall(com.invoke, i, "setLampColor", color[1] * 32 * 32 + color[2] * 32 + color[3])
299-
    end
299+
    end
300-
    os.sleep(0.3)
300+
    os.sleep(0.3)
301-
  end
301+
  end
302
end
303-
303+
304-
304+
305-
--- MAIN ---
305+
--- MAIN ---
306-
306+
307-
while not global_exit do
307+
while not global_exit do
308-
  big(5)
308+
  big(5)
309-
  rand(2)
309+
  rand(2)
310-
  wave(5)
310+
  wave(5)
311-
  smwv(20)
311+
  smwv(20)
312-
  blink(5)
312+
  blink(5)
313
end