cc-haxe/src/bin/Turtle.hx

52 lines
1.2 KiB
Haxe

package bin;
import lib.CLIAppBase;
using tink.CoreApi;
class Turtle extends CLIAppBase {
public function new() {
registerSyncSubcommand("forward", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.instance.forward());
});
registerSyncSubcommand("back", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.instance.back());
});
registerSyncSubcommand("left", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.instance.turnLeft());
});
registerSyncSubcommand("right", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.instance.turnRight());
});
registerSyncSubcommand("up", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.instance.up());
});
registerSyncSubcommand("down", (args) -> {
return checkAvailable() && perform(kernel.turtle.Turtle.instance.down());
});
}
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;
}
}
}