View difference between Paste ID: cd7EYRfA and 5TDiSqnv
SHOW: | | - or go back to the newest paste.
1
local state = "open"
2
local doorSide = "back"
3
local PWD = "123"
4
local openTime = 3
5
6
7
--pistonok: alsó = narancs
8
--          felette = cyan
9
--          oldalsó = fehér
10
--zárolás: piros
11
12
13
local function openDoor()
14
    local side = doorSide
15
    rs.setBundledOutput(side,colors.combine(colors.white,colors.cyan))
16
    sleep(0.2)
17
    rs.setBundledOutput(side,colors.white)
18
    sleep(0.2)
19
    rs.setBundledOutput(side,0)
20
    sleep(0.2)
21
    rs.setBundledOutput(side,colors.orange)
22
    sleep(0.2)
23
    rs.setBundledOutput(side,colors.combine(colors.orange,colors.cyan))
24
    sleep(0.2)
25
    rs.setBundledOutput(side,colors.orange)
26
    sleep(0.2)
27
    rs.setBundledOutput(side,0)
28
    sleep(0.2)
29
    rs.setBundledOutput(side,colors.cyan)
30
    sleep(0.2)
31
    rs.setBundledOutput(side,0)
32
    sleep(0.2)
33
end
34
35
local function closeDoor()
36
    local side = doorSide
37
    rs.setBundledOutput(side,colors.orange)
38
    sleep(0.2)
39
    rs.setBundledOutput(side,0)
40
    sleep(0.2)
41
    rs.setBundledOutput(side,colors.white)
42
    sleep(0.2)
43
    rs.setBundledOutput(side,colors.combine(colors.white,colors.orange))
44
    sleep(0.2)
45
    rs.setBundledOutput(side,colors.white)
46
    sleep(0.2)
47
end
48
49
local buttons = {}
50
--buttons[1] = "ok2"
51
--buttons[2] = "ok3"
52
53
--print(table.getn(buttons))
54
55
function setButton(name,text,x,y,w,h,textcolor,bgcolor)
56
    buttons[name] = {name=name,text=text,x=x,y=y,w=w,h=h,textcolor=textcolor,bgcolor=bgcolor}
57
end
58
59
--setButton("teszt","1",1,4,1,1,colors.white,colors.orange)
60
61
function fillButtons()
62
    local num = 0
63
    for i=0,2 do
64
        for j=0,2 do
65
            num = num+1
66
            print(num)
67
            setButton("n"..num,num.."",j*4+3,i*2+3,3,1,colors.white,colors.orange)
68
        end
69
    end
70
    setButton("n0","0",7,9,3,1,colors.white,colors.orange)
71
    setButton("cancel"," ",3,9,3,1,colors.white,colors.red)
72
    setButton("enter"," ",11,9,3,1,colors.white,colors.green)
73
end
74
75
function clearMons(bgColor)
76
    local mons = {peripheral.find("monitor")}
77
    for mKey,mon in pairs(mons) do
78
        mon.setBackgroundColor(bgColor)
79
        mon.clear()
80
        mon.setCursorPos(1,1)
81
    end
82
end
83
84
clearMons(colors.black)
85
86
function drawButtons(side)
87
    local mons = {peripheral.find("monitor")}
88
    function draw(side)
89
        local mon = peripheral.wrap(side)
90
        for bKey,button in pairs(buttons) do
91
            local offsetX = button.w/2 - string.len(button.text)/2
92
--            local offsetY = button.h/2 - string.len(button.text)/2
93
            local text = button.text
94
            for i=offsetX+string.len(button.text)+1,button.w do
95
                text=text.." "
96
            end
97
            for i=1,offsetX do
98
                text=" "..text
99
            end
100
            mon.setTextScale(0.5)
101
            for i=1,button.h do
102
                mon.setCursorPos(button.x,button.y+i-1)
103
                for j=1,string.len(text) do
104
                    mon.setBackgroundColor(button.bgcolor)
105
                    mon.write(" ")
106
                end
107
            end
108
            mon.setCursorPos(button.x,button.y+button.h/2)
109
            mon.setBackgroundColor(button.bgcolor)
