Mesecons compatibility: Rotary Macerator

This commit is contained in:
2024-03-24 11:04:07 +01:00
parent e3e00e59a1
commit f561048339
5 changed files with 67 additions and 3 deletions

View File

@@ -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