Advertisement
FFGFlash

controller.lua

Feb 14th, 2023 (edited)
734
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.02 KB | None | 0 0
  1. local events = require("/events")
  2. local door = require("/door")
  3. local md5 = require("/md5")
  4.  
  5. term.clear()
  6. term.setCursorPos(1,1)
  7.  
  8. if not fs.exists("/.password") then
  9.   local file = fs.open("/.password", "w")
  10.   print("Enter password for first time setup...")
  11.   local password
  12.   repeat
  13.     term.clear()
  14.     term.setCursorPos(1,1)
  15.     term.write("> ")
  16.     password = read("*")
  17.   until password
  18.   file.writeLine(md5:hash(password))
  19.   file.close()
  20. end
  21.  
  22. local file = fs.open("/.password", "r")
  23. local password = file.readLine()
  24. file.close()
  25.  
  26. local input = ""
  27.  
  28. local keyLookup = {
  29.   [colors.white] = { value = keys.q, pressed = false },
  30.   [colors.orange] = { value = keys.w, pressed = false },
  31.   [colors.magenta] = { value = keys.e, pressed = false },
  32.   [colors.lightBlue] = { value = keys.r, pressed = false },
  33.   [colors.yellow] = { value = keys.t, pressed = false },
  34.   [colors.lime] = { value = keys.y, pressed = false },
  35.   [colors.pink] = { value = keys.u, pressed = false },
  36.   [colors.gray] = { value = keys.i, pressed = false },
  37.   [colors.lightGray] = { value = keys.o, pressed = false },
  38.   [colors.cyan] = { value = keys.p, pressed = false },
  39.   [colors.purple] = { value = keys.a, pressed = false },
  40.   [colors.blue] = { value = keys.s, pressed = false },
  41.   [colors.brown] = { value = keys.d, pressed = false },
  42.   [colors.green] = { value = keys.f, pressed = false },
  43.   [colors.red] = { value = keys.g, pressed = false },
  44.   [colors.black] = { value = keys.h, pressed = false },
  45.   [colors.black + colors.white] = { value = keys.j, pressed = false },
  46.   [colors.black + colors.orange] = { value = keys.k, pressed = false },
  47.   [colors.black + colors.magenta] = { value = keys.l, pressed = false },
  48.   [colors.black + colors.lightBlue] = { value = keys.z, pressed = false },
  49.   [colors.black + colors.yellow] = { value = keys.x, pressed = false },
  50.   [colors.black + colors.lime] = { value = keys.c, pressed = false },
  51.   [colors.black + colors.pink] = { value = keys.v, pressed = false },
  52.   [colors.black + colors.gray] = { value = keys.b, pressed = false },
  53.   [colors.black + colors.lightGray] = { value = keys.n, pressed = false },
  54.   [colors.black + colors.cyan] = { value = keys.m, pressed = false },
  55.   [colors.black + colors.purple] = { value = keys.space, pressed = false },
  56.   [colors.black + colors.blue] = { value = keys.enter, pressed = false }
  57. }
  58.  
  59. local charLookup = {
  60.   [keys.a] = "a",
  61.   [keys.b] = "b",
  62.   [keys.c] = "c",
  63.   [keys.d] = "d",
  64.   [keys.e] = "e",
  65.   [keys.f] = "f",
  66.   [keys.g] = "g",
  67.   [keys.h] = "h",
  68.   [keys.i] = "i",
  69.   [keys.j] = "j",
  70.   [keys.k] = "k",
  71.   [keys.l] = "l",
  72.   [keys.m] = "m",
  73.   [keys.n] = "n",
  74.   [keys.o] = "o",
  75.   [keys.p] = "p",
  76.   [keys.q] = "q",
  77.   [keys.r] = "r",
  78.   [keys.s] = "s",
  79.   [keys.t] = "t",
  80.   [keys.u] = "u",
  81.   [keys.v] = "v",
  82.   [keys.w] = "w",
  83.   [keys.x] = "x",
  84.   [keys.y] = "y",
  85.   [keys.z] = "z",
  86.   [keys.space] = " "
  87. }
  88.  
  89. function onRedstoneEvent()
  90.   local line1, line2 = rs.getBundledInput("left"), rs.getBundledInput("right")
  91.  
  92.   for color, key in pairs(keyLookup) do
  93.     local pressed = false
  94.     if color <= colors.black then pressed = colors.test(line1, color)
  95.     else pressed = colors.test(line2, color - colors.black)
  96.     end
  97.  
  98.     if pressed and not key.pressed then
  99.       events:emit("key", key.value, false)
  100.       local char = charLookup[key.value]
  101.       if char then events:emit("char", char)
  102.       end
  103.     elseif not pressed and key.pressed then
  104.       events:emit("key_up", key.value)
  105.     end
  106.  
  107.     keyLookup[color].pressed = pressed
  108.   end
  109. end
  110.  
  111. function onKeyEvent(key, isHeld)
  112.   if key == keys.enter then
  113.     if input then print("> "..input) end
  114.     if md5:hash(input) == password then door:open()
  115.     else door:close()
  116.     end
  117.     input = ""
  118.   end
  119. end
  120.  
  121. function onCharEvent(char)
  122.   input = input..char
  123. end
  124.  
  125. local line0 = rs.getBundledInput("bottom")
  126. door:initialize(colors.test(line0, colors.blue))
  127.  
  128. events:connect("key", onKeyEvent)
  129. events:connect("redstone", onRedstoneEvent)
  130. events:connect("char", onCharEvent)
  131. while true do events() end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement