From 496ecdae2717c3c337b770db49415668ab8f27fb Mon Sep 17 00:00:00 2001 From: cheapie Date: Wed, 18 Jan 2017 14:42:19 -0600 Subject: [PATCH] Add camera Essentially a "remote player detector", recommended uses include traffic light vehicle detection and security cameras --- README | 7 +- init.lua | 99 +++++++++++++++++++++++++++ textures/digistuff_camera_back.png | Bin 0 -> 1881 bytes textures/digistuff_camera_bottom.png | Bin 0 -> 303 bytes textures/digistuff_camera_front.png | Bin 0 -> 1784 bytes textures/digistuff_camera_left.png | Bin 0 -> 1754 bytes textures/digistuff_camera_pole.png | Bin 0 -> 3213 bytes textures/digistuff_camera_right.png | Bin 0 -> 1831 bytes textures/digistuff_camera_top.png | Bin 0 -> 239 bytes 9 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 textures/digistuff_camera_back.png create mode 100644 textures/digistuff_camera_bottom.png create mode 100644 textures/digistuff_camera_front.png create mode 100644 textures/digistuff_camera_left.png create mode 100644 textures/digistuff_camera_pole.png create mode 100644 textures/digistuff_camera_right.png create mode 100644 textures/digistuff_camera_top.png diff --git a/README b/README index 5743f20..8247ce7 100644 --- a/README +++ b/README @@ -10,7 +10,7 @@ Textures WITH "adwaita" in the file name - These are icons by the GNOME Project, Depends: Required: digilines (base only) and mesecons (base only) -Only needed for craft recipes: default and mesecons_luacontroller +Only needed for craft recipes: default, mesecons_luacontroller, homedecor How to use digilines buttons: @@ -34,3 +34,8 @@ Once a channel is set, any messages sent on that channel will be shown on the "L How to use the NIC: Send a digilines signal with the URL you want to download. The HTTPRequestResult table will be sent back on the same channel. + + +How to use the camera: +Set the channel, distance, and radius. The camera will search for a node "distance" meters away and up to 10m down. +Every second while a player is within "radius" meters of that point, a table listing the players in range will be sent via digilines on the chosen channel. diff --git a/init.lua b/init.lua index 332d92d..bcb7ce7 100644 --- a/init.lua +++ b/init.lua @@ -829,3 +829,102 @@ if http then } }) end + +minetest.register_node("digistuff:camera", { + tiles = { + "digistuff_camera_top.png", + "digistuff_camera_bottom.png", + "digistuff_camera_right.png", + "digistuff_camera_left.png", + "digistuff_camera_back.png", + "digistuff_camera_front.png", + }, + digiline = + { + receptor = {} + }, + groups = {cracky=2}, + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.1,-0.5,-0.28,0.1,-0.3,0.3}, --Camera Body + {-0.045,-0.42,-0.34,0.045,-0.36,-0.28}, -- Lens + {-0.05,-0.9,-0.05,0.05,-0.5,0.05}, --Pole + } + }, + selection_box = { + type = "fixed", + fixed = { + {-0.1,-0.5,-0.34,0.1,-0.3,0.3}, --Camera Body + } + }, + description = "Digilines Camera", + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","size[8,6;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;6,2;radius;Radius (max 10);${radius}]field[1,3;6,2;distance;Distance (max 20);${distance}]button_exit[2.25,4;3,1;submit;Save]") + end, + on_receive_fields = function(pos, formname, fields, sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then meta:set_string("channel",fields.channel) end + if fields.distance and tonumber(fields.distance) then meta:set_int("distance",math.max(math.min(20,fields.distance),0)) end + if fields.radius and tonumber(fields.radius) then meta:set_int("radius",math.max(math.min(10,fields.radius),1)) end + end, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_abm({ + nodenames = {"digistuff:camera"}, + interval = 1.0, + chance = 1, + action = function(pos,node) + local meta = minetest.get_meta(pos) + local channel = meta:get_string("channel") + local radius = meta:get_int("radius") + local distance = meta:get_int("distance") + local dir = vector.multiply(minetest.facedir_to_dir(node.param2),-1) + local spot = vector.add(pos,vector.multiply(dir,distance)) + local i = 0 + while i <= 10 and minetest.get_node(spot).name == "air" do + --Downward search for ground level + spot = vector.add(spot,vector.new(0,-1,0)) + i = i + 1 + end + if minetest.get_node(spot).name == "air" or minetest.get_node(spot).name == "ignore" then + --Ground not in range + return + end + + local found_any = false + local players_found = {} + local objs = minetest.get_objects_inside_radius(spot,radius) + if objs then + local _,obj + for _,obj in ipairs(objs) do + if obj:is_player() then + table.insert(players_found,obj:get_player_name()) + found_any = true + end + end + if found_any then + digiline:receptor_send({x=pos.x,y=pos.y-1,z=pos.z}, digiline.rules.default, channel, players_found) + end + end + end +}) + +minetest.register_craft({ + output = "digistuff:camera", + recipe = { + {"homedecor:plastic_sheeting","homedecor:plastic_sheeting","homedecor:plastic_sheeting"}, + {"default:glass","homedecor:ic","mesecons_luacontroller:luacontroller0000"}, + {"homedecor:plastic_sheeting","homedecor:plastic_sheeting","homedecor:plastic_sheeting"}, + } +}) diff --git a/textures/digistuff_camera_back.png b/textures/digistuff_camera_back.png new file mode 100644 index 0000000000000000000000000000000000000000..61653a7e13286a2da7bdbd65a0e93ebe2820ef03 GIT binary patch literal 1881 zcmV-f2d4OmP)00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-&l5)>B&xO%Ua0000TX;fHrLvL+uWo~o;00000Lvm$d zbY)~9cWHEJAV*0}P-HG;2LJ#D&q+idBK}3nG78=BP*-9(m`0Rc7T2ZbWeBJdzGKa$jIWazy6zCYb`FW{DA0B@4ih5eT=GwYL0wnlh`vo8* z2qJS$T>>e93$!isfpzD(EdbhEL3w9B3z{ocOAylg_a7b}9sqFL-m9Su1wny+irRp( zbb9X4F`dyG0oQ4@+HSUY(iycgkfOa1AVsD*&d|&?BLdWsAKL@4e9!GTVFCzie>Rrt zY5pKU8j0zY-@bkO%g?`rA}y-S5h96%L2Zyg1tEz%Af4+w4h|PZEErj` zkF`b)jos#%5zg%J*sdxpA`}2Zp(iP-lCpGYilinmM3-|URUjhb@$nJBISJE@O=NP5AW)KbQPUhpx1YpKtkywLMOY6EN6@?JFW~Dj6d7GMY&R5+SFZWP}QCD(DG=p03GCtn!txC^K#O z2R8wGo3&QInrsNAX`_=QuBtgOjU4dz4Qa0;Xk#QeKdNmN2Xe_PAxNh{ERx8V=9R=L z4`SG#BGdq$wen>}J1seFO=xHE3OdtkJBT5GmDu7GCQb(>VFDkGv{y4}14m=tFn%%NB!Q~v%@K5B35?6uStW^Lrv;;6}*RIx$ z(3=-88fsv0df7JgNY)711yMC|lZUIy)%+up38~quj-JJ)t-=K}zHL$hoE<&WdBMMx zlouAws~bMIqEHfVLTqXqRjFL^_C`NUK~TO6ryI5+1Vq8aZPuu&zF<-`#%iIRh*9b) zdf7VCRV0J>%^mU)YEoHYv9lteCuf<@mWc(N)qVyo~7L;*t3fq^Ow?#TLK z#ApuK39-~rK-tJJIX*Yx?(oHD!;d0$Q`^*cqYWiHIVEWQ*n+3CJzAHhX2eksv_lew za6gW#kzNq0cHr1l@9xODC2{lIi7-__v7!ErQdch=iP(Y@B_A9ac`4n#!N^PnFC6e% zB3JS6Rv_JXBf8RTrTbWQCpVxj0A-s|gC$u14}#BfU}J`|8`dj2n@53D#Fe<>Ccnyo z6=riglt8Y?0)c}Mjb0g3J!8naFZGNXf5%X^)gh^G)TOye#~29V>c&-lAd8sx$znmy zqw@POS8`K_hSt`c8`;}}eu6>CQ-RX*&Pz7>H#KqdbzD@@z#`lSk{TCi2vybIPO-i5 zAv|#ye{{gfC%9>Av)vWzR}VKAKr>2Z_vO)6W}2*oA$(P0w_-(hp4EA?0A*_%j@q|D zYCYk$dCVAWMN-mnOSa_g-Qso(uC{?&=c|RZWYX5qy1QE?I=pis+;P|z?9pTwTUAGH z)V$QiqB*6UTsQRwu7iZw=_Z7bxGRI3*;t=^ zP@Qly;Wg0GqM8IkD#4$bFFV3KS>HMtQ)x%RAacJ3pn7QXtT9K5Qq)zE@;rlpc%CLW zek5xmEA7^_t>k;{k-`j$6BzsGBS&^^31iq8wQ(~C)Ik_E224w(9&+T7_$1XTaY?C0 ztNM!nsEE>HvwF3s)INBt*?jY%EqCv-hNNfM-M~t8yR5eZ!yNmSulE4F&v81I z+?8qNHyE=I;SM@DPB5am739~iU-6u;g=c=<9k@Gici`^8-GRFUcL(kc+#R?(aChMD zz}{Q%FS0hk T>iGK#00000NkvXXu0mjf0|;<5 literal 0 HcmV?d00001 diff --git a/textures/digistuff_camera_bottom.png b/textures/digistuff_camera_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..72bce61952dd3f3c982a66ff826ab1fa45bb123a GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$&H|6fVg?3oVGw3ym^DWND9B#o z>Fdh=kWolPSS(_NwhvH9HZvrm#5q4VH#M&W$Yo$~E=o--Nlj5G&n(GMaQE~LNYP7W z2Z}HCba4#HxcBzvM&82;0<0H`r#Nav_Gn799@UUkbzLHo8FM7zW@UJg!n}8{9g<$} zJwEldptwHB#D@QDHtKI@7ypZzS@N`7;6VS@%3hF5Vc?EvfY(JvFt4GQVe|TjqOuul zJ1=-Pu>S1ytWTN0`24x^A_pXtm9o}qswS80@B5!rRj#0Pt>nQEj00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-&l5)>f~KfSim0000TX;fHrLvL+uWo~o;00000Lvm$d zbY)~9cWHEJAV*0}P-HG;2LJ#DZb?KzRA}DqSWB)XM-C&yd6-`KO!lG17qHJXi@wYg zXCYBiRD0VPG?4XxSD%cG)Q6&|;9r0Jhdk#T9-jO_^6>Dt{0)b{9g?$z`vx8!@|;|A ztviQ@5TuAu{Y6Nh|MOjnuaF|@%KTF(^yNjpSxEXi5D5Sv^1VOHpCJ)|KmmfUQ2<2b zebTx`-b#5fSM(>)UwwxJNbqL!4vo%dq_(B7(SE6Io1;QTQsen1)mYIW%JvncN}>wWb))G{+S=N(7>Q zQ6fVj>9OaE#Jv{* zJe!qR)(ZUXi;YYmQbG{+21m08hh4oo8#3HgS!R}r)^g??otsLK~}$tNL5 zr$8){$bZc%iBn$0FyF#tKQ(a?{rc1}pWl;s7P5ZRwG$5wZ)SYT_dgPnE0rM$Hog;V$l%W+D26>kNkL}AEqEE--X)^TM+`HVB$7wR8?OvDH>z7 z&`yL#G`g#ej&v0ZccUs+B?5q+U5jPjp&Vze!Zjt4hoNB6_X?h@3XRw*JOWXG5OiUn zN`n(wZ$_-1w`ec^h1uK=C6Ft!B{277P=lK>)iZ{y`&7~bQ}-Y6b3A@fm*ys2V<3d58&~y#EMnRx ziv>B4%HP9W$)OG{t*t#bvL6e22ZNHg0;T1hmkj!cnmBwN4^=d92={@c#seBcRkfc} z?9vCiL&lBy>42M0@X^+GyDQeO9&Rpxc9hEQ$D^&xG+7Bt_^QNi#ft1atMg_7%GNeq zwQqyedctkcgXPcDQz4r9TLCR1!x z9r>W2+`yQl4~2t0*{RN-sEv;~z~i~rfN81JLykNW-=tb4E-BS$ zRbTNR6;WDjSFdJDorAa3-NT2r+`Y>hlAd9wft6}sBPupr(WfOgxzUWvoSeu?bP@UScq9|wb5X=v|xrF)TYo@b<`4`!^*p~!uvI)05)B`LaT_nIY_ zeY#K(7<8kPRBDpf4AJ$z;KG`!)+u6lv7SN1;Nz*YW4~Kd_K>0=O;f!x5q(amOH&r# zUJY$cpO=>4HAd&-7WeKfM9;hdQBPtwYOr%V{h^Rpdzj}~7CUI%{h a*Z%;R+clR`mze(m000000009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-&l5)>dho*N>c0000TX;fHrLvL+uWo~o;00000Lvm$d zbY)~9cWHEJAV*0}P-HG;2LJ#DP)S5VRA}DqSXq+YI1B?6A13#m94?n>Vm?Ta)Jtl< zClz;Bz0I=B1q4Cy$B%!=bI#%6$qytC55MJaIQ(`<&Jyk$czDQja?Q2w93DcDB0}{a zA$`8)yA)p`MbwpfQ7H7~MZH-_`Z^E^03hfdqRkoF9&|axpf{?zVE^%z{)sQby zpm$Ll@EL=$i7LMUofUB1R;%rvcuIHF?m&w6LVy&}c)&JG>#ZX|UHP#+0L%A$95+k= z;mmhqsdn=h0n$oL-%b4TW8Ee~1MGxwq(zlELL`wes0SoaK}aGmNay+vmBU354+?!$ zzGY}ADD&D8SUcVjt-!3uDI@`0en+iR2390ObXWn3%0(c^+5sTbxq?hpT9%tc@T8UV zY;>jwl?ls`f$&BUAiA6*sR9w^7exdVkV4F8P`P=QyX?QV3F)a=5}N5rkS(jAxqTiX0^ZQNJjWp^)_0^Wql` zhaP||i|@DG;*7^>aVTtF8U_N<>Bm*c5aDHQtP;f`r=4VkI1u9AivXU@O04pga40iv z`3E-vdz-Ze$2po~2B*rbXf+3>k&A?UL)xnd+L%JWvJuqf3%TTz5TsKe7D?nw^Gf2B z7ctDYFxgK{TtvSc~OD=Y20hETV0ZrA?zR- z$FpnIc)^OObdimTytv2#4m=tF+TF4>!Q&j#@GnZG#8cp=8&?9%&=SC?r#6dSX#ZWz zml{}{UbZbgk~KnhK~znA@O0yZa9LbivJuPlx@U#saov#+sl1W=j>rS^yboj}IaK~XRn9*d4t*Rp*)V$QiqCKVD zT(|WGo{NOo=_Z7bIF&Ku;HdJAAYS8{f8mA_8r!2ip}6Nx%!z|$LSL;yD=@^f(9)us z1VSpopP4T^!aP~OIvHDON5LTSc@04I(BxTTj})b-t0Luj1_ALtO>q23)@=`a?Q2BEhAaBC#3nbIaha17S&2>pq3JXqon%$cRh+-& z!>fKL^7?f!xRr+Xo>#gT`Q~{>TKZtd+8m19XR71ZI8~COn|7~Ra@nT~1%W{~I!UD_ zdCd@A?+Y%hscM}fb{FdzL<~NjIy?5eHDwPe3eq&yD-+S@gt|0k@$J>n*7SL430`A# zK5lXE&O-Fe8xZv*cB2Mc$88Ma2b>Ma2b>Ma2b>Ma2b>Ma2b>Ma2b>Ma2Z*}1Lf136E w`}h9*-{&STgkA?;2mbKC_iXfa;BR-}UqxpztXWdrHvj+t07*qoM6N<$f&~UbWB>pF literal 0 HcmV?d00001 diff --git a/textures/digistuff_camera_pole.png b/textures/digistuff_camera_pole.png new file mode 100644 index 0000000000000000000000000000000000000000..49a5ef84e4b5f5da23fdad93055f680f09875e9f GIT binary patch literal 3213 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 literal 0 HcmV?d00001 diff --git a/textures/digistuff_camera_right.png b/textures/digistuff_camera_right.png new file mode 100644 index 0000000000000000000000000000000000000000..5dca35f80059f17eb27384bc67b29f878c9cec78 GIT binary patch literal 1831 zcmV+?2iW+DP)00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-&l5)>gUbJV7f0000TX;fHrLvL+uWo~o;00000Lvm$d zbY)~9cWHEJAV*0}P-HG;2LJ#Dok>JNRA}DqSX;6k#|;D8^J(ovE6_&cRcQsHT2!hSue)|V`&N)0h`GMr&;V=0c4u3f$X9@QWJUrw% zx#n7T4i6zn5uy5zkX~Q&U5by8BI?S#C=~keqTVbdeH@4c01)}!pXJYx2tc3!!Ph7N zBJw_I-6C(LyqGKc6X>tLLjojtvv~ms34+L6GdoiN4`^HVhIQxtSOB!QD%;94Xs=W) zK}a7_mpHcfYRH!;(7UJ&c#T2XM3rBF&I-70tJQW-Jf%BocOXT3AwY^~JYbup_0|!f zuKd^@faQBWjvFR`aOS(QRJ-|$0BI$r?7A(BWK)B_TzAS96& zq;q|T%Hg7j2ZcT=-!e25lzHt4tQ~KNR$$iS6p{cgzoS+u11l0CI;;RivUR>k=2ObRo?QYqc;BgLV_!p&8;wf;`jVl3W zXbE7{Q=7#uwEt1eml{}{UbZbgk~KnhK~zn=@O0yZa9LbivJuPlx@U#saov#+sl1W=j>rS^yboj}IaK~XRn9*d4 zt*Rp*)V$QiqCKVDT(|WGo{NOo=_Z7bIF&Ku;HdJAAYS8{f8mA_8r!2ip}6Nx%!z|$ zLSL;yD=@^f(9)us1VSpopP4T^!aP~OIvHDON5LTSc@04I(BxTTj})b-t0Luj1_ALt zO>q23)@=`a?Q2BEhAaBC#3nbIaha17S&2>p zq3JX)on%$cRh)mwhgbbh@LLfeB9#RorUO`Hz4Xs>_!c?j@vrIp_Xvubr8aZeb!)8dc6nWImhW( zaw^lxZ!xB@VXv37n9@@mDe~>xH~h?h2S54W+kv+OZwKBEyd8Ku@OI$sz}tbh18)c3 z4!j+BJMjPN!1J#!fByWrKmVoY7hk`A-Cw_a`SQ-dfA_CL{*sEny8~(N_wT=d`t<9c zLeAd^Lf^mt-mgC>p!J`OhZd-#GABpPYXB^lST&DEj#zly?7T)&qE-PXDj}{s{Fdh=kWon3T>8?!1($$AvY8S|xv6<2KrRD=b5UwyNotBhd1gt5g1e`0K#E=} zJ5W5;)5S3)l&8c*6x+W95=4Io}d+%iQgVYiLANUi* s-u8Cn27Qrw*22K|dY>30Scl#=hVR-O6NRjH>;UmSUHx3vIVCg!061$oiU0rr literal 0 HcmV?d00001