industrialtest/upgrades.lua

157 lines
5.6 KiB
Lua

-- IndustrialTest
-- Copyright (C) 2023 mrkubax10
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
local S=minetest.get_translator("industrialtest")
industrialtest.internal.applyUpgrade=function(pos,meta,stack)
local def=minetest.registered_items[stack:get_name()]
if def.groups._industrialtest_upgradeSpeed then
local speed=industrialtest.api.getMachineSpeed(meta)
meta:set_int("industrialtest.speed",math.min(4,speed+def.groups._industrialtest_upgradeSpeed))
elseif def.groups._industrialtest_upgradeTransformer then
local flows={
industrialtest.api.lvPowerFlow,
industrialtest.api.mvPowerFlow,
industrialtest.api.hvPowerFlow,
industrialtest.api.evPowerFlow,
industrialtest.api.ivPowerFlow
}
local machineFlow=meta:get_int("industrialtest.powerFlow")
local upgradedFlow=machineFlow
for _,flow in ipairs(flows) do
if flow>machineFlow then
upgradedFlow=flow
break
end
end
meta:set_int("industrialtest.powerFlow",upgradedFlow)
local networks=industrialtest.api.isAttachedToNetwork(meta)
if networks then
for _,network in ipairs(networks) do
industrialtest.api.createNetworkMapForNode(network)
end
end
elseif def.groups._industrialtest_upgradePowerStorage then
meta:set_int("industrialtest.powerCapacity",meta:get_int("industrialtest.powerCapacity")+10000)
local nodeDef=minetest.registered_nodes[minetest.get_node(pos).name]
if nodeDef._industrialtest_updateFormspec then
nodeDef._industrialtest_updateFormspec(pos)
end
local networks=industrialtest.api.isAttachedToNetwork(meta)
if networks then
for _,network in ipairs(networks) do
minetest.get_node_timer(network):start(industrialtest.updateDelay)
end
end
end
end
industrialtest.internal.removeUpgrade=function(pos,meta,stack)
local def=minetest.registered_items[stack:get_name()]
if def.groups._industrialtest_upgradeSpeed and meta:contains("industrialtest.speed") then
local speed=meta:get_int("industrialtest.speed")
meta:set_int("industrialtest.speed",math.max(1,speed-def.groups._industrialtest_upgradeSpeed))
elseif def.groups._industrialtest_upgradeTransformer then
local flows={
industrialtest.api.lvPowerFlow,
industrialtest.api.mvPowerFlow,
industrialtest.api.hvPowerFlow,
industrialtest.api.evPowerFlow,
industrialtest.api.ivPowerFlow
}
local machineFlow=meta:get_int("industrialtest.powerFlow")
local downgradedFlow=machineFlow
for i=#flows,1,-1 do
local flow=flows[i]
if flow<machineFlow then
downgradedFlow=flow
break
end
end
meta:set_int("industrialtest.powerFlow",downgradedFlow)
local networks=industrialtest.api.isAttachedToNetwork(meta)
if networks then
for _,network in ipairs(networks) do
minetest.get_node_timer(network):start(industrialtest.updateDelay)
end
end
elseif def.groups._industrialtest_upgradePowerStorage then
meta:set_int("industrialtest.powerCapacity",meta:get_int("industrialtest.powerCapacity")-10000)
meta:set_int("industrialtest.powerAmount",math.min(meta:get_int("industrialtest.powerAmount"),meta:get_int("industrialtest.powerCapacity")))
local nodeDef=minetest.registered_nodes[minetest.get_node(pos).name]
if nodeDef._industrialtest_updateFormspec then
nodeDef._industrialtest_updateFormspec(pos)
end
end
end
local function registerMachineUpgrade(config)
minetest.register_craftitem("industrialtest:"..config.name,{
description=config.displayName,
inventory_image="industrialtest_"..config.name..".png",
groups={
_industrialtest_machineUpgrade=1,
_industrialtest_upgradeSpeed=config.speed or nil,
_industrialtest_upgradeTransformer=config.transformer or nil,
_industrialtest_upgradePowerStorage=config.powerStorage or nil,
}
})
end
registerMachineUpgrade({
name="overclocker_upgrade",
displayName=S("Overclocker Upgrade"),
speed=1
})
minetest.register_craft({
type="shaped",
output="industrialtest:overclocker_upgrade",
recipe={
{"industrialtest:coolant_cell","industrialtest:coolant_cell","industrialtest:coolant_cell"},
{"industrialtest:insulated_copper_cable","industrialtest:electronic_circuit","industrialtest:insulated_copper_cable"}
}
})
registerMachineUpgrade({
name="transformer_upgrade",
displayName=S("Transformer Upgrade"),
transformer=1
})
minetest.register_craft({
type="shaped",
output="industrialtest:transformer_upgrade",
recipe={
{industrialtest.elementKeys.glass,industrialtest.elementKeys.glass,industrialtest.elementKeys.glass},
{"industrialtest:insulated_gold_cable","industrialtest:mv_transformer","industrialtest:insulated_gold_cable"},
{industrialtest.elementKeys.glass,"industrialtest:electronic_circuit",industrialtest.elementKeys.glass}
}
})
registerMachineUpgrade({
name="power_storage_upgrade",
displayName=S("Power Storage Upgrade"),
powerStorage=1
})
minetest.register_craft({
type="shaped",
output="industrialtest:power_storage_upgrade",
recipe={
{"group:wood","group:wood","group:wood"},
{"industrialtest:insulated_copper_cable","industrialtest:re_battery","industrialtest:insulated_copper_cable"},
{"group:wood","industrialtest:electronic_circuit","group:wood"}
}
})