123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- local S
- if minetest.get_modpath("intllib") then
- S = intllib.Getter()
- else
- S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end
- end
- local function jr_set_livery(self, puncher, itemstack,data)
- -- Get color data
- local meta = itemstack:get_meta()
- local color = meta:get_string("paint_color")
- local alpha = tonumber(meta:get_string("alpha"))
- if color and color:find("^#%x%x%x%x%x%x$") then
- data.livery = self.base_texture.."^("..self.base_livery.."^[colorize:"..color..":"..alpha..")" -- livery texture has no own texture....
- self:set_textures(data)
- end
- end
- local function jr_set_textures(self, data)
- if data.livery then
- self.object:set_properties({
- textures={data.livery}
- })
- end
- end
- advtrains.register_wagon("diesel_lokomotive", {
- mesh="advtrains_engine_diesel.b3d",
- textures = {"advtrains_engine_diesel.png"},
- is_locomotive=true,
- drives_on={default=true},
- max_speed=10,
- seats = {
- {
- name = S("Driver Stand (left)"),
- attach_offset = {x=-3, y=2, z=-2},
- view_offset = {x=-4, y=3, z=0},
- group = "dstand",
- },
- {
- name = S("Trainee Seat (right)"),
- attach_offset = {x=3, y=2, z=-2},
- view_offset = {x=4, y=3, z=0},
- group = "tseat",
- },
- },
- seat_groups = {
- dstand = {
- name = "Driver Stand",
- access_to = {"tseat"},
- driving_ctrl_access = true,
- },
- tseat = {
- name = "Trainee Seat",
- access_to = {"dstand"},
- driving_ctrl_access = false,
- },
- },
- assign_to_seat_group = {"dstand", "tseat"},
- visual_size = {x=1, y=1},
- wagon_span = 1.95,
- collisionbox = {-1.0,-0.5,-1.0, 1.0,2.5,1.0},
- base_texture = "advtrains_engine_diesel.png",
- base_livery = "advtrains_engine_diesel_livery.png",
- set_textures = jr_set_textures,
- set_livery = jr_set_livery,
- update_animation=function(self, velocity)
- if self.old_anim_velocity~=advtrains.abs_ceil(velocity) then
- self.object:set_animation({x=1,y=80}, advtrains.abs_ceil(velocity)*15, 0, true)
- self.old_anim_velocity=advtrains.abs_ceil(velocity)
- end
- end,
- custom_on_activate = function(self, staticdata_table, dtime_s)
- minetest.add_particlespawner({
- amount = 10,
- time = 0,
- -- ^ If time is 0 has infinite lifespan and spawns the amount on a per-second base
- minpos = {x=0, y=2.5, z=0.9},
- maxpos = {x=0, y=2.5, z=0.9},
- minvel = {x=-0.2, y=1.8, z=-0.2},
- maxvel = {x=0.2, y=2, z=0.2},
- minacc = {x=0, y=-0.1, z=0},
- maxacc = {x=0, y=-0.3, z=0},
- minexptime = 2,
- maxexptime = 4,
- minsize = 1,
- maxsize = 4,
- -- ^ The particle's properties are random values in between the bounds:
- -- ^ minpos/maxpos, minvel/maxvel (velocity), minacc/maxacc (acceleration),
- -- ^ minsize/maxsize, minexptime/maxexptime (expirationtime)
- collisiondetection = true,
- -- ^ collisiondetection: if true uses collision detection
- vertical = false,
- -- ^ vertical: if true faces player using y axis only
- texture = "smoke_puff.png",
- -- ^ Uses texture (string)
- attached = self.object,
- })
- end,
- drops={"advtrains:diesel_lokomotive"},
- horn_sound = "advtrains_engine_diesel_horn",
- }, S("Diesel Engine"), "advtrains_engine_diesel_inv.png")
- advtrains.register_wagon("wagon_gravel", {
- mesh="advtrains_wagon_gravel.b3d",
- textures = {"advtrains_wagon_gravel.png"},
- drives_on={default=true},
- max_speed=10,
- seats = {},
- visual_size = {x=1, y=1},
- wagon_span=1.55,
- collisionbox = {-1.0,-0.5,-1.0, 1.0,1.5,1.0},
- drops={"advtrains:wagon_gravel"},
- has_inventory = true,
- get_inventory_formspec = function(self, pname, invname)
- return "size[8,11]"..
- "list["..invname..";box;0,0;8,6;]"..
- "list[current_player;main;0,7;8,4;]"..
- "listring[]"
- end,
- inventory_list_sizes = {
- box=8*6,
- },
- }, S("Gravel Wagon"), "advtrains_wagon_gravel_inv.png")
- advtrains.register_wagon("wagon_track", {
- mesh="advtrains_wagon_stick.b3d",
- textures = {"advtrains_wagon_stick.png"},
- drives_on={default=true},
- max_speed=10,
- seats = {},
- visual_size = {x=1, y=1},
- wagon_span=1.55,
- collisionbox = {-1.0,-0.5,-1.0, 1.0,1.5,1.0},
- drops={"advtrains:wagon_track"},
- has_inventory = true,
- get_inventory_formspec = function(self, pname, invname)
- return "size[8,11]"..
- "list["..invname..";box;0,0;8,6;]"..
- "list[current_player;main;0,7;8,4;]"..
- "listring[]"
- end,
- inventory_list_sizes = {
- box=8*6,
- },
- }, S("Track Wagon"), "advtrains_wagon_track_inv.png")
- advtrains.register_wagon("wagon_lava", {
- mesh="advtrains_wagon_lava.b3d",
- textures = {"advtrains_wagon_lava.png"},
- drives_on={default=true},
- max_speed=10,
- seats = {},
- visual_size = {x=1, y=1},
- wagon_span=1.55,
- collisionbox = {-1.0,-0.5,-1.0, 1.0,1.5,1.0},
- drops={"advtrains:wagon_lava"},
- has_inventory = true,
- get_inventory_formspec = function(self, pname, invname)
- return "size[8,11]"..
- "list["..invname..";box;0,0;8,6;]"..
- "list[current_player;main;0,7;8,4;]"..
- "listring[]"
- end,
- inventory_list_sizes = {
- box=8*6,
- },
- }, S("Lava Wagon"), "advtrains_wagon_lava_inv.png")
- advtrains.register_wagon("wagon_tree", {
- mesh="advtrains_wagon_tree.b3d",
- textures = {"advtrains_wagon_tree.png"},
- drives_on={default=true},
- max_speed=10,
- seats = {},
- visual_size = {x=1, y=1},
- wagon_span=1.55,
- collisionbox = {-1.0,-0.5,-1.0, 1.0,1.5,1.0},
- drops={"advtrains:wagon_tree"},
- has_inventory = true,
- get_inventory_formspec = function(self, pname, invname)
- return "size[8,11]"..
- "list["..invname..";box;0,0;8,6;]"..
- "list[current_player;main;0,7;8,4;]"..
- "listring[]"
- end,
- inventory_list_sizes = {
- box=8*6,
- },
- }, S("Tree Wagon"), "advtrains_wagon_tree_inv.png")
|