SHOW:
|
|
- or go back to the newest paste.
1 | local rs = peripheral.find("redstoneIntegrator") | |
2 | if not rs then error("No redstone integrator") end | |
3 | local dandelifeon = "south" | |
4 | local destructor = "north" | |
5 | local constructor = "up" | |
6 | local placer = "east" | |
7 | - | local cancelKey = keys.c |
7 | + | |
8 | local cancellationPending = false | |
9 | ||
10 | local function pulse(direction, duration) | |
11 | if not duration then duration = 1 end | |
12 | rs.setOutput(direction, true) | |
13 | sleep(duration) | |
14 | rs.setOutput(direction, false) | |
15 | end | |
16 | ||
17 | local function initOutput(direction) | |
18 | rs.setOutput(direction, false) | |
19 | end | |
20 | ||
21 | initOutput(dandelifeon) | |
22 | initOutput(destructor) | |
23 | initOutput(constructor) | |
24 | initOutput(placer) | |
25 | ||
26 | local function main() | |
27 | print("Cellular Block Farm") | |
28 | - | sleep(1) |
28 | + | while not cancellationPending do |
29 | if rs.getInput(lever) then | |
30 | print("Running Dandelifeon...") | |
31 | pulse(placer) | |
32 | pulse(dandelifeon, 50 + 2) | |
33 | print("Dandelifon cycle finished") | |
34 | else | |
35 | pulse(destructor) | |
36 | pulse(constructor) | |
37 | pulse(dandelifeon, 2) | |
38 | - | print("Program is running now, press", keys.getName(cancelKey), "to cancel") |
38 | + | |
39 | end | |
40 | - | local event, key = os.pullEvent("key") |
40 | + | print("Okay, finished cleanup, goodbye...") |
41 | - | if key == cancelKey then |
41 | + | |
42 | - | print("Okay, goodbye...") |
42 | + | |
43 | local function canceller() | |
44 | local oldPullEvent = os.pullEvent | |
45 | os.pullEvent = os.pullEventRaw | |
46 | print("Program is running now, hold Ctrl+T (terminate) to shutdown.") | |
47 | while true do | |
48 | - | parallel.waitForAny(main, canceller) |
48 | + | local event = os.pullEventRaw("terminate") |
49 | if event == "terminate" then | |
50 | os.pullEvent = oldPullEvent | |
51 | print("Cancellation was requested, finishing up safely...") | |
52 | cancellationPending = true | |
53 | return | |
54 | end | |
55 | end | |
56 | end | |
57 | ||
58 | parallel.waitForAll(main, canceller) |