Add command to split off locomotive

master
Gabriel Pérez-Cerezo 2020-07-28 20:39:35 +02:00
parent c7ea09ed59
commit 36d8c8b716
3 changed files with 22 additions and 11 deletions

View File

@ -892,8 +892,10 @@ function advtrains.spawn_wagons(train_id)
end end
end end
function advtrains.split_train_at_fc(train) function advtrains.split_train_at_fc(train, count_empty)
-- splits train at first different current FC -- splits train at first different current FC by convention,
-- locomotives have empty FC so are ignored
-- count_empty is used to split off locomotives
local train_id = train.id local train_id = train.id
local fc = false local fc = false
local ind = 0 local ind = 0
@ -902,7 +904,7 @@ function advtrains.split_train_at_fc(train)
local data = advtrains.wagons[w_id] local data = advtrains.wagons[w_id]
if data then if data then
local wfc = advtrains.get_cur_fc(data) local wfc = advtrains.get_cur_fc(data)
if wfc ~= "" then if wfc ~= "" or count_empty then
if fc then if fc then
if fc ~= wfc then if fc ~= wfc then
ind = i ind = i

View File

@ -206,12 +206,16 @@ split_at_index(index, command)
split_at_fc(command) split_at_fc(command)
Splits the train in such a way that all cars with non-empty Splits the train in such a way that all cars with non-empty
current FC of the first part of the train have the same FC. The current FC of the first part of the train have the same FC. The
command specified is sent to the rear part, as with split_at_index. command specified is sent to the rear part, as with
It returns the fc of the cars of the first part. split_at_index. It returns the fc of the cars of the first part.
Example: Train has current FCs "" "" "foo" "bar" "boo" "foo" Example : Train has current FCs "" "" "foo" "bar" "foo"
Result: first train: "" "" "foo"; second train: "bar" "boo" "foo" Result: first train: "" "" "foo"; second train: "bar" "foo"
The command returns "foo" in this case The command returns "foo" in this case
split_off_locomotive(command)
Splits off the locomotives at the front of the train, which are
identified by an empty FC. command specifies the command to be
executed by the rear half of the train.
step_fc() step_fc()
Steps the FCs of all train cars forward Steps the FCs of all train cars forward
train_length() train_length()

View File

@ -73,10 +73,15 @@ function r.fire_event(pos, evtdata)
if new_id then if new_id then
minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow) minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow)
end end
if fc == "" then return fc or ""
return nil end,
end split_off_locomotive = function(cmd)
return fc assertt(cmd, "string")
if not train_id then return false end
local new_id, fc = advtrains.split_train_at_fc(train, true)
if new_id then
minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow)
end
end, end,
train_length = function () train_length = function ()
if not train_id then return false end if not train_id then return false end