Refactor transformers

This commit is contained in:
mrkubax10 2025-04-03 17:34:40 +02:00
parent fd772f3c55
commit 30d5ebffe5
2 changed files with 123 additions and 98 deletions

View File

@ -28,7 +28,7 @@ function industrialtest.api.addPowerStorage(meta,capacity,flow,ioConfig)
meta:set_int("industrialtest.powerCapacity",capacity)
meta:set_int("industrialtest.powerFlow",flow)
meta:set_int("industrialtest.powerAmount",0)
meta:set_int("industrialtest.extendedIoConfig",type(ioConfig)~="string")
meta:set_int("industrialtest.extendedIoConfig",type(ioConfig)~="string" and 1 or 0)
meta:set_string("industrialtest.ioConfig",type(ioConfig)=="string" and ioConfig or minetest.serialize(ioConfig))
end
@ -100,7 +100,7 @@ function industrialtest.api.isPowerInput(meta,side)
local mode=string.sub(ioConfig,side,side)
return (mode=="i" or mode=="a")
else
return (ioConfig[side].direction=="i" or ioConfig[side].direction=="a")
return (ioConfig[side].mode=="i" or ioConfig[side].mode=="a")
end
end
@ -114,7 +114,7 @@ function industrialtest.api.isPowerOutput(meta,side)
local mode=string.sub(ioConfig,side,side)
return (mode=="o" or mode=="a")
else
return (ioConfig[side].direction=="o" or ioConfig[side].direction=="a")
return (ioConfig[side].mode=="o" or ioConfig[side].mode=="a")
end
end

View File

