diff options
author | orwell96 <mono96.mml@gmail.com> | 2017-02-04 18:35:34 +0100 |
---|---|---|
committer | orwell96 <mono96.mml@gmail.com> | 2017-02-04 18:35:34 +0100 |
commit | 61e48fff280075ec52bfaa31644c22b08814d680 (patch) | |
tree | c7cac2a799bfe4bf6f180617f96c1035e04b26df /advtrains/advtrains_luaautomation/atc_rail.lua | |
parent | 1e3bd3a5fd5d448fa123ba02012f935fbc29880a (diff) | |
download | advtrains-61e48fff280075ec52bfaa31644c22b08814d680.tar.gz advtrains-61e48fff280075ec52bfaa31644c22b08814d680.tar.bz2 advtrains-61e48fff280075ec52bfaa31644c22b08814d680.zip |
Commit 1.6.2
- Add some more stuff to API for LuaATC rails
- Warn on strange events even if debug info is disabled
- save atlatc on shutdown too
- fix detector rails in unloaded chunks
- do not fail silently in simple ATC rails
Diffstat (limited to 'advtrains/advtrains_luaautomation/atc_rail.lua')
-rw-r--r-- | advtrains/advtrains_luaautomation/atc_rail.lua | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/advtrains/advtrains_luaautomation/atc_rail.lua b/advtrains/advtrains_luaautomation/atc_rail.lua index f52252c..c2c8d6f 100644 --- a/advtrains/advtrains_luaautomation/atc_rail.lua +++ b/advtrains/advtrains_luaautomation/atc_rail.lua @@ -11,7 +11,7 @@ function r.fire_event(pos, evtdata) local railtbl = atlatc.active.nodes[ph] if not railtbl then - atprint("missing rail table entry!") + atwarn("LuaAutomation ATC interface rail at",ph,": Data not in memory! Please visit position and click 'Save'!") return end @@ -19,40 +19,48 @@ function r.fire_event(pos, evtdata) local arrowconn = railtbl.arrowconn --prepare ingame API for ATC. Regenerate each time since pos needs to be known - local atc_valid, atc_arrow + --If no train, then return false. local train_id=advtrains.detector.on_node[ph] - local train=advtrains.trains[train_id] - if not train then return false end - if not train.path then - --we happened to get in between an invalidation step - --delay - atlatc.interrupt.add(0,pos,evtdata) - return - end - for index, ppos in pairs(train.path) do - if vector.equals(advtrains.round_vector_floor_y(ppos), pos) then - atc_arrow = - vector.equals( - advtrains.dirCoordSet(pos, arrowconn), - advtrains.round_vector_floor_y(train.path[index+train.movedir]) - ) - atc_valid = true + local train, atc_arrow, tvel + if train_id then train=advtrains.trains[train_id] end + if train then + if not train.path then + --we happened to get in between an invalidation step + --delay + atlatc.interrupt.add(0,pos,evtdata) + return + end + for index, ppos in pairs(train.path) do + if vector.equals(advtrains.round_vector_floor_y(ppos), pos) then + atc_arrow = + vector.equals( + advtrains.dirCoordSet(pos, arrowconn), + advtrains.round_vector_floor_y(train.path[index+train.movedir]) + ) + end + end + if atc_arrow==nil then + atwarn("LuaAutomation ATC rail at", pos, ": Rail not on train's path! Can't determine arrow direction. Assuming +!") + atc_arrow=true + tvel=train.velocity end end local customfct={ atc_send = function(cmd) + if not train_id then return false end advtrains.atc.train_reset_command(train_id) - if atc_valid then - train.atc_command=cmd - train.atc_arrow=atc_arrow - return atc_valid - end + train.atc_command=cmd + train.atc_arrow=atc_arrow + return true end, atc_reset = function(cmd) + if not train_id then return false end advtrains.atc.train_reset_command(train_id) return true end, - atc_arrow = atc_arrow + atc_arrow = atc_arrow, + atc_id = train_id, + atc_speed = tvel, } atlatc.active.run_in_env(pos, evtdata, customfct) |