Add support to display text to passengers and on the outside of the train
Outside is currently displayed as infotext. TODO: signs-like draw it on the wagon FIXME: When object properties are set, for some reason the animation restartsmaster
parent
b5a5d9035f
commit
606c129f57
|
@ -75,7 +75,8 @@ function advtrains.on_control_change(pc, train, flip)
|
|||
end
|
||||
end
|
||||
function advtrains.update_driver_hud(pname, train, flip)
|
||||
advtrains.set_trainhud(pname, advtrains.hud_train_format(train, flip))
|
||||
local inside=train.text_inside or ""
|
||||
advtrains.set_trainhud(pname, inside.."\n"..advtrains.hud_train_format(train, flip))
|
||||
end
|
||||
function advtrains.clear_driver_hud(pname)
|
||||
advtrains.set_trainhud(pname, "")
|
||||
|
|
|
@ -244,6 +244,10 @@ function wagon:on_step(dtime)
|
|||
local driver=self.seatp[seatno] and minetest.get_player_by_name(self.seatp[seatno])
|
||||
if seat.driving_ctrl_access and driver then
|
||||
advtrains.update_driver_hud(driver:get_player_name(), self:train(), self.wagon_flipped)
|
||||
elseif driver then
|
||||
--only show the inside text
|
||||
local inside=self:train().text_inside or ""
|
||||
advtrains.set_trainhud(driver:get_player_name(), inside)
|
||||
end
|
||||
if driver and driver:get_player_control_bits()~=self.seatpc[seatno] then
|
||||
local pc=driver:get_player_control()
|
||||
|
@ -267,7 +271,13 @@ function wagon:on_step(dtime)
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--check infotext
|
||||
local outside=self:train().text_outside or ""
|
||||
if self.object:get_properties().infotext~=outside then
|
||||
self.object:set_properties({infotext=outside})
|
||||
end
|
||||
|
||||
local gp=self:train()
|
||||
local fct=self.wagon_flipped and -1 or 1
|
||||
--door animation
|
||||
|
@ -662,8 +672,9 @@ function wagon:show_get_on_form(pname)
|
|||
minetest.show_formspec(pname, "advtrains_geton_"..self.unique_id, form)
|
||||
end
|
||||
function wagon:show_wagon_properties(pname)
|
||||
if not self.seat_groups then
|
||||
return
|
||||
local numsgr=0
|
||||
if self.seat_groups then
|
||||
numsgr=#self.seat_groups
|
||||
end
|
||||
if not self.seat_access then
|
||||
self.seat_access={}
|
||||
|
@ -673,15 +684,21 @@ function wagon:show_wagon_properties(pname)
|
|||
checkbox: lock couples
|
||||
button: save
|
||||
]]
|
||||
local form="size[5,"..(#self.seat_groups*1.5+5).."]"
|
||||
local form="size[5,"..(numsgr*1.5+7).."]"
|
||||
local at=0
|
||||
for sgr,sgrdef in pairs(self.seat_groups) do
|
||||
local text = attrans("Access to @1",sgrdef.name)
|
||||
form=form.."field[0.5,"..(0.5+at*1.5)..";4,1;sgr_"..sgr..";"..text..";"..(self.seat_access[sgr] or "").."]"
|
||||
at=at+1
|
||||
if self.seat_groups then
|
||||
for sgr,sgrdef in pairs(self.seat_groups) do
|
||||
local text = attrans("Access to @1",sgrdef.name)
|
||||
form=form.."field[0.5,"..(0.5+at*1.5)..";4,1;sgr_"..sgr..";"..text..";"..(self.seat_access[sgr] or "").."]"
|
||||
at=at+1
|
||||
end
|
||||
end
|
||||
form=form.."checkbox[0,"..(at*1.5)..";lock_couples;"..attrans("Lock couples")..";"..(self.lock_couples and "true" or "false").."]"
|
||||
form=form.."button_exit[0.5,"..(1+at*1.5)..";4,1;save;"..attrans("Save wagon properties").."]"
|
||||
if self:train() then --just in case
|
||||
form=form.."field[0.5,"..(1.5+at*1.5)..";4,1;text_outside;"..attrans("Text displayed outside on train")..";"..(self:train().text_outside or "").."]"
|
||||
form=form.."field[0.5,"..(2.5+at*1.5)..";4,1;text_inside;"..attrans("Text displayed inside train")..";"..(self:train().text_inside or "").."]"
|
||||
end
|
||||
form=form.."button_exit[0.5,"..(3+at*1.5)..";4,1;save;"..attrans("Save wagon properties").."]"
|
||||
minetest.show_formspec(pname, "advtrains_prop_"..self.unique_id, form)
|
||||
end
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
|
@ -737,6 +754,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
if fields.lock_couples then
|
||||
wagon.lock_couples = fields.lock_couples == "true"
|
||||
end
|
||||
if fields.text_outside then
|
||||
if fields.text_outside~="" then
|
||||
wagon:train().text_outside=fields.text_outside
|
||||
else
|
||||
wagon:train().text_outside=nil
|
||||
end
|
||||
end
|
||||
if fields.text_inside then
|
||||
if fields.text_inside~="" then
|
||||
wagon:train().text_inside=fields.text_inside
|
||||
else
|
||||
wagon:train().text_inside=nil
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -122,6 +122,10 @@ atc_id
|
|||
Train ID of the train currently passing the controller. Nil if there's no train.
|
||||
atc_speed
|
||||
Speed of the train, or nil if there is no train.
|
||||
atc_set_text_outside(text)
|
||||
Set text shown on the outside of the train. Pass nil to show no text.
|
||||
atc_set_text_inside(text)
|
||||
Set text shown to train passengers. Pass nil to show no text.
|
||||
|
||||
# Operator panel
|
||||
This simple node executes its actions when punched. It can be used to change a switch and update the corresponding signals or similar applications.
|
||||
|
|
|
@ -61,6 +61,16 @@ function r.fire_event(pos, evtdata)
|
|||
atc_arrow = atc_arrow,
|
||||
atc_id = train_id,
|
||||
atc_speed = tvel,
|
||||
atc_set_text_outside = function(text)
|
||||
if not train_id then return false end
|
||||
advtrains.trains[train_id].text_outside=text
|
||||
return true
|
||||
end,
|
||||
atc_set_text_inside = function(text)
|
||||
if not train_id then return false end
|
||||
advtrains.trains[train_id].text_inside=text
|
||||
return true
|
||||
end,
|
||||
}
|
||||
|
||||
atlatc.active.run_in_env(pos, evtdata, customfct)
|
||||
|
|
Loading…
Reference in New Issue