@ -15,81 +15,70 @@
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
local S=minetest.get_translator("industrialtest")
local transformer={}
transformer.onPowerFlow=function(pos,side,amount)
local normalized=industrialtest.api.normalizeSide(pos,side)
local def=minetest.registered_nodes[minetest.get_node(pos).name]
if normalized~=5 and amount>def._industrialtest_lowerFlow then
minetest.remove_node(pos)
industrialtest.internal.explode(pos,2)
end
end
transformer.onTimer=function(pos,elapsed,meta)
local powerAmount=meta:get_int("industrialtest.powerAmount")
local def=minetest.registered_nodes[minetest.get_node(pos).name]
local afterFlowLower=false
local afterFlowUpper=false
if powerAmount>=def._industrialtest_lowerFlow then
afterFlowLower,_=industrialtest.api.powerFlow(pos,{
[1]=true,
[2]=true,
[3]=true,
[4]=true,
[6]=true
},def._industrialtest_lowerFlow)
end
if powerAmount>=def._industrialtest_upperFlow then
afterFlowUpper,_=industrialtest.api.powerFlow(pos,{[5]=true},def._industrialtest_upperFlow)
end
return powerAmount>0 and (afterFlowLower or afterFlowUpper),false
end
local function registerTransformer(config)
industrialtest.internal.registerMachine({
name=config.name,
displayName=config.displayName,
capacity=industrialtest.api.ivPowerFlow,
flow=industrialtest.api.ivPowerFlow,
ioConfig="aaaaaa",
storageSlots={},
powerSlots={},
sounds=config.sounds,
groups={
_industrialtest_hasPowerOutput=1,
_industrialtest_hasPowerInput=1,
},
customKeys={
tiles={
config.machineBlockTexture.."^industrialtest_"..config.name.."_side.png",
config.machineBlockTexture.."^industrialtest_"..config.name.."_side.png",
config.machineBlockTexture.."^industrialtest_"..config.name.."_side.png",
config.machineBlockTexture.."^industrialtest_"..config.name.."_side.png",
config.machineBlockTexture.."^industrialtest_"..config.name.."_side.png",
config.machineBlockTexture.."^industrialtest_"..config.name.."_front.png"
},
paramtype2="facedir",
legacy_facedir_simple=true,
_industrialtest_lowerFlow=config.lowerFlow,
_industrialtest_upperFlow=config.upperFlow,
_industrialtest_onPowerFlow=transformer.onPowerFlow
},
requiresWrench=config.requiresWrench,
withoutFormspec=true,
onTimer=transformer.onTimer
})
end
registerTransformer({
name="lv_transformer",
displayName=S("LV Transformer"),
machineBlockTexture="industrialtest_wood_machine_block.png",
requiresWrench=false,
lowerFlow=industrialtest.api.lvPowerFlow,
upperFlow=industrialtest.api.mvPowerFlow,
sounds="wood"
industrialtest.Transformer=table.copy(industrialtest.ElectricMachine)
industrialtest.internal.unpackTableInto(industrialtest.Transformer,{
withoutFormspec=true,
facedir=true,
storageLists={},
powerLists={},
hasPowerInput=true,
hasPowerOutput=true
})
function industrialtest.Transformer.register(self)
self.ioConfig={
{
mode="a",
flow=self.lowerFlow
},
{
mode="a",
flow=self.lowerFlow
},
{
mode="a",
flow=self.lowerFlow
},
{
mode="a",
flow=self.lowerFlow
},
{
mode="a",
flow=self.flow
},
{
mode="a",
flow=self.lowerFlow
}
}
industrialtest.ElectricMachine.register(self)
end
function industrialtest.Transformer.onPowerFlow(self,pos)
self:trigger(pos)
end
industrialtest.LVTransformer=table.copy(industrialtest.Transformer)
industrialtest.internal.unpackTableInto(industrialtest.LVTransformer,{
name="industrialtest:lv_transformer",
description=S("LV Transformer"),
sounds="wood",
tiles={
"industrialtest_wood_machine_block.png^industrialtest_lv_transformer_side.png",
"industrialtest_wood_machine_block.png^industrialtest_lv_transformer_side.png",
"industrialtest_wood_machine_block.png^industrialtest_lv_transformer_side.png",
"industrialtest_wood_machine_block.png^industrialtest_lv_transformer_side.png",
"industrialtest_wood_machine_block.png^industrialtest_lv_transformer_side.png",
"industrialtest_wood_machine_block.png^industrialtest_lv_transformer_front.png"
},
capacity=industrialtest.api.mvPowerFlow,
flow=industrialtest.api.mvPowerFlow,
lowerFlow=industrialtest.api.lvPowerFlow
})
industrialtest.LVTransformer:register()
minetest.register_craft({
type="shaped",
output="industrialtest:lv_transformer",
@ -100,15 +89,27 @@ minetest.register_craft({
}
})
registerTransformer({
name="mv_transformer",
displayName=S("MV Transformer"),
machineBlockTexture="industrialtest_machine_block.png",
industrialtest.MVTransformer=table.copy(industrialtest.Transformer)
industrialtest.internal.unpackTableInto(industrialtest.MVTransformer,{
name="industrialtest:mv_transformer",
description=S("MV Transformer"),
sounds="metal",
requiresWrench=true,
lowerFlow=industrialtest.api.mvPowerFlow,
upperFlow=industrialtest.api.hvPowerFlow,
sounds="metal"
tiles={
"industrialtest_machine_block.png^industrialtest_mv_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_mv_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_mv_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_mv_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_mv_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_mv_transformer_front.png"
},
capacity=industrialtest.api.hvPowerFlow,
flow=industrialtest.api.hvPowerFlow,
lowerFlow=industrialtest.api.mvPowerFlow
})
industrialtest.MVTransformer:register()
minetest.register_craft({
type="shaped",
output="industrialtest:mv_transformer",
@ -119,15 +120,27 @@ minetest.register_craft({
}
})
registerTransformer({
name="hv_transformer",
displayName=S("HV Transformer"),
machineBlockTexture="industrialtest_machine_block.png",
industrialtest.HVTransformer=table.copy(industrialtest.Transformer)
industrialtest.internal.unpackTableInto(industrialtest.HVTransformer,{
name="industrialtest:hv_transformer",
description=S("HV Transformer"),
sounds="metal",
requiresWrench=true,
lowerFlow=industrialtest.api.hvPowerFlow,
upperFlow=industrialtest.api.evPowerFlow,
sounds="metal"
tiles={
"industrialtest_machine_block.png^industrialtest_hv_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_hv_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_hv_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_hv_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_hv_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_hv_transformer_front.png"
},
capacity=industrialtest.api.evPowerFlow,
flow=industrialtest.api.evPowerFlow,
lowerFlow=industrialtest.api.hvPowerFlow
})
industrialtest.HVTransformer:register()
minetest.register_craft({
type="shaped",
output="industrialtest:hv_transformer",
@ -138,15 +151,27 @@ minetest.register_craft({
}
})
registerTransformer({
name="ev_transformer",
displayName=S("EV Transformer"),
machineBlockTexture="industrialtest_machine_block.png",
industrialtest.EVTransformer=table.copy(industrialtest.Transformer)
industrialtest.internal.unpackTableInto(industrialtest.EVTransformer,{
name="industrialtest:ev_transformer",
description=S("EV Transformer"),
sounds="metal",
requiresWrench=true,
lowerFlow=industrialtest.api.evPowerFlow,
upperFlow=industrialtest.api.ivPowerFlow,
sounds="metal"
tiles={
"industrialtest_machine_block.png^industrialtest_ev_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_ev_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_ev_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_ev_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_ev_transformer_side.png",
"industrialtest_machine_block.png^industrialtest_ev_transformer_front.png"
},
capacity=industrialtest.api.ivPowerFlow,
flow=industrialtest.api.ivPowerFlow,
lowerFlow=industrialtest.api.evPowerFlow
})
industrialtest.EVTransformer:register()
minetest.register_craft({
type="shaped",
output="industrialtest:ev_transformer",