images for the combination dials

This commit is contained in:
FaceDeer
2022-08-26 19:45:10 -06:00
parent 29161d898b
commit fe663458b5
13 changed files with 61 additions and 34 deletions

View File

@ -8,6 +8,13 @@ local initialize = function(pos, meta)
if not meta:contains("key") then
local inv = meta:get_inventory()
inv:set_size("main", 8)
for i = 1, math.random(1,8) do
local item = ItemStack(df_underworld_items.colour_items[math.random(1,#df_underworld_items.colour_items)])
--item:set_count(math.random(1,4))
inv:add_item("main", item)
end
local next_seed = math.random() * 2^21
math.randomseed(pos.x + pos.y^8 + pos.z^16)
-- Key is consistent with location
@ -32,19 +39,16 @@ end
-- 3 4
local formspec_dial = function(identifier, state)
-- TODO replace label with image[]
-- TODO replace buttons with image buttons?
return "label[0.5,0;"..tostring(state).."]"
.. "button[0,0.25;0.5,0.5;"..identifier.."-;<]"
.. "button[1.5,0.25;0.5,0.5;"..identifier.."+;>]"
return "image[0.5,0;2,1;dfcaverns_chest_dial_"..tostring(state)..".png]"
.. "button[0,0.25;0.5,0.5;"..identifier.."+;<]"
.. "button[2.5,0.25;0.5,0.5;"..identifier.."-;>]"
end
local formspec_bar = function(horizontal, state, key)
-- TODO replace boxes with image[]
if horizontal then
return "box[0,0;".. tostring(key/14 * 2) ..",1;#222222ff]box[0,0.1;".. tostring(state/14 * 2)..",0.8;#ff00ffff]"
return "box[0,0;".. tostring(key/14 * 2 + 0.1) ..",1;#222222ff]box[0.1,0.1;".. tostring(state/14 * 2)..",0.85;#ff00ff44]"
end
return "box[0,0;1,".. tostring(key/14 * 2) ..";#222222ff]box[0.1,0;0.8,".. tostring(state/14 * 2)..";#ff00ffff]"
return "box[0,0;1,".. tostring(key/14 * 2 + 0.1) ..";#222222ff]box[0.1,0.1;0.85,".. tostring(state/14 * 2)..";#ff00ff44]"
end
local prefix = "df_underworld_items:puzzle_chest"
@ -61,22 +65,22 @@ local show_formspec = function(pos, node, clicker, itemstack, pointed_thing)
local playername = clicker:get_player_name()
local formname = prefix .. minetest.pos_to_string(pos)
local formspec = "formspec_version[6]"
.. "size[11,11.5]"
.. "container[3.5,1]"
.. "size[11,12]"
.. "container[1.5,0.5]"
.. "container[0,0]" .. formspec_dial("dial1", state[1]) .. "container_end[]"
.. "container[2,0]" .. formspec_dial("dial2", state[2]) .. "container_end[]"
.. "container[0,1]" .. formspec_dial("dial3", state[3]) .. "container_end[]"
.. "container[2,1]" .. formspec_dial("dial4", state[4]) .. "container_end[]"
.. "container[4.1,0]" .. formspec_bar(true, state_sum[1], key_sum[1]) .. "container_end[]"
.. "container[4.1,1]" .. formspec_bar(true, state_sum[2], key_sum[2]) .. "container_end[]"
.. "container[0.5,2.1]" .. formspec_bar(false, state_sum[3], key_sum[3]) .. "container_end[]"
.. "container[2.5,2.1]" .. formspec_bar(false, state_sum[4], key_sum[4]) .. "container_end[]"
.. "container[3,0]" .. formspec_dial("dial2", state[2]) .. "container_end[]"
.. "container[0,1.5]" .. formspec_dial("dial3", state[3]) .. "container_end[]"
.. "container[3,1.5]" .. formspec_dial("dial4", state[4]) .. "container_end[]"
.. "container[6.1,0]" .. formspec_bar(true, state_sum[1], key_sum[1]) .. "container_end[]"
.. "container[6.1,1.5]" .. formspec_bar(true, state_sum[2], key_sum[2]) .. "container_end[]"
.. "container[1,2.75]" .. formspec_bar(false, state_sum[3], key_sum[3]) .. "container_end[]"
.. "container[4,2.75]" .. formspec_bar(false, state_sum[4], key_sum[4]) .. "container_end[]"
.. "container_end[]"
.. "list[current_player;main;0.6,6.2;8,4;]"
.. "list[current_player;main;0.6,6.7;8,4;]"
if solved then
local nodemeta = "nodemeta:"..pos.x..","..pos.y..","..pos.z
formspec = formspec
.. "list["..nodemeta..";main;0.6,4.7;8,1;]"
.. "list["..nodemeta..";main;0.6,5.4;8,1;]"
if meta:get_string("solved") ~= "true" then
minetest.sound_play("dfcaverns_puzzle_chest_open", {pos = pos})
meta:set_string("solved", "true")
@ -112,6 +116,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
show_formspec(pos, nil, player)
end)
local puzzle_chest_can_dig = function(pos, player)
local meta = minetest.get_meta(pos)
initialize(pos, meta)
local inv = meta:get_inventory()
return inv:is_empty("main")
end
minetest.register_node("df_underworld_items:puzzle_chest_closed", {
description = S("Puzzle Chest"),
@ -133,12 +143,7 @@ minetest.register_node("df_underworld_items:puzzle_chest_closed", {
_mcl_hardness = 50,
on_rightclick = show_formspec,
can_dig = function(pos, player)
local meta = minetest.get_meta(pos)
initialize(pos, meta)
local inv = meta:get_inventory()
return inv:is_empty("main")
end,
can_dig = puzzle_chest_can_dig,
})
minetest.register_node("df_underworld_items:puzzle_chest_opened", {
@ -152,22 +157,18 @@ minetest.register_node("df_underworld_items:puzzle_chest_opened", {
{name = "dfcaverns_slade_block.png^dfcaverns_chest_mask_side.png", backface_culling = true},
{name = "dfcaverns_slade_block.png^dfcaverns_chest_mask_side.png^dfcaverns_chest_lock_plate.png^dfcaverns_chest_lock_colours.png", backface_culling = true},
{name = "([combine:16x32:0,0=dfcaverns_slade_block.png:0,16=dfcaverns_slade_block.png)^dfcaverns_chest_mask_interior.png", backface_culling = true},
},
},
is_ground_content = false,
mesh = "dfcaverns_chest_open.obj",
drawtype= "mesh",
visual = "mesh",
paramtype2="facedir",
groups = {stone=1, slade=1, pit_plasma_resistant=1, mese_radiation_shield=1, cracky = 3, building_block=1, material_stone=1, not_in_creative_inventory=1},
drop = "df_underworld_items:puzzle_chest_closed",
sounds = df_dependencies.sound_stone({ footstep = { name = "bedrock2_step", gain = 1 } }),
_mcl_blast_resistance = 1200,
_mcl_hardness = 50,
on_rightclick = show_formspec,
can_dig = function(pos, player)
local meta = minetest.get_meta(pos)
initialize(pos, meta)
local inv = meta:get_inventory()
return inv:is_empty("main")
end,
can_dig = puzzle_chest_can_dig,
})