73 lines
1.4 KiB
Plaintext
73 lines
1.4 KiB
Plaintext
/// Laree script V1
|
|
|
|
device self = "db";
|
|
device larre = "d0";
|
|
device exportChute = "d1";
|
|
|
|
const TOTAL_SLOTS = 19;
|
|
const EXPORT_CHUTE = 1;
|
|
const START_STATION = 2;
|
|
|
|
let currentIndex = 0;
|
|
|
|
/// Waits for the larre to be idle before continuing
|
|
fn waitForIdle() {
|
|
yield();
|
|
while (!larre.Idle) {
|
|
yield();
|
|
}
|
|
}
|
|
|
|
/// Instructs the Larre to go to the chute and deposit
|
|
/// what is currently in its arm
|
|
fn deposit() {
|
|
larre.Setting = EXPORT_CHUTE;
|
|
waitForIdle();
|
|
larre.Activate = true;
|
|
waitForIdle();
|
|
exportChute.Open = false;
|
|
}
|
|
|
|
/// This function is responsible for checking the plant under
|
|
/// the larre at this index, and harvesting if applicable
|
|
fn checkAndHarvest(currentIndex) {
|
|
if (currentIndex <= EXPORT_CHUTE || ls(larre, 255, "Seeding") < 1) {
|
|
return;
|
|
}
|
|
|
|
// harvest from this device
|
|
while (ls(larre, 255, "Mature")) {
|
|
yield();
|
|
larre.Activate = true;
|
|
}
|
|
let hasRemainingPlant = ls(larre, 255, "Occupied");
|
|
|
|
// move to the export chute
|
|
larre.Setting = EXPORT_CHUTE;
|
|
waitForIdle();
|
|
deposit();
|
|
if (hasRemainingPlant) {
|
|
deposit();
|
|
}
|
|
|
|
larre.Setting = currentIndex;
|
|
waitForIdle();
|
|
|
|
if (ls(larre, 0, "Occupied")) {
|
|
larre.Activate = true;
|
|
}
|
|
waitForIdle();
|
|
}
|
|
|
|
loop {
|
|
yield();
|
|
if (!larre.Idle) {
|
|
continue;
|
|
}
|
|
let newIndex = currentIndex + 1 > TOTAL_SLOTS ? START_STATION : currentIndex + 1;
|
|
|
|
checkAndHarvest(currentIndex);
|
|
larre.Setting = newIndex;
|
|
currentIndex = newIndex;
|
|
}
|