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")