From 1e116e3a16cf059cc47e7c2a510f9098f3ff5e6a Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Fri, 23 Jun 2023 14:11:49 +0200 Subject: [PATCH] working display --- entity.lua | 4 +- init.lua | 1 + pointed.lua | 12 ++++++ preview.lua | 69 +++++++------------------------ textures/pick_and_place_plus.png | Bin 4931 -> 5126 bytes tool.lua | 15 ++++--- 6 files changed, 40 insertions(+), 61 deletions(-) create mode 100644 pointed.lua diff --git a/entity.lua b/entity.lua index 918a9d5..5bbbc2f 100644 --- a/entity.lua +++ b/entity.lua @@ -7,8 +7,8 @@ minetest.register_entity("pick_and_place:display", { physical = false, static_save = false, collisionbox = {0, 0, 0, 0, 0, 0}, - visual = "upright_sprite", - visual_size = {x=10, y=10}, + visual = "cube", + visual_size = {x=1, y=1, z=1}, glow = 10 }, on_step = function(self) diff --git a/init.lua b/init.lua index c567b08..fbfc619 100644 --- a/init.lua +++ b/init.lua @@ -3,6 +3,7 @@ pick_and_place = {} local MP = minetest.get_modpath("pick_and_place") dofile(MP .. "/common.lua") +dofile(MP .. "/pointed.lua") dofile(MP .. "/serialize.lua") dofile(MP .. "/entity.lua") dofile(MP .. "/node.lua") diff --git a/pointed.lua b/pointed.lua new file mode 100644 index 0000000..272b40c --- /dev/null +++ b/pointed.lua @@ -0,0 +1,12 @@ + +--- returns the pointed position +function pick_and_place.get_pointed_position(player, distance) + distance = distance or 10 + local ppos = player:get_pos() + local eye_height = player:get_properties().eye_height + ppos = vector.add(ppos, {x=0, y=eye_height, z=0}) + local look_dir = player:get_look_dir() + + local pos = vector.add(ppos, vector.multiply(look_dir, distance)) + return vector.round(pos) +end diff --git a/preview.lua b/preview.lua index 017470c..762efb1 100644 --- a/preview.lua +++ b/preview.lua @@ -2,16 +2,8 @@ -- playername => key local active_preview = {} -local function add_preview_entity(texture, key, visual_size, pos, rotation) - local ent = pick_and_place.add_entity(pos, key) - ent:set_properties({ - visual_size = visual_size, - textures = {texture} - }) - ent:set_rotation(rotation) -end - function pick_and_place.show_preview(playername, texture, color, pos1, pos2) + pos2 = pos2 or pos1 texture = texture .. "^[colorize:" .. color local key = @@ -27,51 +19,22 @@ function pick_and_place.show_preview(playername, texture, color, pos1, pos2) pick_and_place.clear_preview(playername) active_preview[playername] = key - local size = vector.subtract(pos2, pos1) - local half_size = vector.divide(size, 2) -- 8 .. n - - -- z- - add_preview_entity(texture, key, - {x=size.x, y=size.y}, - vector.add(pos1, {x=half_size.x-0.5, y=half_size.y-0.5, z=-0.5}), - {x=0, y=0, z=0} - ) - - -- z+ - add_preview_entity(texture, key, - {x=size.x, y=size.y}, - vector.add(pos1, {x=half_size.x-0.5, y=half_size.y-0.5, z=size.z-0.5}), - {x=0, y=0, z=0} - ) - - -- x- - add_preview_entity(texture, key, - {x=size.z, y=size.y}, - vector.add(pos1, {x=-0.5, y=half_size.y-0.5, z=half_size.z-0.5}), - {x=0, y=math.pi/2, z=0} - ) - - -- x+ - add_preview_entity(texture, key, - {x=size.z, y=size.y}, - vector.add(pos1, {x=size.x-0.5, y=half_size.y-0.5, z=half_size.z-0.5}), - {x=0, y=math.pi/2, z=0} - ) - - -- y- - add_preview_entity(texture, key, - {x=size.x, y=size.z}, - vector.add(pos1, {x=half_size.x-0.5, y=-0.5, z=half_size.z-0.5}), - {x=math.pi/2, y=0, z=0} - ) - - -- y+ - add_preview_entity(texture, key, - {x=size.x, y=size.z}, - vector.add(pos1, {x=half_size.x-0.5, y=size.y-0.5, z=half_size.z-0.5}), - {x=math.pi/2, y=0, z=0} - ) + local visual_size = vector.add(vector.subtract(pos2, pos1), 1) + local offset = vector.divide(vector.subtract(pos2, pos1), 2) + local origin = vector.subtract(pos1, offset) + local ent = pick_and_place.add_entity(origin, key) + ent:set_properties({ + visual_size = visual_size, + textures = { + texture, + texture, + texture, + texture, + texture, + texture + } + }) end function pick_and_place.clear_preview(playername) diff --git a/textures/pick_and_place_plus.png b/textures/pick_and_place_plus.png index 9e93c6062b3235b5888bdaa20571c15974da64c9..1e7b5a2117ec514ac8cbf86a4cdb1a32c8874161 100644 GIT binary patch delta 1595 zcmV-B2E_TpCWa`G7=Hl+0000bJ#8WY00WSER9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3 z004N}%adr z^9v6XIpe&>kV3F{TylvsCed!sGJ3LZ^mAeN$(`IBFBl@hD1X~B@szKSV@`9OrW4xr zcSDD#jF~@QoP0ZR;`-g%tJfXthkwZi?dhaiSc2 zAa&>+Th)*-k8GVHp0xvQh0`$Pw}2jkeZ8wPF!3rR7QM(sDg7goF$VOQ8z_=EETB4i zKLT$-B_IH4ntzV6J%V`~n=?jFo-4<)aMISUe8bwAAouxk%;<@Hroq8l4D*HD(`v&p zK9rN+4ec-F@WZ#BV>vwE$#Xkg%oyF!-CB)p92%#{E+7_R9%?_zm_cvpQ5?Ghn%ZEH zwGorv5?Zv`7UWd51(mj7o`^wcBS)1oHCo45r~snlm46i@b1^JK7(r6vB3m+`QDc=P zRU)#aj2v>p2NoJ`({NWP+G=bisNy0haLhk%=Bi?Ay_Sez56H!*HiaYj7qSHVq^46>Z_$RBkP zIh4J4=e-YJee}uaAfZ=Y2panJoK@7R*PyD=Xwn=dy69tw8e>c`Cr*Ov+b7g%iYcX> z;WWc?#_kM-oEKhXaf@HVqDx$oS#m-86jyu+MSn{yspQI4Dhj-Ysx{VB^GYjHX?3e# z!>Vgs)0!Jntx0pux6stI*iy>}Ym?UB+6%1FWQ_+?T~QC#AXVK>P`^%m=M0RoBM`1& z4U8eNJ7+eMbKIHhoZth3#SOBy$Dudx;W$V0 z9*%P~FW`7!?%ZuYfu@@?pFs2H7+plur{)uAzK_uhXl@ho!nW^6^Dq%#M6<`}Z8Y74 z`2?EpiuMvy&-3VqXrATK%V_TN=nXWFVleb0G-r(7M02&)F4dxW566|Feeq8C+rDX^ zhNa-!m6rn<> z6nNgNw7S4z7YA_yOYT;-u&zCH^ldw21ZKxF7HCJ?`EC zLbb>=t8E<6blXhCqGBq&Dh6KBfqn$hg;AMV#+)R@(QbnM}+Rhls^o6Dv*3 z@}@>SMI2T&o$`g0$13M7&RVg|>i6U?3}*C|Wvu?$|#@+8xdM{QY<8B zKia}S==vpcDdZ}Ekz)ZRXpmh$_#c1#?$*jqPIyVdDA4}mI3L46U>B%W9OwJkacU=k z{~5T_8~#!inE52V($K<3K<_qiaoy0AJ>YT&7xW(7opM zR^P|z1CXSy;y1v-Auy7o?DZD!?riSu-!t|8egIGt1%?77 zIW{>tF)(FfEn_!1Wi2!@Vl*vcI5lQ1Ff}-3G-hQsI5TEplM4u@4mdY8GBPqTH8eLl zG&D7{zX)6blQ;=nBw}GXF=JvfI4xl}F=Qe?oWRtiF zMH4eEFg7hRGgL7&Ix#RhF*PeNGP4j0YX}4^mx7s-krEyX=LQ!H3J>N{7h{vT5-48= zP)t-s00030|No`gpWOfe00DGTPE!Ct=GbNc0004EOGiWihy@);0000UNkl)v(79kKQD{KG&002ovPDHLkV1jD>(MlrJb|0L{&9T4`33}P4iGQbjg&bp=^E92%uD=^P zJY|ghX(8t+U(V&rG{|~sXd)2WJli@qOhdvGk=y2FA___4+0km5p4}Ab>E|SJ@PVSk z+p&!?B#f13KKwIH74EZgfhhU%YstioL3W>#AWTKS*W66*c-d4mwktB|Z+ZIOP zEvN(pAWhRzwtq)3zsBYiqZ`j7$FgwJ)~@`8wNrwe=f^Rk8}gY32WuMUf}GQ8!_i-r zliv;P3v&43ub#CWp3mep9WG{!zR=xT)iw@|Q)Cwqi!cwhA7zZ7xAZ8ET>&lHV34(n zL2n67ZMFqDRc%3~Ef^Ibo`1O*mLXJ-l({j4E^(*qeK^d3^7JEF~zK+PQ3<=s+u$>PJ++3PpH$RDW#m@ zG{bVn?hJ*T7hYs>i(kSL7hRHBazXkOS9}R27Jn_N) z8dqJ@nj2EBNpsD&(4uMDQp*Qxlh$wT3D#(`#)GM@7!TGUjd3?Y{d3|wXJCvSf$#{{ zz!(y{b7qyCet;zxKhQ3r4QE_0?+_aJlM zd4IdcTJ5()8H{aZ*n?^X)ra*}Gi&bG>&@Q$r0{5e-%wi~0W*5@0Wh1PruT4MS-sJl zmmyrZGoL{7I%`+lnYYo*UFJ-tuVXSFh|t(&E@b+DS;H=KSpu(OGEe69&FV8xB+p&5 z&)3=wOy;SCzGK$>5 zR3{6fqK;aHB2);qLaPoYFa3ii4M~cNqu^R_@Mp2=;Nq;SgR3A2{(v|-IVrkGiT5Ri z7BN1!ypQwVIox+2Ak<1sv)aZ0O}EWtJSL_yt76A1x)DSl)wIkkV@{G1@LgZ`2=M(b z%Cr3M{keM7ti^wTfJi*c4AUmwAfDQ^4bJ<-VOEe;;&b9rlNuy`s0?!Pa zspLFym{`oWu+qY;U~0sZ#1U1~DPKr?ta9Gstd%OP(IKlpz=TPrs)?j?m{K>Lg1d<+8} zyFk6_IN!&PQ$GQM&%l-5^p|VE%qQv9rWQE@dbfd#>!zmc0hc?#z>^`HvMU9tgj^1I zKcjET0R6W>*P1uC#yL(OfE3LtaRVG20wa0KUiW!-XY1Vlz0;WA4@%W?mzB5%=l}o> z8fjEmbXc=j1%(16VK8GkGiEepEjcnaWGysiV>2x{H90UXIb&gCIb<+lH(@a}k_e^_ zHa9dmF*G$XHa9ahGc>cb2wVZP^9o=H7Gw1jh5!Hn24YJ`L;%qMt^hI5?w!VyR}&rz z<_iN51Pg{Vb3BuO6DVR$NklK*Z%8+Pi?<3`H>j0N>0c5{PQO%>V!Z M07*qoM6N<$g6?kE5C8xG diff --git a/tool.lua b/tool.lua index c19ac92..1366f8c 100644 --- a/tool.lua +++ b/tool.lua @@ -7,13 +7,16 @@ minetest.register_tool("pick_and_place:placer", { on_use = function(itemstack, player) print("on_use: " .. itemstack:get_name() .. ", " .. player:get_player_name()) end, - on_focus = function(itemstack, player) - print("on_focus: " .. itemstack:get_name() .. ", " .. player:get_player_name()) + on_secondary_use = function(itemstack, player) + print("on_secondary_use: " .. itemstack:get_name() .. ", " .. player:get_player_name()) end, - on_step = function(itemstack, player) - print("on_step: " .. itemstack:get_name() .. ", " .. player:get_player_name()) + on_step = function(_, player) + local playername = player:get_player_name() + local pointed_pos = pick_and_place.get_pointed_position(player) + pick_and_place.show_preview(playername, "pick_and_place_plus.png", "#00ff00", pointed_pos, vector.add(pointed_pos, {x=1, y=2, z=3})) end, - on_blur = function(itemstack, player) - print("on_blur: " .. itemstack:get_name() .. ", " .. player:get_player_name()) + on_deselect = function(_, player) + local playername = player:get_player_name() + pick_and_place.clear_preview(playername) end })