diff --git a/compat/mesecons.lua b/compat/mesecons.lua new file mode 100644 index 0000000..32db1fa --- /dev/null +++ b/compat/mesecons.lua @@ -0,0 +1,46 @@ +-- IndustrialTest +-- Copyright (C) 2024 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 . + +-- Rotary Macerator +local override={ + mesecons={ + effector={ + action_on=function(pos,node) + if node.name~="industrialtest:rotary_macerator" then + return + end + + local meta=minetest.get_meta(pos) + meta:set_int("maintainSpeed",1) + + local def=minetest.registered_nodes[node.name] + def._industrialtest_updateFormspec(pos) + + minetest.get_node_timer(pos):start(industrialtest.updateDelay) + end, + action_off=function(pos,node) + local meta=minetest.get_meta(pos) + meta:set_int("maintainSpeed",0) + + local def=minetest.registered_nodes[node.name] + def._industrialtest_updateFormspec(pos) + end + } + } +} + +minetest.override_item("industrialtest:rotary_macerator",override) +minetest.override_item("industrialtest:rotary_macerator_active",override) diff --git a/compatibility.lua b/compatibility.lua index 40b20f9..9b6efd4 100644 --- a/compatibility.lua +++ b/compatibility.lua @@ -46,6 +46,7 @@ elseif industrialtest.mclAvailable then industrialtest.mods.mclRubber=minetest.get_modpath("mcl_rubber") end industrialtest.mods.pipeworks=minetest.get_modpath("pipeworks") +industrialtest.mods.mesecons=minetest.get_modpath("mesecons") if industrialtest.mtgAvailable and not industrialtest.mods._3dArmor then error("IndustrialTest requires 3D Armor when used with Minetest Game") diff --git a/init.lua b/init.lua index ef79376..060fa8f 100644 --- a/init.lua +++ b/init.lua @@ -83,3 +83,6 @@ dofile(modpath.."/crafts.lua") if industrialtest.mods.pipeworks then dofile(modpath.."/compat/pipeworks.lua") end +if industrialtest.mods.mesecons then + dofile(modpath.."/compat/mesecons.lua") +end diff --git a/machines/rotary_macerator.lua b/machines/rotary_macerator.lua index 3ac915c..2007ec6 100644 --- a/machines/rotary_macerator.lua +++ b/machines/rotary_macerator.lua @@ -18,6 +18,7 @@ local S=minetest.get_translator("industrialtest") local rotaryMacerator={} rotaryMacerator.opPower=60 +rotaryMacerator.maintainSpeedOpPower=10 rotaryMacerator.getFormspec=function(pos) local meta=minetest.get_meta(pos) @@ -25,6 +26,7 @@ rotaryMacerator.getFormspec=function(pos) local maxSrcTime=meta:get_float("maxSrcTime") local srcPercent=maxSrcTime>0 and meta:get_float("srcTime")/maxSrcTime*100 or 0 local rpm=meta:get_int("rpm") + local buttonMaintainSpeedText=meta:get_int("maintainSpeed")==1 and S("Don't maintain speed") or S("Maintain speed") local formspec if industrialtest.mtgAvailable then formspec={ @@ -38,6 +40,7 @@ rotaryMacerator.getFormspec=function(pos) "list[context;dst;6,2.8;1,1;]", "list[context;upgrades;9,0.9;1,4]", "label[0.5,2.8;"..minetest.formspec_escape(S("Speed: @1",rpm)).."]", + "button[0.5,3.4;3,0.8;maintainSpeed;"..minetest.formspec_escape(buttonMaintainSpeedText).."]", "listring[context;src]", "listring[context;modifier]", "listring[context;powerStorage]", @@ -61,6 +64,7 @@ rotaryMacerator.getFormspec=function(pos) "list[context;upgrades;9,0.9;1,4]", mcl_formspec.get_itemslot_bg(9,0.9,1,4), "label[0.5,2.8;"..minetest.formspec_escape(S("Speed: @1",rpm)).."]", + "button[0.5,3.4;3,0.8;maintainSpeed;"..minetest.formspec_escape(buttonMaintainSpeedText).."]", "listring[context;src]", "listring[context;modifier]", "listring[context;powerStorage]", @@ -80,6 +84,7 @@ rotaryMacerator.onConstruct=function(pos,meta,inv) meta:set_int("rpm",0) meta:set_float("srcTime",0) meta:set_float("maxSrcTime",0) + meta:set_int("maintainSpeed",0) end rotaryMacerator.onTimer=function(pos,elapsed,meta,inv) @@ -88,12 +93,21 @@ rotaryMacerator.onTimer=function(pos,elapsed,meta,inv) local srcSlot=inv:get_stack("src",1) local modifierSlot=inv:get_stack("modifier",1) local dstSlot=inv:get_stack("dst",1) - local powerAmount=meta:get_int("industrialtest.powerAmount") local rpm=meta:get_int("rpm") + local maintainSpeed=meta:get_int("maintainSpeed") shouldRerunTimer,shouldUpdateFormspec=industrialtest.internal.chargeFromPowerStorageItem(meta,inv) + local powerAmount=meta:get_int("industrialtest.powerAmount") - if rpm>0 then + if maintainSpeed==1 and powerAmount>=rotaryMacerator.maintainSpeedOpPower then + local newRpm=math.max(rpm+10*elapsed,0) + if newRpm>rpm then + meta:set_int("rpm",newRpm) + shouldUpdateFormspec=true + end + industrialtest.api.addPower(meta,-rotaryMacerator.maintainSpeedOpPower) + shouldRerunTimer=true + elseif rpm>0 then meta:set_int("rpm",math.max(rpm-1000*elapsed,0)) shouldRerunTimer=shouldRerunTimer or rpm>0 shouldUpdateFormspec=true diff --git a/mod.conf b/mod.conf index a2b2165..0107c54 100644 --- a/mod.conf +++ b/mod.conf @@ -1,5 +1,5 @@ name=industrialtest description=Adds various machinery -optional_depends=default,bucket,3d_armor,mcl_core,mcl_copper,mcl_armor,mcl_deepslate,mcl_nether,mcl_buckets,mcl_util,mcl_dye,mcl_rubber,pipeworks +optional_depends=default,bucket,3d_armor,mcl_core,mcl_copper,mcl_armor,mcl_deepslate,mcl_nether,mcl_buckets,mcl_util,mcl_dye,mcl_rubber,pipeworks,mesecons author=IndustrialTest Team title=IndustrialTest