From 3d633619c4f7057cf158edea3dd68b1451b9a39e Mon Sep 17 00:00:00 2001 From: Samy Avrillon Date: Sat, 18 May 2024 14:47:59 +0200 Subject: [PATCH] Added components --- blocks/component.lua | 220 ++++++++++++++-------------------- textures/component_and.png | Bin 0 -> 4456 bytes textures/component_demux.png | Bin 0 -> 4417 bytes textures/component_port.png | Bin 0 -> 4392 bytes textures/component_switch.png | Bin 0 -> 4367 bytes utils.lua | 41 ++++++- 6 files changed, 133 insertions(+), 128 deletions(-) create mode 100644 textures/component_and.png create mode 100644 textures/component_demux.png create mode 100644 textures/component_port.png create mode 100644 textures/component_switch.png diff --git a/blocks/component.lua b/blocks/component.lua index 14a523c..26ba398 100644 --- a/blocks/component.lua +++ b/blocks/component.lua @@ -1,51 +1,3 @@ - ---[[ -Component 2x3: - - z+ - /|\ -\ 22 | 11 / - \ 22 | 11 / - \ 22 | 11 / -333 \ | / 000 -333 \|/ 000 -−−−−−−−+−−−−−−−> x+ -444 /|\ 777 -444 / | \ 777 - / 55 | 66 \ - / 55 | 66 \ -/ 55 | 66 \ ---]] -local function vecTo8dir(vec) - local x = vec[1] - local z = vec[3] - return - x>=0 and z>=0 and z<=x and 0 or - x>=0 and z>=0 and z>x and 1 or - x<0 and z>=0 and -z<=x and 2 or - x<0 and z>=0 and -z>x and 3 or - x<0 and z<0 and z>=x and 4 or - x<0 and z<0 and z=0 and z<0 and -z>=x and 6 or - x>=0 and z<0 and -z x+ -- {name,width,height,{cables_left,cables_right,cables_top,cables_bottom}} -components = { - "and" = {2,3,{{"in_1","in_2"},{"out"},{},{}}}, - "switch" = {2,1,{{"in"},{"out"},{"activate"},{}}}, - "demux" = {2,8,{{"in_1","in_2","in_3"},{"out_1","out_2","out_3","out_4","out_5","out_6","out_7","out_8"},{},{}}}, -} +components = {} +components["and"] = {2,3,{{"in_2",nil,"in_1"},{nil,"out",nil},nil,nil}} +components["switch"] = {2,1,{{"in"},{"out"},{"activate",nil},nil}} +components["demux"] = {2,8,{{nil,nil,nil,nil,nil,"in_3","in_2","in_1"},{"out_8","out_7","out_6","out_5","out_4","out_3","out_2","out_1"},nil,nil}} + -- componentsblocks["block"] = {name,x,y} componentsblocks = {} +for name,cmp in pairs(components) +do + local w = cmp[1] + local h = cmp[2] + local cables = cmp[3] + for x=1,w do + for y=1,h do -minetest.register_node("logikraft:component_head", { - drawtype = "block", - tiles = {"component.png"}, - groups = {circuitry = 1,dig_immediate = 3}, - on_place = function(itemstack, placer, pointed_thing) - local w = 3 - local h = 5 + local nodename = "logikraft:component_"..name.."_"..tostring(x).."_"..tostring(y) + minetest.register_node(nodename, { + drawtype = "block", + tiles = { + "component_"..name..".png", + "component.png", + ((x==w) and (cables[2] and cables[2][y] and "component_port.png" or "component.png") or "component.png"), -- x+ + ((x==1) and (cables[1] and cables[1][y] and "component_port.png" or "component.png") or "component.png"), -- x- + ((y==h) and (cables[3] and cables[3][x] and "component_port.png" or "component.png") or "component.png"), -- z+ + ((y==1) and (cables[4] and cables[4][x] and "component_port.png" or "component.png") or "component.png"), -- z- + }, + groups = {circuitry = 1,dig_immediate = 3}, + paramtype2 = "4dir", + inventory_image = (x == 1 and y == 1 and "component_"..name..".png") or nil, + drop = "logikraft:component_"..name.."_1_1", + on_place = (x == 1 and y == 1) and function(itemstack, placer, pointed_thing) + + local under = pointed_thing.under + local node = minetest.get_node(under) + local udef = minetest.registered_nodes[node.name] + + -- Rightclick is prioritary + if udef and udef.on_rightclick and + not (placer and placer:is_player() and + placer:get_player_control().sneak) then + return udef.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + -- Pos will be the head location + local pos + if udef and udef.buildable_to then + pos = under + else + pos = pointed_thing.above + end + + local dir8 = logikraft.vecTo8dir(placer:get_look_dir()) - local under = pointed_thing.under - local node = minetest.get_node(under) - local udef = minetest.registered_nodes[node.name] + for i = 1,w do + for j = 1,h do + local loc = logikraft.addToPos8dir(dir8,pos,i-1,j-1) + local node_def = minetest.registered_nodes[minetest.get_node(loc).name] + if not node_def or not node_def.buildable_to then + -- Then we cannot build here + return itemstack + end + end + end - -- Rightclick is prioritary - if udef and udef.on_rightclick and - not (placer and placer:is_player() and - placer:get_player_control().sneak) then - return udef.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack - end + local dir4 = logikraft.dir8to4(dir8) + local invw = dir8 % 2 == 0 - -- Pos will be the head location - local pos - if udef and udef.buildable_to then - pos = under - else - pos = pointed_thing.above - end + -- If we reached this point, we can build the component + for i = 1,w do + for j = 1,h do + local loc = logikraft.addToPos8dir(dir8,pos,invw and (w-i) or (i-1),j-1) + minetest.set_node(loc, {name = "logikraft:component_"..name.."_"..tostring(i).."_"..tostring(j), param2 = dir4}) + end + end - - local player_name = placer and placer:get_player_name() or "" - - local dir = placer and placer:get_look_dir() and - vecTo8dir(placer:get_look_dir()) or 0 - - for i = 0,w*h-1 do - local loc = addToPos8dir(dir,pos,i%w,(i-i%w)/w) - local node_def = minetest.registered_nodes[minetest.get_node(loc).name] - if not node_def or not node_def.buildable_to then - -- Then we cannot build here + if not minetest.is_creative_enabled(placer) then + itemstack:take_item() + end return itemstack + end or nil, + on_destruct = function(pos) + + local node = minetest.get_node(pos) + dir4 = node.param2 + + for i = 1,w do + for j = 1,h do + local loc = logikraft.addToPos4dir(dir4,pos,i-x,j-y) + remove_no_destruct(loc) + end + end end - end - -- If we reached this point, we can build the component - minetest.set_node(pos, {name = "logikraft:component_head", param2 = dir}) - for i = 1,w*h-1 do - local loc = addToPos8dir(dir,pos,i%w,(i-i%w)/w) - minetest.set_node(loc, {name = "logikraft:component_tail", param2 = dir}) - end - - if not minetest.is_creative_enabled(player_name) then - itemstack:take_item() - end - return itemstack - end, - on_destruct = function(pos) - local w = 3 - local h = 5 - - local node = minetest.get_node(pos) - - dir = node.param2 - - remove_no_destruct(pos) -- Should be logikraft:component_head - for i = 1,w*h-1 do - local loc = addToPos8dir(dir,pos,i%w,(i-i%w)/w) - local onode = minetest.get_node(loc) - if onode.name == "logikraft:component_tail" and onode.param2 == dir - then - remove_no_destruct(loc) - end - end - + }) + componentsblocks["nodename"] = {name,x,y} + end end -}) -minetest.register_node("logikraft:component_tail", { - drawtype = "block", - paramtype2 = "4dir", - groups = {circuitry = 1}, - -- Which direction is the one of the head block - tiles = {"component.png^[colorizehsl:120"} -}) \ No newline at end of file + minetest.register_alias("logikraft:component_"..name, "logikraft:component_"..name .. "_1_1") +end \ No newline at end of file diff --git a/textures/component_and.png b/textures/component_and.png new file mode 100644 index 0000000000000000000000000000000000000000..1532e766acbf3e7ca7fb13e19f5959e0c85d0a94 GIT binary patch literal 4456 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 E03R(Z3;+NC literal 0 HcmV?d00001 diff --git a/textures/component_switch.png b/textures/component_switch.png new file mode 100644 index 0000000000000000000000000000000000000000..81e986e0e280bc7ed170d9e085ac7533be74c357 GIT binary patch literal 4367 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4kiW$h6xih%orFL-c^M}lmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNU$f%!13q3<~I(G6$LWCKTg_v(E8u(u$=9)b2h0c^>93% z@$LI}?ONGm$2`3^zuGF~6Fb+MX>sD|m&Pw&Dle3@`A{Njpm0!6xsnx2f@o;mmD21bSPVC-&9wx?NpsJ8#?CFDAREdp(ZI z%Hvw^vo_Q{$LH39=Vb!5Yu}_VHe%V^F!Ov6oBBOf?t|Sg5;Ttoy}ZF)Bj&APbD&SD zJ$z$u#i8&frWw^duSz<92G5ROZ2!joyqCO8T-gq-aIdut42;d0&dvdz&dxBOGcZ)l zshw!+ao9oTXnb_HlBlC`hegVYT{m1^WwJ%P0u--st+kpF^NZD2YLbY!`@yXb9vn}) zdhlpuID5FGz#oRfvVx$Ji9-LUi$oo%D7e#K{#~y8eM7?HLnf=W`7(CpE}P70I6GQ& zcf8;+hK528qs={*o?ZvbYwju^xV~HB{3rYG&tC+87Gq{oDx4#^%y*BY&E`z$Io~^3 z!zP73Dt^Q{Stw&BvjH7Qv~E*}XDy{u_J<7>pz zJx3!~Ux|1^Z$eI^VS}^vShl5C&NSW<3A->ca=A$-7VbLFT1>wsbyZH_TIPa%^Gg{ zUwWOZTgCDvpIQ8RuJ27|z4C^I>dt1V;anGa#JCRpmaGltli0&rb$!phsNWW~3`SQ% zU$I$OupH}}viIHRck|BO`)7Ok)qD1==|zisUi`nsz`$FP84^(v;p=0SoS&ls47YguJQ{> zuF6ifOi{A8m(KO)W`OsL0L9E4HezRRWu9l~-&964qBz04piUwpEJo4N!2- zFG^J~(KFFA&~>fIEHhHF<5I9GN=dT{a&dziQIwKqtCUevQedU8UtV6WS8lAAUzDzI zXlZGwZ(yWvWTab^lBQc+nOBlnp_^B%3^D>@hD&O3a#3bMNoIbY0?5q7r2NtnTO}nf z1qB7D;T5?BzP@nd^NOLNker{ZUy)d#Z>VRWpPQ?XtfRQZwX6icj^dEYf>iyW)Z+Zo zqU2Q9vedj1Wn?2#lHvLbN{e#9-bqQ;Pt8fqP0cGQ);H8MM6uG{(>DOF0~7@5nYjgE zT@|?nC@M=b(-47$;v0|**gMD$smLvWn~S0v=6A4Sa2Q#+TMVaZD zd5Jm5t^ygAl9^&KgU)H?gQb;pSG*3%TOwu(@ zGBeRNF-}g^O)@t#(M?KCF;6iuOf)b{OG7oiI6tkVJh3R%F+DY}#8$~YGq(U7Rtg&6 zh|)w=U7nE&iUk8B6I}ySUCaQ}hj`IOA5><*d~BnS5hf4?NQI0YmjXmA$i>Z$%SInu z(t%1nh=HI|hn5%`7qqlOL1EMqlEQa1xJHAEq!1uU@o4HA4K9*GfF#AEsf%jC#f9ij zrRJsBDwQkQ+i@=5yPAQ4fi20~-G!lwp_*ZlRxDcz0|NtRfk$L91B0G22s2hJwJ&2} zU|=ut^mS!_!79X{Ztz2Y;UfkH2FViFh!W@gTu`f=0o+(jO;IS%EXhy+H5S7g`NSC* z7_vNF978nDCx7{LE?t3jgMono2M34H%3p`uzv~E0Yibg5yvi?kCpjS@AxS}SLju>< zt;Y`D487XTk&%(z>m1f{%(Yx-naMKVDL)sksuJA9-tmcf7T2M=1-mC3Fz#H);;DWl h>&J(Owja$H7^=@{Gcx|Te+|@q^mO%eS?83{1OQEcC)of1 literal 0 HcmV?d00001 diff --git a/utils.lua b/utils.lua index 4e6d74d..6653261 100644 --- a/utils.lua +++ b/utils.lua @@ -79,4 +79,43 @@ function logikraft.lookingAtNbIndex(user,under) end end return 0 -end \ No newline at end of file +end + +function logikraft.vecTo8dir(vec) + local x = vec[1] + local z = vec[3] + return + x<0 and z>=0 and -z<=x and 0 or + x>=0 and z>=0 and z>x and 1 or + x>=0 and z>=0 and z<=x and 2 or + x>=0 and z<0 and -z=0 and z<0 and -z>=x and 4 or + x<0 and z<0 and z=x and 6 or + x<0 and z>=0 and -z>x and 7 or + 0 -- Should not happen +end + +function logikraft.dir8to4(dir) + return math.floor(dir / 2) +end + +function logikraft.addToPos8dir(dir,pos,w,h) + local x = pos[1] + local y = pos[2] + local z = pos[3] + return + dir == 0 and {x = x-w, y = y, z = z+h} or + dir == 1 and {x = x+w, y = y, z = z+h} or + dir == 2 and {x = x+h, y = y, z = z+w} or + dir == 3 and {x = x+h, y = y, z = z-w} or + dir == 4 and {x = x+w, y = y, z = z-h} or + dir == 5 and {x = x-w, y = y, z = z-h} or + dir == 6 and {x = x-h, y = y, z = z-w} or + dir == 7 and {x = x-h, y = y, z = z+w} or + pos -- Should not happen +end + +function logikraft.addToPos4dir(dir,pos,w,h) + return logikraft.addToPos8dir(dir*2+1,pos,w,h) +end