From ca99ab38b5fbc1576de6de6c04903ab7414dac54 Mon Sep 17 00:00:00 2001 From: mrkubax10 Date: Wed, 8 Jan 2025 22:47:11 +0100 Subject: [PATCH] Refactor Canning Machine --- machines/canning_machine.lua | 248 +++++++++++++++++------------------ 1 file changed, 117 insertions(+), 131 deletions(-) diff --git a/machines/canning_machine.lua b/machines/canning_machine.lua index 8421c53..6f78634 100644 --- a/machines/canning_machine.lua +++ b/machines/canning_machine.lua @@ -15,15 +15,66 @@ -- along with this program. If not, see . local S=minetest.get_translator("industrialtest") -local canningMachine={} +industrialtest.CanningMachine=table.copy(industrialtest.ActivatedElectricMachine) +industrialtest.internal.unpackTableInto(industrialtest.CanningMachine,{ + name="industrialtest:canning_machine", + description=S("Canning Machine"), + tiles={ + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_machine_block.png^industrialtest_canning_machine_front.png", + "industrialtest_machine_block.png" + }, + sounds="metal", + facedir=true, + storageLists={ + "src", + "dst", + "leftover", + "upgrades", + "powerStorage" + }, + powerLists={"powerStorage"}, + active={ + tiles={ + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_machine_block.png^industrialtest_canning_machine_front_active.png", + "industrialtest_machine_block.png" + } + }, + capacity=industrialtest.api.lvPowerFlow*2, + flow=industrialtest.api.lvPowerFlow, + ioConfig="iiiiii", + requiresWrench=true, + hasPowerInput=true, + _opPower=200, + _canningTime=5 +}) -canningMachine.opPower=200 -canningMachine.canningTime=5 +function industrialtest.CanningMachine.onConstruct(self,pos) + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + inv:set_size("src",1) + inv:set_size("dst",1) + inv:set_size("leftover",1) + inv:set_size("powerStorage",1) + inv:set_size("upgrades",4) + meta:set_float("srcTime",0) + industrialtest.ActivatedElectricMachine.onConstruct(self,pos) +end -canningMachine.getFormspec=function(pos) +function industrialtest.CanningMachine.getFormspec(self,pos) + local parentFormspec=industrialtest.ActivatedElectricMachine.getFormspec(self,pos) local meta=minetest.get_meta(pos) local powerPercent=meta:get_int("industrialtest.powerAmount")/meta:get_int("industrialtest.powerCapacity")*100 - local srcPercent=meta:get_float("srcTime")/canningMachine.canningTime*100 + local srcPercent=meta:get_float("srcTime")/self._canningTime*100 local formspec={ "list[context;src;3.4,1.8;1,1]", industrialtest.internal.getItemSlotBg(3.4,1.8,1,1), @@ -42,44 +93,10 @@ canningMachine.getFormspec=function(pos) "listring[context;src]", "listring[context;dst]" } - return table.concat(formspec,"") + return parentFormspec..table.concat(formspec,"") end -canningMachine.onConstruct=function(pos,meta,inv) - inv:set_size("src",1) - inv:set_size("dst",1) - inv:set_size("leftover",1) - inv:set_size("powerStorage",1) - inv:set_size("upgrades",4) - meta:set_float("srcTime",0) -end - -canningMachine.onTimer=function(pos,elapsed,meta,inv) - local shouldRerunTimer=false - local shouldUpdateFormspec=false - local fuelSlot=inv:get_stack("src",1) - local targetSlot=inv:get_stack("dst",1) - local leftoverSlot=inv:get_stack("leftover",1) - local powerStorageSlot=inv:get_stack("powerStorage",1) - local targetMeta=targetSlot:get_meta() - - shouldRerunTimer,shouldUpdateFormspec=industrialtest.internal.chargeFromPowerStorageItem(meta,inv) - - local def=fuelSlot:get_definition() - if not fuelSlot:is_empty() and not targetSlot:is_empty() and meta:get_int("industrialtest.powerAmount")>=canningMachine.opPower and (not def._industrialtest_emptyVariant or leftoverSlot:item_fits(ItemStack(def._industrialtest_emptyVariant))) and - (not industrialtest.api.itemHasFluidStorage(fuelSlot) or fuelSlot:get_meta():get_int("industrialtest.fluidAmount")>0) and targetMeta:get_int("industrialtest.fluidAmount")=self._opPower and (not def._industrialtest_emptyVariant or leftoverSlot:item_fits(ItemStack(def._industrialtest_emptyVariant))) and + (not industrialtest.api.itemHasFluidStorage(fuelSlot) or fuelSlot:get_meta():get_int("industrialtest.fluidAmount")>0) and targetMeta:get_int("industrialtest.fluidAmount")=self._opPower or industrialtest.api.isItemFluidStorageFull(targetSlot) then + meta:set_float("srcTime",0) + end + self:updateFormspec(pos) +end + +function industrialtest.CanningMachine.activeUpdate(self,pos,elapsed,meta,inv) local shouldUpdateFormspec=false local fuelSlot=inv:get_stack("src",1) local targetSlot=inv:get_stack("dst",1) local powerStorageSlot=inv:get_stack("powerStorage",1) - shouldRerunTimer,shouldUpdateFormspec=industrialtest.internal.chargeFromPowerStorageItem(meta,inv) - - if fuelSlot:is_empty() or targetSlot:is_empty() or meta:get_int("industrialtest.powerAmount")=canningMachine.opPower then - meta:set_float("srcTime",0) - end - minetest.swap_node(pos,{ - name="industrialtest:canning_machine", - param2=minetest.get_node(pos).param2 - }) - minetest.get_node_timer(pos):start(industrialtest.updateDelay) - return false,true - end - local fuelMeta=fuelSlot:get_meta() local targetMeta=targetSlot:get_meta() - if (industrialtest.api.itemHasFluidStorage(fuelSlot) and fuelMeta:get_int("industrialtest.fluidAmount")==0) or targetMeta:get_int("industrialtest.fluidAmount")==targetMeta:get_int("industrialtest.fluidCapacity") then - meta:set_float("srcTime",0) - minetest.swap_node(pos,{ - name="industrialtest:canning_machine", - param2=minetest.get_node(pos).param2 - }) - minetest.get_node_timer(pos):start(industrialtest.updateDelay) - return false,true - end - - local srcTime=meta:get_float("srcTime") - srcTime=srcTime+elapsed*industrialtest.api.getMachineSpeed(meta) - if srcTime>=canningMachine.canningTime then + local srcTime=meta:get_float("srcTime")+elapsed*industrialtest.api.getMachineSpeed(meta) + if srcTime>=self._canningTime then if industrialtest.api.itemHasFluidStorage(fuelSlot) then industrialtest.api.transferFluidToItem(fuelSlot,targetSlot,fuelMeta:get_int("industrialtest.fluidAmount")) inv:set_stack("src",1,fuelSlot) @@ -177,11 +212,6 @@ canningMachine.activeOnTimer=function(pos,elapsed,meta,inv) local def=fuelSlot:get_definition() local leftoverSlot=inv:get_stack("leftover",1) if targetMeta:get_int("industrialtest.fluidCapacity")-targetMeta:get_int("industrialtest.fluidAmount")