aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSingularis <singularis@volny.cz>2024-12-30 19:34:51 +0100
committerorwell <orwell@bleipb.de>2025-05-27 20:22:01 +0200
commitbc2faa3c9c781854c25f35d3ebbf6c5289c07f92 (patch)
treeb3d2700207a3bd612d5962969603ab054f7cf2ff
parente687b4c3b4629db3046932a58c534e81a5d7f1c4 (diff)
downloadadvtrains-bc2faa3c9c781854c25f35d3ebbf6c5289c07f92.tar.gz
advtrains-bc2faa3c9c781854c25f35d3ebbf6c5289c07f92.tar.bz2
advtrains-bc2faa3c9c781854c25f35d3ebbf6c5289c07f92.zip
[advtrains_line_automation] neresetovat vlaky, pokud se nezměnily zastávky
-rw-r--r--advtrains_line_automation/line_editor.lua43
1 files changed, 36 insertions, 7 deletions
diff --git a/advtrains_line_automation/line_editor.lua b/advtrains_line_automation/line_editor.lua
index 9ab2b06..0862579 100644
--- a/advtrains_line_automation/line_editor.lua
+++ b/advtrains_line_automation/line_editor.lua
@@ -55,6 +55,20 @@ local function add_linevar(stn, linevar_def)
return true, nil
end
+local function same_stops(stops1, stops2)
+ assert(stops1)
+ assert(stops2)
+ if #stops1 ~= #stops2 then
+ return false
+ end
+ for i, stop in ipairs(stops1) do
+ if stop.stn ~= stops2[i].stn then
+ return false
+ end
+ end
+ return true
+end
+
local function replace_linevar(stn, linevar_def)
local station = advtrains.lines.stations[stn]
if station == nil or station.linevars == nil then
@@ -62,18 +76,28 @@ local function replace_linevar(stn, linevar_def)
end
local linevar = assert(linevar_def.name)
local linevars = station.linevars
- if linevars[linevar] == nil then
+ local old_linevar_def = linevars[linevar]
+ if old_linevar_def == nil then
return false, "Nemohu nahradit, varianta linky '"..linevar.."' dosud neexistuje!"
end
linevars[linevar] = linevar_def
- for train_id, train in pairs(advtrains.trains) do
- local ls = train.line_status
- if ls ~= nil and ls.linevar == linevar then
- core.log("action", "Train "..train_id.." restarted from index "..ls.linevar_index.." due to replacement of linevar '"..linevar.."'.")
- ls.linevar_index = 1
+ local restart_count = 0
+ if not same_stops(old_linevar_def.stops, linevar_def.stops) then
+ -- změnily se zastávky, musíme restartovat vlaky:
+ for train_id, train in pairs(advtrains.trains) do
+ local ls = train.line_status
+ if ls ~= nil and ls.linevar == linevar then
+ core.log("action", "Train "..train_id.." restarted from index "..ls.linevar_index.." due to replacement of linevar '"..linevar.."'.")
+ ls.linevar_index = 1
+ restart_count = restart_count + 1
+ end
end
end
- return true, nil
+ if restart_count > 0 then
+ return true, restart_count.." vlak/ů restartován/o kvůli změnám"
+ else
+ return true, nil
+ end
end
local function delete_linevar(stn, linevar)
@@ -581,9 +605,11 @@ local function formspec_callback(custom_state, player, formname, fields)
if selected_linevar == nil then
if to_linevar == nil then
-- zcela nová varianta
+ core.log("action", "Will add a new linevar '"..new_linevar.."'")
success, errmsg = add_linevar(new_linevar_station, new_linevar_def)
else
-- replace
+ core.log("action", "Will replace an existing linevar '"..new_linevar.."'")
success = check_rights(pinfo, to_linevar_def.owner)
if success then
success, errmsg = replace_linevar(new_linevar_station, new_linevar_def)
@@ -593,6 +619,7 @@ local function formspec_callback(custom_state, player, formname, fields)
end
elseif to_linevar == nil then
-- delete and add
+ core.log("action", "Will delete selected linevar '"..selected_linevar.."' and add new linevar '"..new_linevar.."'")
success = check_rights(pinfo, selected_linevar_def.owner)
if success then
success, errmsg = delete_linevar(selected_linevar_station, selected_linevar)
@@ -604,6 +631,7 @@ local function formspec_callback(custom_state, player, formname, fields)
end
elseif selected_linevar ~= to_linevar then
-- delete and replace
+ core.log("action", "Will add delete selected linevar '"..selected_linevar.."' and replace existing linevar '"..new_linevar.."'")
success = check_rights(pinfo, to_linevar_def.owner)
if success then
success = check_rights(pinfo, selected_linevar_def.owner)
@@ -620,6 +648,7 @@ local function formspec_callback(custom_state, player, formname, fields)
end
else
-- replace
+ core.log("action", "Will replace existing linevar '"..new_linevar.."'")
success = check_rights(pinfo, to_linevar_def.owner)
if success then
success, errmsg = replace_linevar(new_linevar_station, new_linevar_def)