diff --git a/machines/electric_machine.lua b/machines/electric_machine.lua index 7c2bf94..2134728 100644 --- a/machines/electric_machine.lua +++ b/machines/electric_machine.lua @@ -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) diff --git a/machines/machine.lua b/machines/machine.lua index 7a820c4..a33039b 100644 --- a/machines/machine.lua +++ b/machines/machine.lua @@ -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()