154 lines
4.6 KiB
Lua
154 lines
4.6 KiB
Lua
local S = attrans
|
|
|
|
advtrains.register_wagon("subway_wagon", {
|
|
mesh="advtrains_subway_wagon.b3d",
|
|
textures = {"advtrains_subway_wagon.png"},
|
|
drives_on={default=true},
|
|
max_speed=15,
|
|
seats = {
|
|
{
|
|
name="Driver stand",
|
|
attach_offset={x=0, y=0, z=0},
|
|
view_offset={x=0, y=0, z=0},
|
|
group="dstand",
|
|
},
|
|
{
|
|
name="1",
|
|
attach_offset={x=-4, y=-2, z=8},
|
|
view_offset={x=0, y=0, z=0},
|
|
group="pass",
|
|
},
|
|
{
|
|
name="2",
|
|
attach_offset={x=4, y=-2, z=8},
|
|
view_offset={x=0, y=0, z=0},
|
|
group="pass",
|
|
},
|
|
{
|
|
name="3",
|
|
attach_offset={x=-4, y=-2, z=-8},
|
|
view_offset={x=0, y=0, z=0},
|
|
group="pass",
|
|
},
|
|
{
|
|
name="4",
|
|
attach_offset={x=4, y=-2, z=-8},
|
|
view_offset={x=0, y=0, z=0},
|
|
group="pass",
|
|
},
|
|
},
|
|
seat_groups = {
|
|
dstand={
|
|
name = "Driver Stand",
|
|
access_to = {"pass"},
|
|
require_doors_open=true,
|
|
driving_ctrl_access=true,
|
|
},
|
|
pass={
|
|
name = "Passenger area",
|
|
access_to = {"dstand"},
|
|
require_doors_open=true,
|
|
},
|
|
},
|
|
assign_to_seat_group = {"pass", "dstand"},
|
|
coupler_types_front = {chain=true},
|
|
coupler_types_back = {chain=true},
|
|
doors={
|
|
open={
|
|
[-1]={frames={x=0, y=20}, time=1},
|
|
[1]={frames={x=40, y=60}, time=1},
|
|
sound = "advtrains_subway_dopen",
|
|
},
|
|
close={
|
|
[-1]={frames={x=20, y=40}, time=1},
|
|
[1]={frames={x=60, y=80}, time=1},
|
|
sound = "advtrains_subway_dclose",
|
|
}
|
|
},
|
|
door_entry={-1, 1},
|
|
visual_size = {x=1, y=1},
|
|
wagon_span=2,
|
|
--collisionbox = {-1.0,-0.5,-1.8, 1.0,2.5,1.8},
|
|
collisionbox = {-1.0,-0.5,-1.0, 1.0,2.5,1.0},
|
|
is_locomotive=true,
|
|
drops={"default:steelblock 4"},
|
|
horn_sound = "advtrains_subway_horn",
|
|
custom_on_velocity_change = function(self, velocity, old_velocity, dtime)
|
|
if not velocity or not old_velocity then return end
|
|
if old_velocity == 0 and velocity > 0 then
|
|
minetest.sound_play("advtrains_subway_depart", {object = self.object})
|
|
end
|
|
if velocity < 2 and (old_velocity >= 2 or old_velocity == velocity) and not self.sound_arrive_handle then
|
|
self.sound_arrive_handle = minetest.sound_play("advtrains_subway_arrive", {object = self.object})
|
|
elseif (velocity > old_velocity) and self.sound_arrive_handle then
|
|
minetest.sound_stop(self.sound_arrive_handle)
|
|
self.sound_arrive_handle = nil
|
|
end
|
|
if velocity > 0 and (self.sound_loop_tmr or 0)<=0 then
|
|
self.sound_loop_handle = minetest.sound_play({name="advtrains_subway_loop", gain=0.3}, {object = self.object})
|
|
self.sound_loop_tmr=3
|
|
elseif velocity>0 then
|
|
self.sound_loop_tmr = self.sound_loop_tmr - dtime
|
|
elseif velocity==0 then
|
|
if self.sound_loop_handle then
|
|
minetest.sound_stop(self.sound_loop_handle)
|
|
self.sound_loop_handle = nil
|
|
end
|
|
self.sound_loop_tmr=0
|
|
end
|
|
end,
|
|
custom_on_step = function(self, dtime, data, train)
|
|
--set line number
|
|
local line = nil
|
|
if train.line and self.line_cache ~= train.line then
|
|
self.line_cache=train.line
|
|
local lint = train.line
|
|
if string.sub(train.line, 1, 1) == "S" then
|
|
lint = string.sub(train.line,2)
|
|
end
|
|
if string.len(lint) == 1 then
|
|
if lint=="X" then line="X" end
|
|
line = tonumber(lint)
|
|
elseif string.len(lint) == 2 then
|
|
if tonumber(lint) then
|
|
line = lint
|
|
end
|
|
end
|
|
if line then
|
|
local new_line_tex="advtrains_subway_wagon.png"
|
|
if type(line)=="number" or line == "X" then
|
|
new_line_tex = new_line_tex.."^advtrains_subway_wagon_line"..line..".png"
|
|
else
|
|
local num = tonumber(line)
|
|
local red = math.fmod(line*67+101, 255)
|
|
local green = math.fmod(line*97+109, 255)
|
|
local blue = math.fmod(line*73+127, 255)
|
|
new_line_tex = new_line_tex..string.format("^(advtrains_subway_wagon_line.png^[colorize:#%X%X%X%X%X%X)^(advtrains_subway_wagon_line%s_.png^advtrains_subway_wagon_line_%s.png", math.floor(red/16), math.fmod(red,16), math.floor(green/16), math.fmod(green,16), math.floor(blue/16), math.fmod(blue,16), string.sub(line, 1, 1), string.sub(line, 2, 2))
|
|
if red + green + blue > 512 then
|
|
new_line_tex = new_line_tex .. "^[colorize:#000)"
|
|
else
|
|
new_line_tex = new_line_tex .. ")"
|
|
end
|
|
end
|
|
self.object:set_properties({
|
|
textures={new_line_tex},
|
|
})
|
|
elseif self.line_cache~=nil and line==nil then
|
|
self.object:set_properties({
|
|
textures=self.textures,
|
|
})
|
|
self.line_cache=nil
|
|
end
|
|
end
|
|
end,
|
|
}, S("Subway Passenger Wagon"), "advtrains_subway_wagon_inv.png")
|
|
|
|
--wagons
|
|
minetest.register_craft({
|
|
output = 'advtrains:subway_wagon',
|
|
recipe = {
|
|
{'default:steelblock', 'default:steelblock', 'default:steelblock'},
|
|
{'default:steelblock', 'dye:yellow', 'default:steelblock'},
|
|
{'default:steelblock', 'default:steelblock', 'default:steelblock'},
|
|
},
|
|
})
|