From 92af0b53e57248b004115ebc50bbd2f2ec630d50 Mon Sep 17 00:00:00 2001 From: gpcf Date: Wed, 31 May 2017 21:32:05 +0200 Subject: [PATCH] Add loading/unloading rails (#63) Pull request by gpcf Will update zip file with next release --- advtrains/advtrains/init.lua | 1 + advtrains/advtrains/loading.lua | 99 ++++++++++++++++++ .../textures/advtrains_dtrack_load_placer.png | Bin 0 -> 1248 bytes .../textures/advtrains_dtrack_shared_load.png | Bin 0 -> 7339 bytes .../advtrains_dtrack_shared_unload.png | Bin 0 -> 7338 bytes .../advtrains_dtrack_unload_placer.png | Bin 0 -> 1260 bytes 6 files changed, 100 insertions(+) create mode 100644 advtrains/advtrains/loading.lua create mode 100644 advtrains/advtrains/textures/advtrains_dtrack_load_placer.png create mode 100644 advtrains/advtrains/textures/advtrains_dtrack_shared_load.png create mode 100644 advtrains/advtrains/textures/advtrains_dtrack_shared_unload.png create mode 100644 advtrains/advtrains/textures/advtrains_dtrack_unload_placer.png diff --git a/advtrains/advtrains/init.lua b/advtrains/advtrains/init.lua index 7793a42..1bb356d 100644 --- a/advtrains/advtrains/init.lua +++ b/advtrains/advtrains/init.lua @@ -142,6 +142,7 @@ dofile(advtrains.modpath.."/signals.lua") dofile(advtrains.modpath.."/misc_nodes.lua") dofile(advtrains.modpath.."/crafting.lua") dofile(advtrains.modpath.."/craft_items.lua") +dofile(advtrains.modpath.."/loading.lua") if digtron then dofile(advtrains.modpath.."/digtron.lua") diff --git a/advtrains/advtrains/loading.lua b/advtrains/advtrains/loading.lua new file mode 100644 index 0000000..8ac7b00 --- /dev/null +++ b/advtrains/advtrains/loading.lua @@ -0,0 +1,99 @@ +-- Tracks for loading and unloading trains +-- Copyright (C) 2017 Gabriel PĂ©rez-Cerezo + +local function get_far_node(pos) + local node = minetest.get_node(pos) + if node.name == "ignore" then + minetest.get_voxel_manip():read_from_map(pos, pos) + node = minetest.get_node(pos) + end + return node +end + +local function train_load(pos, train_id, unload) + local train=advtrains.trains[train_id] + local below = get_far_node({x=pos.x, y=pos.y-1, z=pos.z}) + if not string.match(below.name, "chest") then + atprint("this is not a chest! at "..minetest.pos_to_string(pos)) + return + end + local inv = minetest.get_inventory({type="node", pos={x=pos.x, y=pos.y-1, z=pos.z}}) + if inv and train.velocity < 2 then + for k, v in ipairs(train.trainparts) do + + local i=minetest.get_inventory({type="detached", name="advtrains_wgn_"..v}) + if i then + if not unload then + for _, item in ipairs(inv:get_list("main")) do + if i:get_list("box") and i:room_for_item("box", item) then + i:add_item("box", item) + inv:remove_item("main", item) + end + end + else + for _, item in ipairs(i:get_list("box")) do + if inv:get_list("main") and inv:room_for_item("main", item) then + i:remove_item("box", item) + inv:add_item("main", item) + end + end + end + end + end + end +end + + +advtrains.register_tracks("default", { + nodename_prefix="advtrains:dtrack_unload", + texture_prefix="advtrains_dtrack_unload", + models_prefix="advtrains_dtrack", + models_suffix=".b3d", + shared_texture="advtrains_dtrack_shared_unload.png", + description=attrans("Unloading Track"), + formats={}, + get_additional_definiton = function(def, preset, suffix, rotation) + return { + after_dig_node=function(pos) + advtrains.invalidate_all_paths() + advtrains.ndb.clear(pos) + -- local pts=minetest.pos_to_string(pos) + -- atc.controllers[pts]=nil + end, + -- on_receive_fields = function(pos, formname, fields, player) + -- if minetest.is_protected(pos, player:get_player_name()) then + -- minetest.chat_send_player(player:get_player_name(), attrans("This position is protected!")) + -- return + -- end + -- end, + advtrains = { + on_train_enter = function(pos, train_id) + train_load(pos, train_id, true) + end, + }, + } + end + }, advtrains.trackpresets.t_30deg_straightonly) +advtrains.register_tracks("default", { + nodename_prefix="advtrains:dtrack_load", + texture_prefix="advtrains_dtrack_load", + models_prefix="advtrains_dtrack", + models_suffix=".b3d", + shared_texture="advtrains_dtrack_shared_load.png", + description=attrans("Loading Track"), + formats={}, + get_additional_definiton = function(def, preset, suffix, rotation) + return { + after_dig_node=function(pos) + advtrains.invalidate_all_paths() + advtrains.ndb.clear(pos) + end, + + advtrains = { + on_train_enter = function(pos, train_id) + train_load(pos, train_id, false) + end, + }, + } + end + }, advtrains.trackpresets.t_30deg_straightonly) diff --git a/advtrains/advtrains/textures/advtrains_dtrack_load_placer.png b/advtrains/advtrains/textures/advtrains_dtrack_load_placer.png new file mode 100644 index 0000000000000000000000000000000000000000..427c0117040433c78543d748b7c82646fe897fc3 GIT binary patch literal 1248 zcmV<61Rwi}P)Gs%{UqV-IDNc2$NO zs1&98FekoD!qhS5RP@0yMilDkT1Q+j%D@%8EW%KmKA0}a(ynPs{g>tVkp2JU^3Od@ z)^g5UNH{s4obUOabCM8)!GQJLBv|K-0U3}18IS=PkO3Kx0U3}18IS=PkO3Kx0U3}1 z8IS>2vF&(jJ1sS^q7-lP+N*uEwY3ERFgH6#4|VsDH3>Z5Z=wJ&`r91<05Nuehb@E` zaCvwHOG`^@GotM~)pR-#0U-p$*a2JT$7pSB!9sWe7caUHydA`o&D#(Thu0=>qgH}x z#U8+NTomT_2T@g3g`S>n9O&#Q*;*v|{Cvhok&k0y6rXn-#@AoI3j%^${s1;NHb7gg z1;=st`TP+$zndlZEwFv3nzopAFxE=(;gAl;j=l~eAp$J1jbHr&9LGWa=Kv_Bh+U(l zfaVPB*{z|nhJ#5nhR9S*@J#>!59M&7O9Nl%E(Zg6PEh#iDFqf7iA8T%Ig7UyI0KiK` zEkrS~g-&e}2F?$@98h8~7&1nYhw)Xh?&t}jgU2Bg?bz9_N*Z`B(CHxH^%V{!y)QOW zSp~tqXKJDYF&`JIVj?WI+=q6(5(jj3Yq9tAtkCg=E)4*{7rI*zG@BVcclHcbsa0^h zui}$WPm`n>5!MEOggN}`jp>59#88>LBZ-w6Isz#yE>0tDEuP-yy8=$Du1B>tFMQ0SlecOjXftw_$kr2k3M< z(I^7I#2@oG=?V$`@3U$s$Iav0YlP%|;Vl#@wn1mAib+*BA&TxBa#FM#eXdY%APUv( z=+CJtrrTaT-o>~me)Z#W>42%ABmQThQmJyTirGZ5sNc!t3su**p{dD&<>lqH8+2ST z$});&1p= z0MBjZ=;hz#dEE&~IsbJZw?^$73X0-=2`pw5Qv&t6jqCd7v;P4}Rt6xzYE}IJ0000< KMNUMnLSTZ8NjOgc literal 0 HcmV?d00001 diff --git a/advtrains/advtrains/textures/advtrains_dtrack_shared_load.png b/advtrains/advtrains/textures/advtrains_dtrack_shared_load.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd0d7ab35777500b583c1ba55fb08957efdc868 GIT binary patch literal 7339 zcmZ8`byO5x-2d)U(!H$2QcEqV(jncAf`HO3(ugz*BHgWY2ug!=E?tkLgi=e#lG0MY z^?82p`^S6c+?hG|oVhdid%xdL+=(^b#HuO^dYCKXZ+n1?IrluZ7{Od{ zE!CA30QY~7y!Mi0Ob@=RijfBZKuGzw0Rf+~Aec@(PgPAtycHZqipO~EDEi+30KKTH zg6wneU;Ei3&a5M8Ih_%MbgGFdYVdt{Zoue4@FG;OMXC<(;2ep_?Lyc=>5iUU;z<6U zqa=+z$ATOc-C{d8P1t*`A?MOdP3qrn@K%wpbVWTcg+j&dc+;OcO~2Q@0K%MELs z?~S84`a5qqzE)Lqix4Zl?<)-EjBApkv! z$65wjuI`V_?m061gRU;_Hx)f^;}7ZjUeMp)PzCv@pJ@kSB?gl=>Ifd8xo&b9QD!$* z)ljh5&AGCubg;|ViY-oOduY%(G_Wnr@$ORUhfrkT?g*I8o5L)n7)4ioaC}o-v;Qmn zL`}X3$*jOWadKGW960aIWn$)+#n^KiQRJYK!r>#r9!VeRq!K8^=9UH>sjB^EXE#cP^+c?Ds_21XHaHW{%+d-XV?iZc9uS4Rl#*(*Q5V`z-)Em@RlRD` zk}opzihp}D-``*t5LHn&3D?m=5RuG9^aMg0LZy!655+HLwfMyuvIFUM=og^0_4UPR?-oMwdZXR6 zo>cuPywbFquP5EIX>`O*w6GWC`t$R`P^9y1TS8^kQ%O!XWt~q5Ww6_0vai)}S)kFR zYB^8hm?-IhGFc`QFFb=tLiB27C83Xdl! z`{Wy4&Oo7aRY`mr=wQ&$o;&b&E>vVY2iWx*aGI4%u(Q5Igp=RGGw*V~^ zrdvS7{z#CdRt3CZe^rtq5US^XK&oeS$pa2!qNhs?tNq0UEU!3@phzhOJ2J$c#BYjx z3VvA`Alm7S_w)ja-fWCbpFA^`cdR)}4Hr%Oz-U|hjgC;0^^Yv~?-!rjw%WF_d!8?G zqlt;kHDdl)(m1kIK))Zd182-yM{W++pc1MGn(;HZIAS{_C6?1;$pA{rK2Lfiy4!A6HHL-CKKMfQzRLo=23ci1EAtoq1^4Gpt138>@^Uh&gomA zR1PfTE-Gc{C3t2`aIx`r-wzse(c<>#djagpCs92eDnZ*LduN)KUw*alhP%8M9v3Vv zdAs1;jWMwhOlZoqpg_O8v&Dr~Tje_O~1N^+96UmjxpySYRvSXCpJ8Rah{nKk{j)yI`!uK9`)3uDx%z#x@Ur`0!vaG{0}@Kbu7*Xe z7k*=n931mf!N()pz7_c?msfPe%gdo_Gg0s1{C!s*96*Z8?_Ν@NqXE3etdZedtd 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 MsHIRTXCCtZ0MNeg!2kdN literal 0 HcmV?d00001 diff --git a/advtrains/advtrains/textures/advtrains_dtrack_shared_unload.png b/advtrains/advtrains/textures/advtrains_dtrack_shared_unload.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fc5bdfa549ef9a94b0bd9c52b31762c70c0973 GIT binary patch literal 7338 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 O0+i&`WhX9#0pCQ literal 0 HcmV?d00001 diff --git a/advtrains/advtrains/textures/advtrains_dtrack_unload_placer.png b/advtrains/advtrains/textures/advtrains_dtrack_unload_placer.png new file mode 100644 index 0000000000000000000000000000000000000000..486861ead86e2d1e8b6bc2f5ef8f7f242f282774 GIT binary patch literal 1260 zcmV7u3}jUpm?e(HkJZGeDHkoa9WV;myv=&Nz_;|{?c47% z$T_zqFV8Q}|2*eC6r$B?v5}Vq8+7T<6adD4xeEXwx_0oeMeic6 z4Ub@Xd3k+C^uX>yI_(L75CWoWhq>bum`sgW^e*D^;{pLAS`lS8ov&X;~@Y21Sq8l-J`jH z=A{}%ouLtL8CE;yKmZN|008CxC*NlV(r@M;N3#tT?O-BN zj9d-`ps}siD|=c?0HAYUF^z=gqN6c^p-~*W+awBeAb@g6;I~E3j_%&tu)=c<742Z? z0nMLd4Gs0^+VnC2VAJy?7{$mnaD7j(aK8ApfD)}%8#jtPjGu}pb;nmXajo!!+j^>^ z3Qq<)?E&o0^r7TPYc-YS5wty}St&$+DmWD*VWH!`b#8AMu)DVwAHQ*Xwfi5{005k` z_tJtU($W6&=cuAk0ju=~oc;7O64gQe;c}S-(ubNLlgXghKPCuk?|6yuKc8sf*@E_; zKSzs-i&j1xy8*Ro3*I|%lEmDD@4oXk9UmV@%l_uL2lT&vPTDJ^0L=jUT)#s#z4h&vuPj&vO(2~E+^=mz&_mZ8R@6DWryc=P~3|KPWxFpI?u0)n4z zP2v3yJ|s!Ms$~kwPevi=+0Xw7Lpcz@(BRdCVLPN>2@a#A-bJ(0(U2(eK)z$6qgE6Y z6hQgF=9n;>wNG#uNhJhl24+c0w~0(bo69DHFAPFayfHBeqj68nC`JvVQW^f9@q_aR zFmm&+)UHeMph8g;g4*2_N9!i>rQ%A=saUbCGAfE<$IHCe2Yr