Compare commits

...

3 Commits

4 changed files with 53 additions and 2 deletions

View File

@ -4,6 +4,7 @@ sparktech.getoption = function(nodepos, optionname)
local node = minetest.get_node(nodepos)
local meta = minetest.get_meta(nodepos)
local optionsdef = minetest.registered_nodes[node.name]._sparkoption
if iodebug and not optionsdef then error("Getoption called on node that shouldn't have options!") end
if iodebug and not optionsdef[optionname] then
error("optioname " ..optionname .. " for " .. node.name .." is not defined!")
end
@ -23,5 +24,18 @@ sparktech.setoption = function(nodepos, optionname, optionvalue)
error("optioname " .. optionname .. " for " .. node.name .." is not defined!")
end
meta:set(optionname, minetest:serialize(optionvalue))
nodeminetest.registered_nodes[node.name]._sparkoptionchanged(nodepos, optionname)
end
sparktech.getoutput = function(nodepos, outputname)
assert(nodepos, "No position passed to getoutput!")
assert(outputname, "No name passed to getoutput!")
local sparkfunction = minetest.registered_nodes[minetest.get_node(nodepos).name]._sparkoutput[outputname]
return sparkfunction(nodepos)
end
sparktech.getoutputtype = function(nodepos, outputname)
return minetest.registered_nodes[minetest.get_node(nodepos).name]._sparkoutputtype[outputname]
end

View File

@ -101,6 +101,8 @@ minetest.register_globalstep(function(dtime)
else
hudString = hudString .. outputname .. ": " .. output:get_name() .. "[" .. output:get_count() .. "] (item)\n"
end
elseif outputType == "Inventory" then
hudString = hudString .. outputname .. ": Inventory (viewing not implemented)"
else
hudString = hudString .. outputType .. "?\n".. dump2(output)
end

View File

@ -36,6 +36,9 @@ minetest.register_node(NAME .. ":solar", {
return minetest.get_node_light(nodepos)
end
},
_sparkoutputtype = {
lightLevel = type(1)
}
})

View File

@ -397,7 +397,39 @@ minetest.register_node( NAME .. ":quarry", {
--on_destruct = function(pos, player) player:get_meta():set_string(NAME .. ":quarry_pos" , "") end,
allow_metadata_inventory_put = function(_,_,_, stack) return stack:get_count() end,
allow_metadata_inventory_take = function(_, _, _, stack) return stack:get_count() end
allow_metadata_inventory_take = function(_, _, _, stack) return stack:get_count() end,
_sparkoptionchanged = function(pos, name)
if name == "enabled" then
local timer = minetest.get_node_timer(pos)
if sparktech.getoption(pos, name) then
timer:start(0.1)
else
timer:stop()
end
elseif name == "depth" then
if sparktech.getoption(pos, name) > MAX_DEPTH then
local meta = minetest.get_meta(nodepos)
meta:set_int("depth", MAX_DEPTH)
end
end
end,
_sparkoption = {
enabled = true,
depth = MAX_DEPTH,
},
_sparkoutput = {
items = function(nodepos)
local meta = minetest.get_meta(nodepos)
return meta:get_inventory()
end,
reachedDepth = function(nodepos)
return 0
end
},
_sparkoutputtype = {
items = "Inventory",
reachedDepth = type(0)
}
})