Implement RE-Battery, generator fixes

This commit is contained in:
2023-03-03 22:28:05 +01:00
parent 5ffa07e59b
commit 3671e96a18
6 changed files with 114 additions and 30 deletions

36
api.lua
View File

@@ -23,7 +23,7 @@ industrialtest.api.addPowerStorage=function(meta,capacity,flow,ioConfig)
meta:set_string("industrialtest.ioConfig",ioConfig)
end
industrialtest.api.hasPowerStorage=function(meta)
local values={"industrialtest.powerCapacity","industrialtest.powerFlow","industrialtest.powerAmount"}
local values={"industrialtest.powerCapacity","industrialtest.powerFlow","industrialtest.powerAmount","industrialtest.ioConfig"}
for _,value in ipairs(values) do
if not meta:contains(value) then
return false
@@ -45,6 +45,33 @@ industrialtest.api.addPower=function(meta,amount)
meta:set_int("industrialtest.powerAmount",powerAmount+amount)
return amount
end
industrialtest.api.addPowerToItem=function(itemstack,amount)
local meta=itemstack:get_meta()
if not industrialtest.api.hasPowerStorage(meta) then
return 0
end
local added=industrialtest.api.addPower(meta,amount)
itemstack:set_wear(65535-meta:get_int("industrialtest.powerAmount")/meta:get_int("industrialtest.powerCapacity")*65535)
return added
end
industrialtest.api.transferPower=function(srcMeta,destMeta,amount)
local currentFlow=math.min(srcMeta:get_int("industrialtest.powerAmount"),amount)
if currentFlow==0 then
return 0
end
local actualFlow=industrialtest.api.addPower(destMeta,currentFlow)
srcMeta:set_int("industrialtest.powerAmount",srcMeta:get_int("industrialtest.powerAmount")-actualFlow)
return actualFlow
end
industrialtest.api.transferPowerToItem=function(srcMeta,itemstack,amount)
local currentFlow=math.min(srcMeta:get_int("industrialtest.powerAmount"),amount)
if currentFlow==0 then
return 0
end
local actualFlow=industrialtest.api.addPowerToItem(itemstack,currentFlow)
srcMeta:set_int("industrialtest.powerAmount",srcMeta:get_int("industrialtest.powerAmount")-actualFlow)
return actualFlow
end
industrialtest.api.powerFlow=function(pos)
local meta=minetest.get_meta(pos)
if not industrialtest.api.hasPowerStorage(meta) then
@@ -78,11 +105,6 @@ industrialtest.api.powerFlow=function(pos)
local powerDistribution=math.floor(powerFlow/neighboursContainingPower)
-- TODO: if supplying machine power flow is too large for receiving machine to handle then that machine should explode
for _,value in ipairs(neighbours) do
local currentFlow=math.min(meta:get_int("industrialtest.powerAmount"),powerDistribution)
if currentFlow==0 then
break
end
local actualFlow=industrialtest.api.addPower(value,currentFlow)
meta:set_int("industrialtest.powerAmount",meta:get_int("industrialtest.powerAmount")-actualFlow)
industrialtest.api.transferPower(meta,value,powerDistribution)
end
end