View difference between Paste ID: M8Re6fRF and XF377DKw
SHOW: | | - or go back to the newest paste.
1
    
2
    reactor_pos = nil
3
    sides = {"top" , "bottom" , "front" , "left" , "right" , "back"}    
4
    reactor_file = "reactor.txt"
5
    state_file = "state.txt"
6
    command = nil
7
    id = nil
8
     
9
    function clear()
10
            term.setBackgroundColor(colors.green)
11
            term.clear()
12
    end 
13
14
    function nextLine()
15
	local hx, hy = term.getCursorPos()
16
	term.setCursorPos(hx, hy + 1)	
17
    end
18
     
19
    function setReactorPos()
20
            clear()
21
            term.setCursorPos(15, 7)
22
            term.write("Select reactor possition")
23
            term.setCursorPos(15, 8)
24
            term.write("1: Top, 2: Bot, 3: Front")
25
            term.setCursorPos(15, 9)
26
            term.write("4: Left, 5: Right, 6: Back")
27
            term.setCursorPos(15, 10)
28
            reactor_pos = tonumber(read())
29
            local file = fs.open(reactor_file, "w")
30
            file.write(reactor_pos)
31
            file.close()
32
    end
33
     
34
	function saveStateOnDisk()
35
		local file = fs.open(state_file, "w")
36
		file.write(command)
37
		file.close()
38
	end
39
40
	function loadStateFromDisk()
41
		if fs.exists(state_file) then
42
			local file = fs.open(state_file, "r")
43
			result = tostring(file.readLine())
44
			file.close()
45
			return result
46
		end 
47
		return nil
48
	end
49
50
    function DetectPeripheral(name)      
51
            for i = 1, 6 do
52
                    if peripheral.isPresent(sides[i]) and peripheral.getType(sides[i]) == name then
53
                            return sides[i]
54
                    end
55
            end
56
            return nil      
57
    end 
58
     
59
    function rednetControll()
60
            while true do
61
                    wifi = DetectPeripheral("modem")
62
                    rednet.open(wifi)
63
                    a, b, c = rednet.receive()
64
                    id = a
65
                    command = b
66-
                local sEvent, param = os.pullEvent("key")
66+
67-
				if sEvent == "key" then
67+
68-
					print(param)
68+
69-
					if param == 45 then
69+
70-
						if redstone.getOutput(sides[reactor_pos]) == true then
70+
71-
							command = "stop"
71+
72-
							return 0
72+
                local sEvent, param = os.pullEvent("monitor_touch")
73-
						else
73+
		if redstone.getOutput(sides[reactor_pos]) == true then
74-
							command = "start"
74+
			command = "stop"
75-
							return 0
75+
			return 0
76-
						end
76+
		else
77-
                   end
77+
			command = "start"
78-
			  end
78+
			return 0
79
		end
80
	    end
81
    end
82
	
83
	
84
    function Menu()
85-
            term.setCursorPos(19, 8)
85+
86
            term.setCursorPos(screen_width/4 , screen_height * 0.3)
87
            local temp = tostring(sides[reactor_pos])
88
            if redstone.getOutput(temp) then
89
                    term.write("ALL WORKS!")
90
            else
91
                    term.write("NOTHING WORKS!")
92
            end
93
	    term.setCursorPos(screen_width/4 ,1 + (screen_height * 0.3) )
94
            term.write("REACTOR IS ON "..sides[reactor_pos])
95
	    term.setCursorPos(screen_width/4 ,2 + (screen_height * 0.3) )
96-
     		return 0
96+
97
     	return 0
98
    end
99
    screen = peripheral.wrap(DetectPeripheral("monitor"))
100
    --logout protection, reactor position
101
    if not fs.exists(reactor_file) then
102
    setReactorPos()
103
    else
104
            local file = fs.open(reactor_file, "r")
105
            reactor_pos = tonumber(file.readLine())
106
            file.close()
107
    end
108
    --logout protection, reactor output
109
    command = loadStateFromDisk()
110
    if command == "start" then
111
    	redstone.setOutput(sides[reactor_pos], true)
112
    end
113
    --mainloop
114
    term.redirect(screen)
115
    screen_width, screen_height = screen.getSize()
116
    while true do
117
    		Menu()
118
            parallel.waitForAny(rednetControll, keyControll)
119
            if command == "start" then
120
                    redstone.setOutput(sides[reactor_pos], true)
121
                    saveStateOnDisk()
122
                    		if not id == nil then
123
                            	rednet.send(id, true)
124
                            	id = nil
125
                    end
126
            elseif command == "stop" then
127
                    redstone.setOutput(sides[reactor_pos], false)
128
                    saveStateOnDisk()
129
                            if not id == nil then
130
                           		rednet.send(id, false)
131
                           		id = nil
132
                    end
133
            elseif command == "state" then
134
                    rednet.send(id, redstone.getOutput(sides[reactor_pos]))
135
            end
136
    end