63 lines
1.4 KiB
Haxe
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;
|
|
}
|
|
}
|
|
}
|