From 21f1fb3789e169c9ba61e4b07de74724e89932e4 Mon Sep 17 00:00:00 2001 From: Mikko Tuumanen Date: Sat, 9 May 2020 23:33:51 +0300 Subject: [PATCH] Add formspec to cards for turning them into pile of cards. --- init.lua | 97 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 76 insertions(+), 21 deletions(-) diff --git a/init.lua b/init.lua index a6cedee..8648cec 100644 --- a/init.lua +++ b/init.lua @@ -1,4 +1,4 @@ -local cardgroups = { crumbly=1, falling_node=1 } +local cardgroups = { crumbly=1, falling_node=1, dig_immediate=3, card=1 } local pilegroups = { crumbly=1 } @@ -12,12 +12,64 @@ local cardnames = {} local cardprefix="deck:card_" local cardprefixlen=string.len(cardprefix) +local function pile_add_card(inv,cardname) + local s=inv:get_size("main") + minetest.log("inv size="..s) + local place=s + for i=1,s,1 do + local stack=inv:get_stack("main",i) + if stack:get_count() > 0 then + place=i-1 + break + end + end + if place > 0 then + inv:set_stack("main",place,cardname) + minetest.log("deck_add_card done") + return true + end + return false +end + +local function pile_add_card_from_pos(inv,pos) + local cardname=ItemStack(minetest.get_node(pos).name) + return pile_add_card(inv,cardname) +end + +local function flip_card(pos,formname,fields,sender) + local n=minetest.get_node(pos) + local pile + if fields.to_stockpile then + pile="deck:stockpile" + elseif fields.to_chestpile then + pile="deck:chestpile" + else + minetest.log("not flipped") + return + end + minetest.log(n.name.." to "..pile) + minetest.remove_node(pos) + minetest.place_node(pos,{name=pile}) + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + pile_add_card(inv,n.name) + minetest.close_formspec(sender:get_player_name(),"") +end + for i = 1,table.getn(textures),1 do local name=cardprefix..textures[i] table.insert(cardnames,name) minetest.register_node(name, { description = descriptions[i], groups = cardgroups, + on_construct = function(pos, placer, itemstack, pointed_thing) + local meta=minetest.get_meta(pos) + meta:set_string("formspec", "size[3,3]".. + "label[0,0;Flip card to make a]".. + "button[0,1;2,1;to_stockpile;Stockpile]".. + "button[0,2;2,1;to_chestpile;Chestpile]") + end, + on_receive_fields = flip_card, tiles = { textures[i]..".png" } }) end @@ -60,25 +112,6 @@ local function pile_peek_first(inv) end end -local function pile_add_card(inv,pos) - minetest.log("add card "..minetest.pos_to_string(pos)) - local s=inv:get_size("main") - minetest.log("inv size="..s) - local place=s - for i=1,s,1 do - local stack=inv:get_stack("main",i) - if stack:get_count() > 0 then - place=i-1 - break - end - end - if place > 0 then - inv:set_stack("main",place,ItemStack(minetest.get_node(pos).name)) - minetest.log("deck_edd_card done") - return true - end - return false -end local function add_to_inv(inv, cardname) local s=inv:get_size("main") @@ -169,7 +202,7 @@ minetest.register_abm({ if not string.sub(abovenode.name,1,cardprefixlen) == cardprefix then return end local meta=minetest.get_meta(pos) local inv=meta:get_inventory() - if pile_add_card(inv,above) then + if pile_add_card_from_pos(inv,above) then minetest.remove_node(above) while true do above={x=above.x,y=above.y+1,z=above.z} @@ -183,3 +216,25 @@ minetest.register_abm({ end end }) + +-- minetest.register_craft({ +-- output = "deck:stockpile", +-- recipe = {{"group:card"}} +-- }) +-- minetest.register_craft({ +-- output = "deck:chestpile", +-- recipe = {{"group:card"}} +-- }) + +-- minetest.register_on_craft(function(itemstack,player,old_craft_grid,craft_inv) +-- local s=craft_inv:get_size("craft") +-- local i +-- for i=1,s,1 do +-- local stack=craft_inv:get_stack("craft",1) +-- if stack:is_empty() then +-- minetest.log("empty") +-- else +-- minetest.log(stack:get_name()) +-- end +-- end +-- end)