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