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
function advtrains.split_train_at_fc(train)
-- splits train at first different current FC
function advtrains.split_train_at_fc(train, count_empty)
-- 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 fc = false
local ind = 0
@ -902,7 +904,7 @@ function advtrains.split_train_at_fc(train)
local data = advtrains.wagons[w_id]
if data then
local wfc = advtrains.get_cur_fc(data)
if wfc ~= "" then
if wfc ~= "" or count_empty then
if fc then
if fc ~= wfc then
ind = i

View File

@ -206,12 +206,16 @@ split_at_index(index, command)
split_at_fc(command)
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
command specified is sent to the rear part, as with split_at_index.
It returns the fc of the cars of the first part.
command specified is sent to the rear part, as with
split_at_index. It returns the fc of the cars of the first part.
Example: Train has current FCs "" "" "foo" "bar" "boo" "foo"
Result: first train: "" "" "foo"; second train: "bar" "boo" "foo"
Example : Train has current FCs "" "" "foo" "bar" "foo"
Result: first train: "" "" "foo"; second train: "bar" "foo"
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()
Steps the FCs of all train cars forward
train_length()

View File

@ -73,10 +73,15 @@ function r.fire_event(pos, evtdata)
if new_id then
minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow)
end
if fc == "" then
return nil
end
return fc
return fc or ""
end,
split_off_locomotive = function(cmd)
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,
train_length = function ()
if not train_id then return false end