1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
--F.stn("Mnv1W", "Grs1W", "Lih1E", "L")
--print("Apple Plains: Train",atc_id,"event",event.type,"sigstate",getstate("Apl1W"))
local this = "Grs1W"
local prev1 = "Mnv1W"
local doors = "L"
local next = "Lih1E"
if not atc_id then
print("Gram-Schmidt Street WTF - Bug happened again (same bug as in Apple Grove?). Trying laterrr...")
interrupt(20, "ready")
return
end
if not atc_arrow then
atc_send("B0")
error("Train passed in wrong direction!")
end
depart=false
if event.train then
setstate(prev1, "red")
if prev2 then setstate(prev2, "red") end
atc_send("B0O"..doors)
if not nohalt then
interrupt(waittime or (ret_sw and 20 or 7), "ready")
atc_set_text_inside(F.stnname(this))
end
end
if (event.int and event.message=="ready") or (event.train and nohalt) then
if getstate(this)=="green" and (not osig or getstate(osig)=="green") then
if ret_sw then
atc_send("OCD1B0WRS"..(dps or "M"))
setstate(ret_sw, ret_st)
else
atc_send("OCD1S"..(dps or "M"))
setstate(prev1, "green")
if line1 then --this call did not come from F.stn, do union stuff
setstate(prev2, "green")
if S.line[atc_id]==line1 then
if S.union_waiting[prev2] then setstate(prev1, "red") end
else
if S.union_waiting[prev1] then setstate(prev2, "red") end
end
end
end
setstate(this, "red")
atc_set_text_inside("Next stop: "..F.stnname(next))
depart=true
nodepartc=nil
else
interrupt(F.rant(), "ready")
nodepartc=nodepartc and nodepartc+1 or 0
if nodepartc>=10 then
atc_set_text_inside(F.stnname(this).."\nLine out of order!")
else
if (not osig or getstate(osig)=="green") then
atc_set_text_inside(F.stnname(this).."\nWaiting for preceding train...")
else
atc_set_text_inside(F.stnname(this).."\nWaiting for oncoming train...")
end
end
end
end
|