From 64fa36e796393d252aefcc6c70a94fe3ffcfbe52 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Mon, 4 Aug 2014 19:06:02 +0200 Subject: [PATCH] Using carts:cart, add copper/brk/pwr rails --- depends.txt | 3 +- init.lua | 66 ++++++++------ rails.lua | 117 +++++++++++++++++++++++++ textures/carts_rail_brk.png | Bin 0 -> 524 bytes textures/carts_rail_cp.png | Bin 0 -> 521 bytes textures/carts_rail_crossing_brk.png | Bin 0 -> 498 bytes textures/carts_rail_crossing_cp.png | Bin 0 -> 496 bytes textures/carts_rail_crossing_pwr.png | Bin 0 -> 604 bytes textures/carts_rail_curved_brk.png | Bin 0 -> 555 bytes textures/carts_rail_curved_cp.png | Bin 0 -> 487 bytes textures/carts_rail_curved_pwr.png | Bin 0 -> 577 bytes textures/carts_rail_pwr.png | Bin 0 -> 533 bytes textures/carts_rail_t_junction_brk.png | Bin 0 -> 548 bytes textures/carts_rail_t_junction_cp.png | Bin 0 -> 506 bytes textures/carts_rail_t_junction_pwr.png | Bin 0 -> 584 bytes 15 files changed, 157 insertions(+), 29 deletions(-) create mode 100644 textures/carts_rail_brk.png create mode 100644 textures/carts_rail_cp.png create mode 100644 textures/carts_rail_crossing_brk.png create mode 100644 textures/carts_rail_crossing_cp.png create mode 100644 textures/carts_rail_crossing_pwr.png create mode 100644 textures/carts_rail_curved_brk.png create mode 100644 textures/carts_rail_curved_cp.png create mode 100644 textures/carts_rail_curved_pwr.png create mode 100644 textures/carts_rail_pwr.png create mode 100644 textures/carts_rail_t_junction_brk.png create mode 100644 textures/carts_rail_t_junction_cp.png create mode 100644 textures/carts_rail_t_junction_pwr.png diff --git a/depends.txt b/depends.txt index 331d858..20aa884 100644 --- a/depends.txt +++ b/depends.txt @@ -1 +1,2 @@ -default \ No newline at end of file +default +mesecons? \ No newline at end of file diff --git a/init.lua b/init.lua index e155b10..ad478f2 100644 --- a/init.lua +++ b/init.lua @@ -1,12 +1,10 @@ --- TODO: --- Fix way-up +-- TODO: -- Add rail-cross switching -- Prevent from floating carts --- Speed up and brake rails boost_cart = {} boost_cart.modpath = minetest.get_modpath("boost_cart") -boost_cart.speed_max = 20 +boost_cart.speed_max = 10 function vector.floor(v) return { @@ -65,16 +63,16 @@ function boost_cart.cart:on_punch(puncher, time_from_last_punch, tool_capabiliti end end self.object:remove() - puncher:get_inventory():add_item("main", "boost_cart:cart") + puncher:get_inventory():add_item("main", "carts:cart") return end local vel = self.velocity - --[[if puncher:get_player_name() == self.driver then + if puncher:get_player_name() == self.driver then if math.abs(vel.x) + math.abs(vel.z) > 6 then return end - end]] + end local cart_dir = boost_cart:velocity_to_dir(direction) if cart_dir.x == 0 and cart_dir.z == 0 then @@ -120,29 +118,24 @@ function boost_cart.cart:on_step(dtime) if vector.equals(flo_pos, flo_old) then return end - local expected_pos = vector.add(self.old_pos, self.old_dir) - local diff = vector.subtract(expected_pos, pos) - diff = { - x = math.abs(diff.x), - y = math.abs(diff.y), - z = math.abs(diff.z) - } + local diff = vector.subtract(self.old_pos, pos) - if diff.x > math.abs(self.old_dir.x) or - diff.y > math.abs(self.old_dir.y) or - diff.z > math.abs(self.old_dir.z) then - pos = vector.new(expected_pos) - --minetest.log("action", "Cart moving too fast at "..minetest.pos_to_string(pos)) - self.punch = true + for _,v in ipairs({"x","y","z"}) do + if math.abs(diff[v]) > 1.4 then + pos = vector.add(self.old_pos, self.old_dir) + self.punch = true + --minetest.log("action", "Cart moving too fast at "..minetest.pos_to_string(pos)) + break + end end end - local ro_vel = vector.round(vel) local cart_dir = { x = boost_cart:get_sign(ro_vel.x), y = boost_cart:get_sign(ro_vel.y), z = boost_cart:get_sign(ro_vel.z) } + local max_vel = boost_cart.speed_max local dir = boost_cart:get_rail_direction(pos, cart_dir) if vector.equals(dir, {x=0, y=0, z=0}) then vel = {x=0, y=0, z=0} @@ -170,7 +163,24 @@ function boost_cart.cart:on_step(dtime) end -- Slow down or speed up.. - local acc = (dir.y * -2) - 0.4 + local acc = dir.y * -2 + + local speed_mod = tonumber(minetest.get_meta(pos):get_string("cart_acceleration")) + if speed_mod and speed_mod ~= 0 then + if speed_mod > 0 then + local is_limit = false + for _,v in ipairs({"x","y","z"}) do + if math.abs(vel[v]) >= max_vel then + speed_mod = 0 + break + end + end + end + acc = acc + (speed_mod * 6) + else + acc = acc - 0.4 + end + local new_acc = { x = dir.x * acc, y = dir.y * acc, @@ -185,8 +195,8 @@ function boost_cart.cart:on_step(dtime) -- Limits for _,v in ipairs({"x","y","z"}) do - if math.abs(vel[v]) > boost_cart.speed_max then - vel[v] = boost_cart:get_sign(vel[v]) * boost_cart.speed_max + if math.abs(vel[v]) > max_vel then + vel[v] = boost_cart:get_sign(vel[v]) * max_vel self.punch = true end end @@ -215,8 +225,8 @@ function boost_cart.cart:on_step(dtime) self.punch = false end -minetest.register_entity("boost_cart:cart", boost_cart.cart) -minetest.register_craftitem("boost_cart:cart", { +minetest.register_entity(":carts:cart", boost_cart.cart) +minetest.register_craftitem(":carts:cart", { description = "Cart", inventory_image = minetest.inventorycube("cart_top.png", "cart_side.png", "cart_side.png"), wield_image = "cart_side.png", @@ -225,9 +235,9 @@ minetest.register_craftitem("boost_cart:cart", { return end if boost_cart:is_rail(pointed_thing.under) then - minetest.add_entity(pointed_thing.under, "boost_cart:cart") + minetest.add_entity(pointed_thing.under, "carts:cart") elseif boost_cart:is_rail(pointed_thing.above) then - minetest.add_entity(pointed_thing.above, "boost_cart:cart") + minetest.add_entity(pointed_thing.above, "carts:cart") else return end itemstack:take_item() diff --git a/rails.lua b/rails.lua index 0cdac7a..20a8cea 100644 --- a/rails.lua +++ b/rails.lua @@ -13,4 +13,121 @@ minetest.register_node(":default:rail", { fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, }, groups = {dig_immediate = 2, attached_node = 1, rail = 1, connect_to_raillike = 1}, +}) + +-- Copper rail +minetest.register_node(":carts:copperrail", { + description = "Copper rail", + drawtype = "raillike", + tiles = {"carts_rail_cp.png", "carts_rail_curved_cp.png", "carts_rail_t_junction_cp.png", "carts_rail_crossing_cp.png"}, + inventory_image = "carts_rail_cp.png", + wield_image = "carts_rail_cp.png", + paramtype = "light", + is_ground_content = true, + walkable = false, + selection_box = { + type = "fixed", + -- but how to specify the dimensions for curved and sideways rails? + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + groups = {dig_immediate = 2, attached_node = 1, rail = 1, connect_to_raillike = 1}, +}) + +minetest.register_craft({ + output = "carts:copperrail 12", + recipe = { + {"default:copper_ingot", "group:stick", "default:copper_ingot"}, + {"default:copper_ingot", "group:stick", "default:copper_ingot"}, + {"default:copper_ingot", "group:stick", "default:copper_ingot"}, + } +}) + +-- Speed up + +minetest.register_node(":carts:powerrail", { + description = "Powered rail", + drawtype = "raillike", + tiles = {"carts_rail_pwr.png", "carts_rail_curved_pwr.png", "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png"}, + inventory_image = "carts_rail_pwr.png", + wield_image = "carts_rail_pwr.png", + paramtype = "light", + is_ground_content = true, + walkable = false, + selection_box = { + type = "fixed", + -- but how to specify the dimensions for curved and sideways rails? + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + groups = {dig_immediate = 2, attached_node = 1, rail = 1, connect_to_raillike = 1}, + + after_place_node = function(pos, placer, itemstack) + if not mesecon then + minetest.get_meta(pos):set_string("cart_acceleration", "0.5") + end + end, + + mesecons = { + effector = { + action_on = function(pos, node) + minetest.get_meta(pos):set_string("cart_acceleration", "0.5") + end, + + action_off = function(pos, node) + minetest.get_meta(pos):set_string("cart_acceleration", "0") + end, + }, + }, +}) + +minetest.register_craft({ + output = "carts:powerrail 6", + recipe = { + {"default:steel_ingot", "default:mese_crystal_fragment", "default:steel_ingot"}, + {"default:steel_ingot", "group:stick", "default:steel_ingot"}, + {"default:steel_ingot", "default:mese_crystal_fragment", "default:steel_ingot"}, + } +}) + +minetest.register_node(":carts:brakerail", { + description = "Brake rail", + drawtype = "raillike", + tiles = {"carts_rail_brk.png", "carts_rail_curved_brk.png", "carts_rail_t_junction_brk.png", "carts_rail_crossing_brk.png"}, + inventory_image = "carts_rail_brk.png", + wield_image = "carts_rail_brk.png", + paramtype = "light", + is_ground_content = true, + walkable = false, + selection_box = { + type = "fixed", + -- but how to specify the dimensions for curved and sideways rails? + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + groups = {dig_immediate = 2, attached_node = 1, rail = 1, connect_to_raillike = 1}, + + after_place_node = function(pos, placer, itemstack) + if not mesecon then + minetest.get_meta(pos):set_string("cart_acceleration", "-0.2") + end + end, + + mesecons = { + effector = { + action_on = function(pos, node) + minetest.get_meta(pos):set_string("cart_acceleration", "-0.2") + end, + + action_off = function(pos, node) + minetest.get_meta(pos):set_string("cart_acceleration", "0") + end, + }, + }, +}) + +minetest.register_craft({ + output = "carts:brakerail 6", + recipe = { + {"default:steel_ingot", "default:coal_lump", "default:steel_ingot"}, + {"default:steel_ingot", "group:stick", "default:steel_ingot"}, + {"default:steel_ingot", "default:coal_lump", "default:steel_ingot"}, + } }) \ No newline at end of file diff --git a/textures/carts_rail_brk.png b/textures/carts_rail_brk.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e0ff9827359b670d25f3add9c2fb6f109397d7 GIT binary patch literal 524 zcmV+n0`vWeP)A|3PFX6z$qY3;%^^=|YhroLw7R)FvdsLRv)Y z7KVc0Drw_n3XUK~Op*A?(Gi{3yf<_2J1u7BQHwU!!Vk{oaQS`beB1+VEiEqy(5XL3 z0BOGkzyK^hyq-0lj9w%k80j{eRKWK&wYtSR;qW-2FjoTL#l0c9{ivu6!2C*?k>M5~ z+&^OfxXHPE7g|Hp3N8h$;cVVyqpWRz`+c^*T|x7YG5{|puVlp8i9xJQrSC$3rxal| zp(ilJ4M$jwx&M3~y2E6^SOLtCFPg2h0G;7rpqS&F7B8pw+yt?(DZs8|swAN2_g-~Sx O0000H;LN@>a0dh%1K~y+T&6CSZ0#Ovk{WBuR z8FO2q`Aluo%CLu-WeeS9go=)D9qpkMO0+3LDJ!BfDq0j2_2+$^J2+R`w6TR3hBJ5O z%*Xt`^Ie^;zmB(kNCv&2rTgn*J*-#zPOaaqIrSlXd6qQex?n@E;=p~`f#*G!y1&R; z(cGF;dsy#n(LNAKEDBse2}_7AjH4KmP~MP`3yP2fBC=HLQ4<$Ptr&j)#ZU+gV<>?K z#laCSb5^v|7Q7$2@p0tARo;e|T^H_3cIuhp2%k;Q0O24q!37E-5plnO{F;OU`A{Jr zva2GJO9Ilwt(jPlm`2Hi$EuSfbmSSDu?^=b3%YqLzFJ;%WD8}%iqnLdBiv9nc$hK) z0~e6#p7AG$IkhaHL9C^9$^-e3VP5ou6!+^#$%8JES_pE z^^CO17Y%{!xd)6<6JV^>O`|&d8dW81ROipmL(He=0@3-g|MB1l3<~OGaFyn{00000 LNkvXXu0mjfcHi3W literal 0 HcmV?d00001 diff --git a/textures/carts_rail_crossing_brk.png b/textures/carts_rail_crossing_brk.png new file mode 100644 index 0000000000000000000000000000000000000000..3ace508bb5f94d0200a43e87cacb9969f7b9b58f GIT binary patch literal 498 zcmV@;nyt(Z)u?^2qll$Z4`y5o zpsfYHsxaMOO?`CQQ>V1JfbG3AC9oTgf9%C*W3ba96J1UW|xH#kC<`)9VFctioZnJ)JDJ0 oE|c8`8{6%&K3;2TBme!*FVUvIJ(yG}sQ>@~07*qoM6N<$g3ce>{{R30 literal 0 HcmV?d00001 diff --git a/textures/carts_rail_crossing_cp.png b/textures/carts_rail_crossing_cp.png new file mode 100644 index 0000000000000000000000000000000000000000..6b55059b6eda77004d449679e05212b4ad0f9cbe GIT binary patch literal 496 zcmVH;LN@>a0a-~zK~y+TrBiKA!axx1DYPG4 zfv7-{!~+;Zv_KTSfJ%ZGS}7E1@VCJqni!SfM+B5;yyG~tvfG6gL((RbZg*y1-+MEw zDAVWqcpIw4Ex?Cwh2E5-8mbK?Wq?*mhtEq>6xH%7erFkY2!Iaq;7NIJem!5q5aWbG zv?yc=m7NuMzDP656n@!&k!Q|G;5p{S#LqGr#N^?813pmicXtzB-88(p8Ti8WWBqTR zOBi~Yz{u`lLI5-hIyeQ5ndn$LoaI-++c%I=3hX^i0Jv!MOebUsJ_7bmlA^$|R2U$@ z(rv8os_=r;`5%bkll>3CxE**vItOSVX&<*u=v9(%Ut5RU>KY5~LElM99vlT8bPf!l zAlI8E4Laon^WY8-H;TFdXmSst+DOU%lrrUQOM~~;f;Pq(B09?kDAp)P-9{I+-<(Qq m#JTvn$}QiV)PQZ_NrG2*~yF;3E;rK2|c87h1jcPT3H*eFlom-!(jo&bU zemyaOipC-}NB*Z0K}3*h56&LjDUUC;NCmrga*qsL4N0{J6)d0>>iPAs7QBD4nWN47 z*t*5wNmmO`yIN^Fu$QGmiDZw*8;G}}6e80 z;@xCU^FC#5FNNDfmZ|`WS2mmLgXDh{Fh^~5@AaHoExHI`jyhT(k+N0I7?+ky?ATVX z-whiL+_Jxi2Ebt4%Q)E+=HPyp05BL2iL+Q>Q(ch4s>|K;hjinE&co7SzF+eo``z;( zGnHq0W)>r;`1r-*=fWbEGmio+dtURtPS37+AcEX_W@(`JMV_K7EU&oq4LkG>S*#Sx zY;V{=BISM5H*6z<{P!ZM>Q#R9u%FXsPW`o^CZ~E6FSj?!osK3g+*I0000L?ZwI0k}y- zK~y-)y_3yLRACgxfA7qAofrnn$RuGVFsyK)XpxI{)-2o&qED zwGSZ(+PEE|Ah^PX`v*uE^dG1QDvV_2ooViToEAE_8NG&XI=lBhoagyH91i@?dU5BH z%#K}=>c7Bo1lBigx^7Ql#&AW{QHM>-5P(=u@A0rr%aFZc0Yr~SoxtsEtB9D@J=002ovPDHLkV1mGX^ArF8 literal 0 HcmV?d00001 diff --git a/textures/carts_rail_curved_cp.png b/textures/carts_rail_curved_cp.png new file mode 100644 index 0000000000000000000000000000000000000000..7364d220b6fee8a6df813eb0ec3d73bd8a56c8df GIT binary patch literal 487 zcmVH;LN@>a0Z>UqK~y+TV_={sXiw7kzo^{g zKiPKX`^*0COm#=WL>mUvm>p>S9~l!g09|8IpxpmSIR^iMfB}TDg6c?>|4S-N!A^zQ z2Gfx3BlCYrr5Sz$N`vL#nqeAYbZw;K{|VXp_yZDVb4!By|21_M7>b)?mH*EwGQw^M zOf$&Ff&jVyz3H0&C!*O{5Fq=1YQ6zs13&>(5-k6}IbQw$+!ABBh9aQB=!Sv=6WMm; z5UvQ7|6doQ`hP|t!r7qM=*`rF7+M#j_P-@j8zbP5qo_DY9_*b(z}Nv9p5rTvFt98{ z9Wg@LkQm*O=5ISfD<3FJDM d?Q@{90sy}*9=y5t-Q@rP002ovPDHLkV1m$%%~t>b literal 0 HcmV?d00001 diff --git a/textures/carts_rail_curved_pwr.png b/textures/carts_rail_curved_pwr.png new file mode 100644 index 0000000000000000000000000000000000000000..e2ac67a3560029716fc2586a184f20c9422916a7 GIT binary patch literal 577 zcmV-H0>1r;P){cJFrfwb*kYg^gO|Dd%~ghk1X@KwES3Rq5+5 zi3q|UB!cwymt=0f>SheU%kc~D;Ni_~rbmqAjV2ZFea&toA+f^v_1Kloj-HXL_ZO7` zc>cP^mEOzBx`F$W8VsA;)(BXYqPchAe^u{Rlmk6-F^wv7*;>x7MzPhUNh0;3^r3C$$M z(+UdN+~RVupBOwH>vfHfZl7XyRLgE;$@!WSM+?+~5Whn+F<@PAX5_S7d+;`6u&}(& zrHh%dTB~C`O`~b?6s!k6VQfhfAqB{_8LaFp29=>6*ZAztIi8fQ#4XE@ohDtKMG`A~ z+m4tTR4zC%&@Hzn-~WCG-|1=_uimYZ&uJQQ%7L6_X={ftvM8kpBMXO50xx XbKL87*YKfV00000NkvXXu0mjf*Ussa literal 0 HcmV?d00001 diff --git a/textures/carts_rail_t_junction_brk.png b/textures/carts_rail_t_junction_brk.png new file mode 100644 index 0000000000000000000000000000000000000000..0c2c1cbd8f35c0b567b5bc56a78b0ea342cc1e0f GIT binary patch literal 548 zcmV+<0^9wGP)-+gS+E;*InpD5XiibfZ>d<$*3z>P zFfwpmZe6`hd*7>n29HPqKCG$DEswqZfcY2qFv6L zAI22USqzMQQQ4H*jk-BVZH;LN@>a0b@x-K~y+Tm6O>@!$1^<`yOVg zq84woHI^290C6|g3dMrnNY%Ecv5OHk3VP#(hznY9DT1J2-|=@&aK;H~NgNmkX3l)` zpELi7#eT=t_6*AAG}z!I15?A<#tf#){=^&^*HPm4W-!u0iXwcO2Sg$7f69TMJoLO zy)M!o)x%dW8E{+}#)p#@Y4PIrEh5Q~0nMByF3T@P25{KrRsvl&E2PJ zT>!f0S-c;n(PNECEh7(``J!58b1PIC&>D{>JzB-F}P2HBZYu+RG8 w+s)v)ZU_aosrnU$^@6pmLQdg@{R*l20VfE4`74;3oB#j-07*qoM6N<$g48U|TL1t6 literal 0 HcmV?d00001 diff --git a/textures/carts_rail_t_junction_pwr.png b/textures/carts_rail_t_junction_pwr.png new file mode 100644 index 0000000000000000000000000000000000000000..7f97fc79e72595e69e7d301133c9382593332304 GIT binary patch literal 584 zcmV-O0=NB%P)EN=2>l7d@lg}PV?A}E!DLkCM0 zMcTwDxL8_J1tCJD4sPNgh?CoE4gR4;Tbh3_eK`&_m!`hde%rn0e&7AhJ>P}D$j{}p zC+?^!N(-o>J#k0#b2)Ry26%p}+iXk@o#06_q{XU_0Cff15^8I8Ca#8z*!bXa9eVUh zY=Czk3tT+6UijiJvAe@&Y1v~}yG^<3(-F3)cy&ruANCvq;FvQ?-a%z!3+Ysb>8UIt z$Y%Qu+v!xMY2W5Q2qN|m^btLOp|!xx-Xq#|U@x7~5ks7w$^sBeH~_|Fpn&IjhTI^E zAVCuf1qnn4CrGC3DV98nrE*iORnZVYrBXG8cvpdE zH%{~Pdb8!RSyu`_i)I~5IK&bT|0Hq0_ko>Zi(jiX&PMi8uKI*`SoGd`FRExG2mJ$m z!9g0Eoj3gpXw8Q;Lw^16GUG26WXmW&c=gpd6hW