Mindustry

Mindustry

Not enough ratings
Control_Production
   
Award
Favorite
Favorited
Unfavorite
Tags: schematic
File Size
Posted
Updated
1.197 KB
25 Dec, 2020 @ 2:50pm
26 Dec, 2020 @ 11:24am
2 Change Notes ( view )

Subscribe to download
Control_Production

Description
Support dual delivery between core and vault. Bind to unloaders for inputs and sorters for outputs. Use zenith for delivery.

op floor x @thisx 0 op floor y @thisy 0 op mul id x 10000 op add id id y print id print ": Initialize" printflush message1 set unit @zenith ubind unit sensor health @unit @health op equal ifCond health 0 jump 13 equal ifCond 0 end sensor enabled switch1 @enabled sensor flag @unit @flag op equal ifCond enabled 1 jump 20 equal ifCond 0 op equal ifCond flag 0 jump 20 equal ifCond 0 ucontrol flag id 0 0 0 0 op equal ifCond enabled 0 jump 26 equal ifCond 0 op equal ifCond flag id jump 26 equal ifCond 0 ucontrol flag 0 0 0 0 0 end set buffer 300 set radius 7 sensor carryCap @unit @itemCapacity ulocate building core false @copper coreX coreY found core op equal ifCond found 0 jump 33 equal ifCond 0 end sensor health @unit @health op equal ifCond health 0 jump 37 equal ifCond 0 end sensor flag @unit @flag op notEqual ifCond flag id jump 41 equal ifCond 0 end set vault 0 set i 0 getlink block i sensor blockType block @type op equal ifCond blockType @vault jump 51 equal ifCond 0 set vault block sensor blockX vault @x sensor blockY vault @y sensor blockCap vault @itemCapacity op add i i 1 jump 43 lessThan i @links op equal ifCond vault 0 jump 57 equal ifCond 0 ucontrol flag 0 0 0 0 0 end sensor carryItem @unit @firstItem sensor carryCount @unit @totalItems set isInputItem 0 set isOutputItem 0 set work 0 set maxDiff 0 set maxInputItem 0 set i 0 getlink block i sensor blockType block @type op equal ifCond blockType @unloader jump 83 equal ifCond 0 sensor item block @config sensor blockCount vault item sensor coreCount core item op sub diff buffer blockCount op greaterThanEq cond coreCount carryCap op mul diff cond diff op greaterThan ifCond diff maxDiff jump 80 equal ifCond 0 set maxDiff diff set maxInputItem item set work 1 op equal ifCond carryItem item jump 83 equal ifCond 0 set isInputItem 1 op add i i 1 jump 65 lessThan i @links set maxDiff 0 set maxOutputItem 0 set i 0 getlink block i sensor blockType block @type op equal ifCond blockType @sorter jump 103 equal ifCond 0 sensor item block @config sensor blockCount vault item op sub diff blockCount carryCap op greaterThan ifCond diff maxDiff jump 100 equal ifCond 0 set maxDiff diff set maxOutputItem item set work 1 op equal ifCond carryItem item jump 103 equal ifCond 0 set isOutputItem 1 op add i i 1 jump 88 lessThan i @links print id print ": " op equal ifCond work 0 jump 122 equal ifCond 0 op greaterThan ifCond carryCount 0 jump 117 equal ifCond 0 ucontrol approach coreX coreY radius 0 0 ucontrol itemDrop core carryCount 0 0 0 print "Drop " print carryItem print " to core" printflush message1 op equal ifCond carryCount 0 jump 122 equal ifCond 0 ucontrol stop 0 0 0 0 0 print "Stop" printflush message1 op equal ifCond work 1 jump 178 equal ifCond 0 op greaterThan ifCond carryCount 0 jump 142 equal ifCond 0 op equal ifCond isInputItem 1 jump 134 equal ifCond 0 ucontrol approach blockX blockY radius 0 0 ucontrol itemDrop vault carryCount 0 0 0 print "Drop " print carryItem print " to vault" printflush message1 op equal ifCond isInputItem 0 jump 142 equal ifCond 0 ucontrol approach coreX coreY radius 0 0 ucontrol itemDrop core carryCount 0 0 0 print "Drop " print carryItem print " to core" printflush message1 op equal ifCond carryCount 0 jump 178 equal ifCond 0 sensor unitX @unit @x sensor unitY @unit @y op sub diffX unitX coreX op sub diffY unitY coreY op dst distToCore diffX diffY op sub diffX unitX blockX op sub diffY unitY blockY op dst distToVault diffX diffY op lessThanEq coreIsCloser distToCore distToVault op greaterThan vaultIsCloser distToCore distToVault op notEqual haveInput maxInputItem 0 op notEqual haveOutput maxOutputItem 0 op equal noInput maxInputItem 0 op equal noOutput maxOutputItem 0 op or cond coreIsCloser noOutput op land cond cond haveInput op equal ifCond cond 1 jump 168 equal ifCond 0 ucontrol approach coreX coreY radius 0 0 ucontrol itemTake core maxInputItem carryCap 0 0 print "Take " print maxInputItem print " from core" printflush message1 op or cond vaultIsCloser noInput op land cond cond haveOutput op equal ifCond cond 1 jump 178 equal ifCond 0 ucontrol approach blockX blockY radius 0 0 ucontrol itemTake vault maxOutputItem carryCap 0 0 print "Take " print maxOutputItem print " from vault" printflush message1 set nop 0 jump 13 always x false end