summaryrefslogtreecommitdiff
path: root/far/init_code.lua
diff options
context:
space:
mode:
Diffstat (limited to 'far/init_code.lua')
-rw-r--r--far/init_code.lua140
1 files changed, 87 insertions, 53 deletions
diff --git a/far/init_code.lua b/far/init_code.lua
index 15dfbf8..429d6ac 100644
--- a/far/init_code.lua
+++ b/far/init_code.lua
@@ -1,15 +1,41 @@
-- environment_far.lua
+--[[
+local STOP_TIME = 40
+local STOPCMD="B0WO"
+local DEPCMD="A1OCD1SM"
+local RDEPCMD="RA1OCD1SM"
+local DYNAMIC_THR = 10
+local DYNAMIC_EN = false
+]]
+
if S.trains == nil then S.trains = {} end
if S.d == nil then S.d = {} end
if S.datetime == nil then S.datetime = "" end
if S.stop_display == nil then S.stop_display = false end
if S.show_farpass_only == nil then S.show_farpass_only = false end
+if S.timetake == nil then S.timetake = {} end
+if S.ttp == nil then S.ttp = {} end
+if S.ttt == nil then S.ttt = {} end
+
+F.ttp={
+ FAR_E = {
+ outside_text = "[FAR] Fareast End\nvia Halfway, Bayonne, Fucking",
+ inside_line_desc = "FAR to Fareast End",
+ stn_display = "FAR Fareast End",
+ },
+ FAR_W = {
+ outside_text = "[FAR] Salt Factory\nvia Fucking, Bayonne, Halfway",
+ inside_line_desc = "FAR to Salt Factory",
+ stn_display = "FAR Salt Factory",
+ },
+}
F.print = function (str) if F.debug then print("".. (str or "nil") ) end end
F.isempty = function (s) return s == nil or s == "" end
F.get_rc_safe = function() return get_rc() or "" end
F.get_line_safe = function() return get_line() or "" end
F.get_train_length_safe = function() return train_length() or 0 end
+
F.avg = function(t)
local sum = 0
local count = 0
@@ -26,6 +52,12 @@ if event.init then
F.debug = true
F.printAllTrainsInfo = true
F.max_displays = 15
+ F.STOP_TIME = 40
+ F.STOPCMD="B0WO"
+ F.DEPCMD="A1OCD1SM"
+ F.RDEPCMD="RA1OCD1SM"
+ F.DYNAMIC_THR = 10
+ F.DYNAMIC_EN = false
F.print("Initialized")
end
@@ -229,7 +261,7 @@ function F.stop_sd(st_name, doors, departcommand, minstoptime, d_int, d_off)
local timenow = os.time()
local timerdy = timenow + minstoptime
local wait = d_int - ((timerdy-d_off) % d_int)
- local waitcorr = math.floor(wait*0.66)
+ local waitcorr = math.floor(wait*0.66)
digiline_send("monitor", "Departure scheduled for: | "..os.date("%H:%M:%S", timenow+wait))
atc_send("B0 W O"..doors.." D"..waitcorr.." OCD1"..departcommand)
else
@@ -264,7 +296,7 @@ end
-- Stat from subway
F.stat=function(line, init)
-- statistics
- -- init
+
if init then
reftrain = atc_id
a_tbt = 30
@@ -278,7 +310,7 @@ F.stat=function(line, init)
end
if not a_tbtmax then a_tbtmax = 30 end
if not c_tbtmax then c_tbtmax = 0 end
- --real code
+
if event.train then
local time = os.time()
c_not = c_not + 1
@@ -304,7 +336,6 @@ F.stat=function(line, init)
end
end
-S.timetake = {}
function F.timetake_start(ttname)
if not atc_id then return end
local nouw = rwt.to_secs(rwt.now())
@@ -314,7 +345,6 @@ function F.timetake_start(ttname)
S.timetake[ttname][atc_id] = nouw
end
---L100
function F.timetake_end(ttname)
if not atc_id then return end
if not S.timetake[ttname] or not S.timetake[ttname][atc_id] then
@@ -366,28 +396,6 @@ S.ttt[train_id] = { - trains
}
]]
-local STOP_TIME = 10
-local STOPCMD="B0WO"
-local DEPCMD="A1OCD1SM"
-local RDEPCMD="RA1OCD1SM"
-local DYNAMIC_THR = 10
-local DYNAMIC_EN = false
-
-if not S.ttp then S.ttp = {} end
-if not S.ttt then S.ttt = {} end
-F.ttp={
- FAR_E = {
- outside_text = "[FAR] Fareast End\nvia Halfway, Bayonne, Fucking",
- inside_line_desc = "FAR to Fareast End",
- stn_display = "FAR Fareast End",
- },
- FAR_W = {
- outside_text = "[FAR] Salt Factory\nvia Fucking, Bayonne, Halfway",
- inside_line_desc = "FAR to Salt Factory",
- stn_display = "FAR Salt Factory",
- },
-}
-
--[[
Timetable entry point. The train finalizes its last timetable and
registers itself on the given timetable instance. It departs at the next time slot
@@ -395,13 +403,27 @@ registers itself on the given timetable instance. It departs at the next time sl
F.ttp_begin({
stn = "Warmoneaye", -- station name
tt = "CFE_S", -- timetable ID
- depint = "05;00", --departure slot interval
+ depint = "12;00", --departure slot interval
depoff = "00;00", --departure slot offset
doorside = "L",
reverse = true,
only_lines = nil, --if given a table, only trains where only_lines[get_line()] is true are considered
force_tt_reset = false, -- force reset of travel times for this timetable
})
+
+
+F.ttp_begin({
+ stn = "Salt Factory", -- station name
+ tt = "FAR_E", -- timetable ID
+ depint = "12;00", --departure slot interval
+ depoff = "00;00", --departure slot offset
+ doorside = "L",
+ reverse = true,
+ only_lines = {['FAR'] = true},
+ force_tt_reset = false,
+ pos = POS(1755,8,1570),
+ direction = "west",
+})
]]
-- Make train depart at the next time slot, and save its start time
function F.ttp_begin(p)
@@ -424,8 +446,11 @@ function F.ttp_begin(p)
atc_set_text_inside("Next stop: "..p.stn.."\nTerminal Station.\nThis train continues as "..F.ttp[p.tt].inside_line_desc)
end
if event.train then
+ if p.pos and p.direction then
+ F.save_train(p.pos, p.direction)
+ end
-- train arrived, planning departure
- atc_send(STOPCMD .. p.doorside)
+ atc_send(F.STOPCMD .. p.doorside)
local time_now = rwt.now()
-- Train might have had another TT before, do the cleanup from ttp_end here.
@@ -467,21 +492,21 @@ function F.ttp_begin(p)
if event.schedule then
-- departure. save actual departure time in tt
if S.ttt[atc_id] then -- failsafe: if entry is deleted externally somehow, train just departs and is not tracked by tt (makes resetting S.ttt possible)
- S.ttt[atc_id].actual_dep = rwt.now()
- local delay = rwt.diff(S.ttt[atc_id].desired_dep, S.ttt[atc_id].actual_dep)
- atc_set_text_inside(F.ttp[p.tt].inside_line_desc .. "\nDelay: " .. rwt.to_string(delay, true))
- S.ttt[atc_id].last_delay = delay
+ S.ttt[atc_id].actual_dep = rwt.now()
+ local delay = rwt.diff(S.ttt[atc_id].desired_dep, S.ttt[atc_id].actual_dep)
+ atc_set_text_inside(F.ttp[p.tt].inside_line_desc .. "\nDelay: " .. rwt.to_string(delay, true))
+ S.ttt[atc_id].last_delay = delay
end
if p.reverse then
- atc_send(RDEPCMD)
+ atc_send(F.RDEPCMD)
else
- atc_send(DEPCMD)
+ atc_send(F.DEPCMD)
end
end
end
--[[
Generic stop on timetable. Any train that has a TT instance registered
-stops here, waits STOP_TIME and continues. Behavior can be altered by options:
+stops here, waits F.STOP_TIME and continues. Behavior can be altered by options:
F.ttp_stop({
stn = "Personhood West", -- station name
doorside = "L",
@@ -489,10 +514,20 @@ F.ttp_stop({
end_of_tt = { TT_ID = true },
-- if present and key is true for a TT identifier, this is the last station on this timetable. Trains will stop recording timetable and be deregistered.
departure = { TT_ID = RWT relative to initial departure },
- -- If present, override desired departure time. Defaults to travel time + STOP_TIME if not provided
+ -- If present, override desired departure time. Defaults to travel time + F.STOP_TIME if not provided
no_disable_ars = nil,
-- if true, does not disable ARS on approach (used for example at INTERCAL)
+ pos = POS(1,1,1),
+ direction = "east",
})
+
+F.ttp_stop({
+ stn = "The Cube",
+ doorside = "R",
+ pos = POS(1,1,1),
+ direction = "east",
+})
+
]]
function F.ttp_stop(p)
-- set my approach callback mode
@@ -512,7 +547,7 @@ function F.ttp_stop(p)
if event.approach and not event.has_entered then
-- make the train stop
if not p.no_disable_ars then
- atc_set_ars_disable(true)
+ atc_set_ars_disable(true)
end
atc_set_lzb_tsr(2)
atc_set_text_inside("Next stop: "..p.stn)
@@ -521,17 +556,19 @@ function F.ttp_stop(p)
--!-- disaster recovery --!--
-- if event.approach and event.has_entered then
-- print(atc_id,p.stn,"Disaster Recovery...")
--- atc_send(DEPCMD)
+-- atc_send(F.DEPCMD)
-- end
if event.train then
+ if p.pos and p.direction then
+ F.save_train(p.pos, p.direction)
+ end
-- train arrived, planning departure
- atc_send(STOPCMD..p.doorside)
+ atc_send(F.STOPCMD..p.doorside)
local time_now = rwt.now()
-- update our location and determine desired and planned departure
---L200
- local next_dep_time = rwt.add(time_now, STOP_TIME)
+ local next_dep_time = rwt.add(time_now, F.STOP_TIME)
trn.location = p.stn
trn.desired_dep = nil
trn.actual_dep = nil
@@ -542,16 +579,16 @@ function F.ttp_stop(p)
p.departure[tt])
elseif tti.travel_times[p.stn] then
trn.desired_dep = rwt.add(trn.initial_dep or 0,
- tti.travel_times[p.stn] + STOP_TIME)
+ tti.travel_times[p.stn] + F.STOP_TIME)
-- dyn travel time
- if DYNAMIC_EN then
+ if F.DYNAMIC_EN then
local ttpd = rwt.diff(next_dep_time, trn.desired_dep)
- if ttpd > DYNAMIC_THR then
- local new_trav = rwt.diff(trn.initial_dep, time_now) + DYNAMIC_THR
+ if ttpd > F.DYNAMIC_THR then
+ local new_trav = rwt.diff(trn.initial_dep, time_now) + F.DYNAMIC_THR
print(atc_id,tt,"arrived at",p.stn,ttpd,"s early, TT",tti.travel_times[p.stn],"->",new_trav)
tti.travel_times[p.stn] = new_trav
trn.desired_dep = rwt.add(trn.initial_dep or 0,
- new_trav + STOP_TIME)
+ new_trav + F.STOP_TIME)
end
end
end
@@ -595,7 +632,7 @@ function F.ttp_stop(p)
atc_set_text_inside(F.ttp[tt].inside_line_desc
.."\nDelay: "..rwt.to_string(delay, true))
S.ttt[atc_id].last_delay = delay
- atc_send(DEPCMD)
+ atc_send(F.DEPCMD)
if p.end_of_tt and p.end_of_tt[tt] then
-- end of timetable. Deregister train
if tti.recording_train == atc_id then
@@ -608,7 +645,6 @@ end
function F.ttp_info_times(tt, starttime)
- --L307
local ttf = F.ttp[tt]
local tti = S.ttp[tt]
local p = {}
@@ -619,14 +655,13 @@ function F.ttp_info_times(tt, starttime)
for i=2,#tti.station_order do
local ap = rwt.add(starttime, tti.travel_times[tti.station_order[i]])
p[#p+1] = ("Ap "..rwt.to_string(ap, true)..
- " Dp "..rwt.to_string(rwt.add(ap, STOP_TIME), false)..
+ " Dp "..rwt.to_string(rwt.add(ap, F.STOP_TIME), false)..
" "..tti.station_order[i])
end
return p
end
function F.ttp_info_trains(tt, starttime)
- --L307
local ttf = F.ttp[tt]
local tti = S.ttp[tt]
local p = {}
@@ -661,7 +696,6 @@ end
show_trainid = false,
}]]
function F.ttp_station_display(p)
- --L425
-- { dep, text }
local next_trains = {}
local function is_past_station(tstn, stnorder)
@@ -698,7 +732,7 @@ function F.ttp_station_display(p)
add_train(train.planned_dep, line, train, id)
elseif not is_past_station(train.location, sttp.station_order) then
-- train is still approaching, calculate arrival time
- local trav_dep = rwt.add(train.initial_dep, (sttp.travel_times[p.station] or 0) + STOP_TIME)
+ local trav_dep = rwt.add(train.initial_dep, (sttp.travel_times[p.station] or 0) + F.STOP_TIME)
local act_dep = rwt.add(trav_dep, train.last_delay)
if p.departure and p.departure[line] then
local plan_dep = rwt.add(train.initial_dep, p.departure[line])