View difference between Paste ID: hriNjFj5 and Db7bBn58
SHOW: | | - or go back to the newest paste.
1-
chanel = 0 --Chanel of this teleporter
1+
chanel = 104 --Chanel of this teleporter
2
3
chest = peripheral.wrap("bottom")
4
modem = peripheral.wrap("right")
5
modem.open(chanel)
6
7
target = {
8
    chanel = nil,
9
    timeout = 0,
10
    locked = false
11
}
12
targetTimeoutDelay = 100
13
targets = {
14
    {101,"test 1"},
15
    {102,"test 2"},
16-
page = 1
16+
    {103,"test 3"}
17
}
18
19
monitors = {}
20
scale = 0.5
21
22
23
function redstone.pulse(side, delay, pulse)
24
    delay, pulse = delay or 0.1, pulse or true
25-
 
25+
26
    sleep(delay)
27
    redstone.setOutput(side, not pulse)
28
end
29
30
function activate()
31
    print("Pushing Disk")
32
    chest.pushItems("top",1)
33
    sleep(1)
34
    print("Activating Spacial IO")
35
    redstone.pulse("back",0.2,true)
36
    waitForDisk()
37
    print("Done")
38
    drawScreens()
39
end
40
41
function waitForDisk()
42
    print("Waiting for Disk")
43
    while not chest.getItemDetail(1) do
44
        sleep(0.2)
45-
    local targets = {
45+
46-
        [101]="test 1",
46+
47-
        [102]="test 2",
47+
48-
        [103]="test 3"
48+
49-
    }
49+
function touchscreen(x,y)
50
51
end
52
53-
function requestTarget()
53+
54-
    
54+
    for i,v in ipairs(targets) do
55
        if y == i+1 then
56
            return v[1]
57-
function ping()
57+
58
    end
59
    return nil
60
end
61
62
function requestTarget(n)
63
    target.chanel = n
64
    target.timeout = targetTimeoutDelay
65
    print("Pinging target")
66
    modem.transmit(target.chanel,chanel,"PING")
67
end
68
69
function timeoutTarget()
70
    target.timeout = 0
71
    target.chanel = nil
72
    target.locked = false
73
end
74-
        if reply == target.chanel and
74+
75-
         target.locked then
75+
76
    if message == "activate" then
77
        print("Remote activation requested")
78
        activate()
79
        modem.transmit(reply,chanel,"activated")
80
        print("Confirmation sent")
81
    elseif message == "activated" then
82
        print("Confirmation recieved")
83
        print("Transfering target here")
84
        activate()
85
        target.chanel = nil
86
    elseif message == "PING" then
87
        print("Remote request incoming, answering")
88
        modem.transmit(reply,chanel,"PONG")
89
    elseif message == "PONG" then
90
        print("Target answered")
91
        if reply == target.chanel then
92
            target.locked = true
93
            target.timeout = 0
94
            activate()
95
            sendTarget()
96
        end
97
    end
98
end
99
100
function sendTarget()
101-
            monitor.setCursorBlink(true)
101+
    print("Sending remote activation request")
102
    modem.transmit(target.chanel,chanel,"activate")
103-
            
103+
104
    target.timeout = targetTimeoutDelay
105-
            
105+
106
107
function writeText(monitor, text,y,align,margin,padding)
108
    text = text or ""
109
    y = y or 1
110
    align = align or "left"
111
    margin = margin or 0
112
    padding = padding or 0
113
    local x = margin
114-
setupMonitors()
114+
    if align == "center" then
115
        --text = (string.len(text)%2 == 0) and text or text.." "
116
        text = padText(text,padding,padding," ")
117-
    if target.locked then
117+
        x = monitor.size.x/2-(string.len(text)/2-1)
118-
        
118+
    elseif align == "right" then
119
        text = padText(text,0,padding," ")
120-
        monitor.setCursorPos(1, 1)
120+
        x = monitor.size.x-(string.len(text)-1)-margin
121-
        monitor.write("<")
121+
122-
        monitor.setCursorPos(monitor.size.x/2,1)
122+
        text = padText(text,padding,0," ")
123-
        monitor.write(string.format("Page %d",page))
123+
124-
        monitor.setCursorPos(monitor.size.x,1)
124+
    monitor.setCursorPos(x,y)
125-
        monitor.write(">")
125+
    monitor.write(text)
126
end
127
128
function padText(text,left,right,char)
129
    left,right,char = left or 0,right or 0,char or " "
130
    return string.rep(char,left)..text..string.rep(char,right)
131
end
132-
    print(table.unpack(eventData))
132+
133
function setColors(monitor, fg, bg)
134
    fg,bg = fg or colors.white,bg or colors.black
135
    monitor.setTextColor(fg)
136
    monitor.setBackgroundColour(bg)
137
end
138
139-
        if target.timeout <= -100 then
139+
140
    print("Setting up Monitors")
141
    monitors = {}
142
    for i,v in ipairs(peripheral.getNames()) do
143
        if string.sub(v,1,7) == "monitor" then
144
            local monitor = peripheral.wrap(v)
145
            setColors(monitor)
146
            monitor.clear()
147
            monitor.setCursorBlink(false)
148
            monitor.setTextScale(scale)
149-
end
149+
150
            table.insert(monitors,monitor)
151
152
            monitor.size = {}
153
            monitor.size.x,
154
             monitor.size.y = monitor.getSize()
155
            print(monitor.size.x,monitor.size.y)
156
        end
157
    end
158
    drawScreens()
159
end
160
161
function drawScreens()
162
    for i,monitor in ipairs(monitors) do
163
        drawScreen(monitor)
164
    end
165
end
166
167
function drawScreen(monitor)
168
    if target.chanel then
169
        setColors(monitor)
170
        monitor.clear()
171
    elseif target.locked then
172
        setColors(monitor)
173
        monitor.clear()
174
    else
175
        setColors(monitor,colors.red,colors.gray)
176
        writeText(monitor, "Destination",1,"center",0,1)
177
    end
178
end
179
180
do --First Time Setup
181
	setupMonitors()
182
end
183
184
while true do
185
    local eventData = {os.pullEvent()}
186
    local event = eventData[1]
187
	if event ~= "key" and event ~= "key_up" then
188
        print(table.unpack(eventData))
189
	end
190
191
    if event == "modem_message" then
192
        local event, side, channel, reply, message, distance = table.unpack(eventData)
193
        print(message)
194
        handleMessage(message, reply)
195
    elseif target.chanel and not target.locked then
196
        target.timeout = target.timeout-1
197
        if target.timeout <= 0 then
198
            timeoutTarget()
199
        end
200
    elseif event == "monitor_touch" then
201
        activate()
202
    elseif event == "peripheral" or
203
     event == "peripheral_detach" or
204
     event == "monitor_resize" then
205
        setupMonitors()
206
    end
207
end
208