110
            mon.setTextColor(button.textcolor)
111
            mon.write(text)
112
            --print("ok")
113
            mon.setBackgroundColor(colors.black)
114
            mon.setTextColor(colors.white)
115
        end
116
    end
117
    
118
    if side == "all" then
119
        for mKey,mon in pairs(mons) do
120
            draw(peripheral.getName(mon))
121
        end
122
    else
123
        draw(side)
124
    end
125
end
126
127
--setButton("n1","1",2,2,1,1,colors.white,colors.orange)
128
fillButtons()
129
local currentPass = {}
130
local mons = {peripheral.find("monitor")}
131
function resetAllPass()
132
    currentPass = {}
133
    for mKey,mon in pairs(mons) do
134
        currentPass[peripheral.getName(mon)] = ""
135
    end
136
end
137
resetAllPass()
138
function drawPass(side)
139
    function draw(side,pass)
140
        local mon = peripheral.wrap(side)
141
        mon.setCursorPos(2,1)
142
        mon.setBackgroundColor(colors.cyan)
143
        mon.write("             ")
144
        mon.setCursorPos(3,1)
145
        for i=1,string.len(pass) do
146
            if i <= 11 then
147
                mon.write("*")
148
            end
149
        end
150
        mon.setBackgroundColor(colors.black)
151
    end
152
    if side == "all" then
153
        for mKey,mon in pairs(mons) do
154
            local name = peripheral.getName(mon)
155
            draw(name,currentPass[name])
156
        end
157
    else
158
        draw(side,currentPass[side])
159
    end
160
end
161
162
function touched(side,xPos,yPos)
163
    for bKey,button in pairs(buttons) do
164
        if xPos >= button.x and xPos < button.x+button.w and yPos >= button.y and yPos < button.y+button.h then
165
            local ocolor = button.bgcolor
166
            buttons[bKey].bgcolor = colors.cyan
167
            drawButtons(side)
168
            local isNumber = false
169
            local num = 0
170
            while (not isNumber) and num <= 9 do
171
                isNumber = bKey == "n"..num
172
                num = num+1
173
            end
174
            if isNumber then
175
                currentPass[side] = currentPass[side]..button.text
176
                --print("SZAM")
177
            elseif bKey == "cancel" then
178
                currentPass[side] = ""
179
            elseif bKey == "enter" then
180
                if currentPass[side] == PWD then
181
                    openDoor()
182
                    sleep(openTime)
183-
                    sleep(3)
183+
184
                else
185
                    
186
                end
187
                currentPass[side] = ""
188
            end
189
            drawPass(side)
190
            sleep(0.1)
191
            buttons[bKey].bgcolor = ocolor
192
            drawButtons(side)
193
        end
194
    end
195
end
196
197
local function printLocked(side)
198
    local mon = peripheral.wrap(side)
199
    mon.setBackgroundColor(colors.red)
200
    mon.setTextColor(colors.white)
201
    mon.clear()
202
    mon.setCursorPos(5,5)
203
    mon.write("ZAROLVA")
204
end
205
206
--printLocked("monitor_3")
207
function printAllLocked()
208
    for kMon,mon in pairs(mons) do
209
        printLocked(peripheral.getName(mon))
210
    end
211
end
212
213
clearMons(colors.black)
214
drawPass("all")
215
drawButtons("all")
216
local locked = false
217
local mainTimer = os.startTimer(1)
218
while true do
219
    event,side,xPos,yPos = os.pullEvent()
220
    if event == "monitor_touch" and (not locked) then
221
        touched(side,xPos,yPos)
222
    elseif event == "redstone" or event == "timer" then
223
        local rsInput = rs.getBundledInput(doorSide)
224
        local toLock = colors.test(rsInput,colors.red)
225
        if (not locked) and toLock then
226
            locked = true
227
            printAllLocked()
228
        elseif locked and (not toLock) then
229
            locked = false
230
            resetAllPass()
231
            clearMons(colors.black)
232
            drawPass("all")
233
            drawButtons("all")
234
        end
235
    end
236
    --print(event)
237
    sleep(0.1)
238
end