Optimize electric network operations a little
This commit is contained in:
parent
6e2a3c22cf
commit
752fe4f192
@ -76,17 +76,16 @@ function industrialtest.api.powerFlow(pos,sides,flowOverride)
|
||||
transferred=true
|
||||
end
|
||||
local def=minetest.registered_nodes[minetest.get_node(endpoint.position).name]
|
||||
if def then
|
||||
local updateFormspec=def._industrialtest_updateFormspec
|
||||
if updateFormspec then
|
||||
updateFormspec(endpoint.position)
|
||||
end
|
||||
local onPowerFlow=def._industrialtest_onPowerFlow
|
||||
if onPowerFlow and transferredPower>0 then
|
||||
onPowerFlow(endpoint.position,industrialtest.api.getOppositeSide(endpoint.side),transferredPower)
|
||||
if def and def._industrialtest_self then
|
||||
def._industrialtest_self:updateFormspec(endpoint.position)
|
||||
if def._industrialtest_self.onPowerFlow and transferredPower>0 then
|
||||
def._industrialtest_self:onPowerFlow(endpoint.position,industrialtest.api.getOppositeSide(endpoint.side),transferredPower)
|
||||
end
|
||||
def._industrialtest_self:triggerIfNeeded(endpoint.position)
|
||||
else
|
||||
-- Support for bare definitions that don't use industrialtest pseudo-OOP
|
||||
minetest.get_node_timer(endpoint.position):start(industrialtest.updateDelay)
|
||||
end
|
||||
minetest.get_node_timer(endpoint.position):start(industrialtest.updateDelay)
|
||||
if not industrialtest.api.isFullyCharged(endpointMeta) then
|
||||
roomAvailable=true
|
||||
end
|
||||
|
@ -22,6 +22,8 @@ function industrialtest.ActivatedElectricMachine.onTimer(self,pos,elapsed)
|
||||
return result or result2
|
||||
end
|
||||
|
||||
industrialtest.ActivatedElectricMachine.canUpdate=industrialtest.ActivatedMachine.canUpdate
|
||||
|
||||
industrialtest.ActivatedElectricMachine.register=industrialtest.ActivatedMachine.register
|
||||
|
||||
industrialtest.ActivatedElectricMachine.createDefinitionTable=industrialtest.ActivatedMachine.createDefinitionTable
|
||||
|
@ -16,6 +16,10 @@
|
||||
|
||||
industrialtest.ActivatedMachine=table.copy(industrialtest.Machine)
|
||||
|
||||
function industrialtest.ActivatedMachine.canUpdate(self,pos)
|
||||
return self:shouldActivate(pos)
|
||||
end
|
||||
|
||||
function industrialtest.ActivatedMachine.onTimer(self,pos,elapsed)
|
||||
local result=industrialtest.Machine.onTimer(self,pos,elapsed)
|
||||
|
||||
|
@ -116,6 +116,20 @@ function industrialtest.Machine.allowMetadataInventoryPut(self,pos,listname,inde
|
||||
return industrialtest.Machine.allowMetadataInventoryPut(self,pos,listname,index,stack,player)
|
||||
end
|
||||
|
||||
function industrialtest.ElectricMachine.requestPower(self,pos)
|
||||
if not self.hasPowerOutput then
|
||||
return
|
||||
end
|
||||
local meta=minetest.get_meta(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)
|
||||
end
|
||||
end
|
||||
|
||||
function industrialtest.ElectricMachine.powerExchange(self,pos)
|
||||
local meta=minetest.get_meta(pos)
|
||||
local shouldRerunTimer=false
|
||||
@ -124,7 +138,13 @@ function industrialtest.ElectricMachine.powerExchange(self,pos)
|
||||
local networks=industrialtest.api.isAttachedToNetwork(meta)
|
||||
if networks then
|
||||
for _,network in ipairs(networks) do
|
||||
minetest.get_node_timer(network):start(industrialtest.updateDelay)
|
||||
local def=minetest.registered_nodes[minetest.get_node(network).name]
|
||||
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(network):start(industrialtest.updateDelay)
|
||||
end
|
||||
end
|
||||
end
|
||||
shouldRerunTimer=shouldRerunTimer or not industrialtest.api.isFullyCharged(meta)
|
||||
|
@ -60,6 +60,18 @@ function industrialtest.Machine.updateFormspec(self,pos)
|
||||
meta:set_string("formspec",self:getFormspec(pos))
|
||||
end
|
||||
|
||||
function industrialtest.Machine.canUpdate(self,pos)
|
||||
return false
|
||||
end
|
||||
|
||||
function industrialtest.Machine.triggerIfNeeded(self,pos)
|
||||
local timer=minetest.get_node_timer(pos)
|
||||
if not timer:is_started() and self:canUpdate(pos) then
|
||||
minetest.debug("updating "..minetest.serialize(pos))
|
||||
timer:start(industrialtest.updateDelay)
|
||||
end
|
||||
end
|
||||
|
||||
function industrialtest.Machine.onTimer(self,pos,elapsed)
|
||||
local meta=minetest.get_meta(pos)
|
||||
local inv=meta:get_inventory()
|
||||
|
Loading…
x
Reference in New Issue
Block a user