Use Machine.triggerIfNeeded to request power

This commit is contained in:
mrkubax10 2025-03-16 11:35:53 +01:00
parent 8e30412515
commit abfb829cea
2 changed files with 26 additions and 7 deletions

View File

@ -27,7 +27,13 @@ function industrialtest.ElectricMachine.onConstruct(self,pos)
local connectionMeta=minetest.get_meta(conn)
if industrialtest.api.isNetworkMaster(connectionMeta) then
industrialtest.api.createNetworkMapForNode(conn)
minetest.get_node_timer(conn):start(industrialtest.updateDelay)
local def=minetest.get_node(conn)
if def and def._industrialtest_self then
def._industrialtest_self:requestPower(conn)
else
-- Support for bare definitions that don't use industrialtest pseudo-OOP
minetest.get_node_timer(conn):start(industrialtest.updateDelay)
end
else
local def=minetest.registered_nodes[minetest.get_node(conn).name]
if def.groups._industrialtest_cable then
@ -35,7 +41,13 @@ function industrialtest.ElectricMachine.onConstruct(self,pos)
if networks then
for _,network in ipairs(networks) do
industrialtest.api.createNetworkMapForNode(network)
minetest.get_node_timer(network):start(industrialtest.updateDelay)
local def=minetest.get_node(network)
if def and def._industrialtest_self then
def._industrialtest_self:requestPower(network)
else
-- Support for bare definitions that don't use industrialtest pseudo-OOP
minetest.get_node_timer(conn):start(industrialtest.updateDelay)
end
end
end
end
@ -124,10 +136,11 @@ function industrialtest.ElectricMachine.requestPower(self,pos)
if meta:get_int("industrialtest.powerAmount")<=0 then
return
end
local spaceAvailable,flowTransferred=industrialtest.api.powerFlow(pos)
if (spaceAvailable and meta:get_int("industrialtest.powerAmount")>0) or self:canUpdate(pos) then
minetest.get_node_timer(pos):start(industrialtest.updateDelay)
local _,flowTransferred=industrialtest.api.powerFlow(pos)
if flowTransferred then
self:updateFormspec(pos)
end
self:triggerIfNeeded(pos)
end
function industrialtest.ElectricMachine.powerExchange(self,pos)

View File

@ -64,14 +64,20 @@ function industrialtest.Machine.canUpdate(self,pos)
return false
end
function industrialtest.Machine.triggerIfNeeded(self,pos)
function industrialtest.Machine.trigger(self,pos)
local timer=minetest.get_node_timer(pos)
if not timer:is_started() and self:canUpdate(pos) then
if not timer:is_started() then
minetest.debug("updating "..minetest.serialize(pos))
timer:start(industrialtest.updateDelay)
end
end
function industrialtest.Machine.triggerIfNeeded(self,pos)
if self:canUpdate(pos) then
self:trigger(pos)
end
end
function industrialtest.Machine.onTimer(self,pos,elapsed)
local meta=minetest.get_meta(pos)
local inv=meta:get_inventory()