cc-haxe/src/bin/Turtle.hx

63 lines
1.4 KiB
Haxe

package bin;
import lib.turtle.InvManager;
import lib.CLIAppBase;
using tink.CoreApi;
@:build(macros.Binstore.includeBin("Turtle", ["turtle", "t"]))
class Turtle extends CLIAppBase {
public function new() {
registerSyncSubcommand("forward", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.forward());
});
registerSyncSubcommand("back", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.back());
});
registerSyncSubcommand("left", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.turnLeft());
});
registerSyncSubcommand("right", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.turnRight());
});
registerSyncSubcommand("up", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.up());
});
registerSyncSubcommand("down", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.down());
});
registerSyncSubcommand("defrag", (args) -> {
if (!checkAvailable()) {
return false;
}
InvManager.defrag();
return true;
});
}
private function checkAvailable():Bool {
if (!kernel.turtle.Turtle.isTurtle()) {
handle.write("This is not a turtle!");
return false;
}
return true;
}
private function perform(outcome:Outcome<Noise, String>):Bool {
switch outcome {
case Success(_):
return true;
case Failure(error):
handle.write(error);
return false;
}
}
}