aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)