summaryrefslogtreecommitdiff
path: root/advtrains/advtrains_train_subway/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'advtrains/advtrains_train_subway/init.lua')
-rw-r--r--advtrains/advtrains_train_subway/init.lua152
1 files changed, 152 insertions, 0 deletions
diff --git a/advtrains/advtrains_train_subway/init.lua b/advtrains/advtrains_train_subway/init.lua
new file mode 100644
index 0000000..add961b
--- /dev/null
+++ b/advtrains/advtrains_train_subway/init.lua
@@ -0,0 +1,152 @@
+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"},
+ 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'},
+ },
+})