Add formspec to cards for turning them into pile of cards.
This commit is contained in:
parent
f95a77182b
commit
21f1fb3789
97
init.lua
97
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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user