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
|
transferred=true
|
||||||
end
|
end
|
||||||
local def=minetest.registered_nodes[minetest.get_node(endpoint.position).name]
|
local def=minetest.registered_nodes[minetest.get_node(endpoint.position).name]
|
||||||
if def then
|
if def and def._industrialtest_self then
|
||||||
local updateFormspec=def._industrialtest_updateFormspec
|
def._industrialtest_self:updateFormspec(endpoint.position)
|
||||||
if updateFormspec then
|
if def._industrialtest_self.onPowerFlow and transferredPower>0 then
|
||||||
updateFormspec(endpoint.position)
|
def._industrialtest_self:onPowerFlow(endpoint.position,industrialtest.api.getOppositeSide(endpoint.side),transferredPower)
|
||||||
end
|
|
||||||
local onPowerFlow=def._industrialtest_onPowerFlow
|
|
||||||
if onPowerFlow and transferredPower>0 then
|
|
||||||
onPowerFlow(endpoint.position,industrialtest.api.getOppositeSide(endpoint.side),transferredPower)
|
|
||||||
end
|
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
|
end
|
||||||
minetest.get_node_timer(endpoint.position):start(industrialtest.updateDelay)
|
|
||||||
if not industrialtest.api.isFullyCharged(endpointMeta) then
|
if not industrialtest.api.isFullyCharged(endpointMeta) then
|
||||||
roomAvailable=true
|
roomAvailable=true
|
||||||
end
|
end
|
||||||
|
@ -22,6 +22,8 @@ function industrialtest.ActivatedElectricMachine.onTimer(self,pos,elapsed)
|
|||||||
return result or result2
|
return result or result2
|
||||||
end
|
end
|
||||||
|
|
||||||
|
industrialtest.ActivatedElectricMachine.canUpdate=industrialtest.ActivatedMachine.canUpdate
|
||||||
|
|
||||||
industrialtest.ActivatedElectricMachine.register=industrialtest.ActivatedMachine.register
|
industrialtest.ActivatedElectricMachine.register=industrialtest.ActivatedMachine.register
|
||||||
|
|
||||||
industrialtest.ActivatedElectricMachine.createDefinitionTable=industrialtest.ActivatedMachine.createDefinitionTable
|
industrialtest.ActivatedElectricMachine.createDefinitionTable=industrialtest.ActivatedMachine.createDefinitionTable
|
||||||
|
@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
industrialtest.ActivatedMachine=table.copy(industrialtest.Machine)
|
industrialtest.ActivatedMachine=table.copy(industrialtest.Machine)
|
||||||
|
|
||||||
|
function industrialtest.ActivatedMachine.canUpdate(self,pos)
|
||||||
|
return self:shouldActivate(pos)
|
||||||
|
end
|
||||||
|
|
||||||
function industrialtest.ActivatedMachine.onTimer(self,pos,elapsed)
|
function industrialtest.ActivatedMachine.onTimer(self,pos,elapsed)
|
||||||
local result=industrialtest.Machine.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)
|
return industrialtest.Machine.allowMetadataInventoryPut(self,pos,listname,index,stack,player)
|
||||||
end
|
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)
|
function industrialtest.ElectricMachine.powerExchange(self,pos)
|
||||||
local meta=minetest.get_meta(pos)
|
local meta=minetest.get_meta(pos)
|
||||||
local shouldRerunTimer=false
|
local shouldRerunTimer=false
|
||||||
@ -124,7 +138,13 @@ function industrialtest.ElectricMachine.powerExchange(self,pos)
|
|||||||
local networks=industrialtest.api.isAttachedToNetwork(meta)
|
local networks=industrialtest.api.isAttachedToNetwork(meta)
|
||||||
if networks then
|
if networks then
|
||||||
for _,network in ipairs(networks) do
|
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
|
||||||
end
|
end
|
||||||
shouldRerunTimer=shouldRerunTimer or not industrialtest.api.isFullyCharged(meta)
|
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))
|
meta:set_string("formspec",self:getFormspec(pos))
|
||||||
end
|
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)
|
function industrialtest.Machine.onTimer(self,pos,elapsed)
|
||||||
local meta=minetest.get_meta(pos)
|
local meta=minetest.get_meta(pos)
|
||||||
local inv=meta:get_inventory()
|
local inv=meta:get_inventory()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user