summaryrefslogtreecommitdiff
path: root/subway/nodes/(-1559,-1,697).lua
blob: 06e29da4c2d8c195b774e248c042f11aa6896e8f (plain)
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
--print("Apple Plains: Train",atc_id,"event",event.type,"sigstate",getstate("Apl1W"))
--F.stn("App1W", "Apl1W", "Pal1R", "L")
local this = "Apl1W"
local prev1 = "App1W"
local doors = "L"
local next = "Pal1R"

  if not atc_id then
    print("Apple Plains WTF - Bug happened again. 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