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):Bool { switch outcome { case Success(_): return true; case Failure(error): handle.write(error); return false; } } }