added turtle kernel stuff
This commit is contained in:
parent
fa62e3a2eb
commit
943391dddc
263
src/kernel/turtle/Turtle.hx
Normal file
263
src/kernel/turtle/Turtle.hx
Normal file
@ -0,0 +1,263 @@
|
||||
package kernel.turtle;
|
||||
|
||||
import kernel.turtle.Types;
|
||||
|
||||
using tink.CoreApi;
|
||||
|
||||
typedef TurtleSlot = Int;
|
||||
|
||||
class Turtle {
|
||||
public static function isTurtle():Bool {
|
||||
return true; // TODO: Implement
|
||||
}
|
||||
|
||||
private function conterToOutcome(r:cc.Turtle.TurtleActionResult):Outcome<Noise, String> {
|
||||
if (r.successful) {
|
||||
return Outcome.Success(null);
|
||||
} else {
|
||||
if (r.error != null) {
|
||||
return Outcome.Failure(r.error);
|
||||
} else {
|
||||
return Outcome.Failure("Unknown error");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function forward():Outcome<Noise, String> {
|
||||
var r = cc.Turtle.forward();
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function back():Outcome<Noise, String> {
|
||||
var r = cc.Turtle.back();
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function up():Outcome<Noise, String> {
|
||||
var r = cc.Turtle.up();
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function down():Outcome<Noise, String> {
|
||||
var r = cc.Turtle.down();
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function turnLeft():Outcome<Noise, String> {
|
||||
var r = cc.Turtle.turnLeft();
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function turnRight():Outcome<Noise, String> {
|
||||
var r = cc.Turtle.turnRight();
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function dig(dir:InteractDirections, ?toolSide:ToolSide):Outcome<Noise, String> {
|
||||
var r:cc.Turtle.TurtleActionResult;
|
||||
|
||||
// FIXME: upstream needs to be fixed to accept ToolSide
|
||||
switch dir {
|
||||
case Front:
|
||||
r = cc.Turtle.dig();
|
||||
case Up:
|
||||
r = cc.Turtle.digUp();
|
||||
case Down:
|
||||
r = cc.Turtle.digDown();
|
||||
}
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function place(dir:InteractDirections):Outcome<Noise, String> {
|
||||
var r:cc.Turtle.TurtleActionResult;
|
||||
switch dir {
|
||||
case Front:
|
||||
r = cc.Turtle.place();
|
||||
case Up:
|
||||
r = cc.Turtle.placeUp();
|
||||
case Down:
|
||||
r = cc.Turtle.placeDown();
|
||||
}
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function placeSign(dir:InteractDirections, text:String):Outcome<Noise, String> {
|
||||
var r:cc.Turtle.TurtleActionResult;
|
||||
switch dir {
|
||||
case Front:
|
||||
r = cc.Turtle.place(text);
|
||||
case Up:
|
||||
r = cc.Turtle.placeUp(); // FIXME: fix upstream to accept text
|
||||
case Down:
|
||||
r = cc.Turtle.placeDown();
|
||||
}
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function drop(dir:InteractDirections, ?count:Int):Outcome<Noise, String> {
|
||||
var r = cc.Turtle.drop(count);
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function selectSlot(slot:TurtleSlot):Outcome<Noise, Noise> {
|
||||
// TODO: slot in bounds?
|
||||
|
||||
var r = cc.Turtle.select(slot);
|
||||
|
||||
return (r) ? Outcome.Success(null) : Outcome.Failure("Slot out of bounds");
|
||||
}
|
||||
|
||||
public function getItemCount(?slot:TurtleSlot):Int {
|
||||
// TODO: slot in bounds?
|
||||
|
||||
return cc.Turtle.getItemCount(slot);
|
||||
}
|
||||
|
||||
public function getItemSpace(?slot:TurtleSlot):Int {
|
||||
// TODO: slot in bounds?
|
||||
|
||||
return cc.Turtle.getItemSpace(slot);
|
||||
}
|
||||
|
||||
public function detect(dir:InteractDirections):Bool {
|
||||
switch dir {
|
||||
case Front:
|
||||
return cc.Turtle.detect();
|
||||
case Up:
|
||||
return cc.Turtle.detectUp();
|
||||
case Down:
|
||||
return cc.Turtle.detectDown();
|
||||
}
|
||||
}
|
||||
|
||||
public function compareToSlot(dir:InteractDirections):Bool {
|
||||
switch dir {
|
||||
case Front:
|
||||
return cc.Turtle.compare();
|
||||
case Up:
|
||||
return cc.Turtle.compareUp();
|
||||
case Down:
|
||||
return cc.Turtle.compareDown();
|
||||
}
|
||||
}
|
||||
|
||||
public function attack(dir:InteractDirections, ?toolSide:ToolSide):Outcome<Noise, String> {
|
||||
var r:cc.Turtle.TurtleActionResult;
|
||||
|
||||
// FIXEM: upstream needs to be fixed to accept ToolSide
|
||||
switch dir {
|
||||
case Front:
|
||||
r = cc.Turtle.attack();
|
||||
case Up:
|
||||
r = cc.Turtle.attackUp();
|
||||
case Down:
|
||||
r = cc.Turtle.attackDown();
|
||||
}
|
||||
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function suckItem(dir:InteractDirections, ?ammount:Int):Outcome<Noise, String> {
|
||||
// TODO: ammount in bounds?
|
||||
|
||||
var r:cc.Turtle.TurtleActionResult;
|
||||
|
||||
switch dir {
|
||||
case Front:
|
||||
r = cc.Turtle.suck(ammount);
|
||||
case Up:
|
||||
r = cc.Turtle.suckUp(ammount);
|
||||
case Down:
|
||||
r = cc.Turtle.suckDown(ammount);
|
||||
}
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function getFuelLevel():Int {
|
||||
var r = cc.Turtle.getFuelLevel(); // FIXME: can be a string. Has to be fixed upstream
|
||||
return r;
|
||||
}
|
||||
|
||||
public function refuel(?ammount:Int):Outcome<Noise, String> {
|
||||
var r = cc.Turtle.refuel(ammount);
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
|
||||
public function canRefultWithSlot():Bool {
|
||||
var r = cc.Turtle.refuel(0);
|
||||
return r.successful;
|
||||
}
|
||||
|
||||
public function compareSlot(otherSlot:TurtleSlot):Bool {
|
||||
return cc.Turtle.compareTo(otherSlot);
|
||||
}
|
||||
|
||||
public function transferToSlot(to:TurtleSlot, ?count:Int):Outcome<Noise, Noise> {
|
||||
var r = cc.Turtle.transferTo(to, count);
|
||||
return r ? Outcome.Success(null) : Outcome.Failure(null);
|
||||
}
|
||||
|
||||
public function getSelectedSlot():TurtleSlot {
|
||||
return cc.Turtle.getSelectedSlot();
|
||||
}
|
||||
|
||||
public function getFuelLimit():Int {
|
||||
return cc.Turtle.getFuelLimit(); // FIXME: can be a string. Has to be fixed upstream
|
||||
}
|
||||
|
||||
public function equip(side:ToolSide):Outcome<Noise, String> {
|
||||
switch side {
|
||||
case Left:
|
||||
return conterToOutcome(cc.Turtle.equipLeft());
|
||||
case Right:
|
||||
return conterToOutcome(cc.Turtle.equipRight());
|
||||
}
|
||||
}
|
||||
|
||||
public function inspect(dir:InteractDirections):Outcome<BlockInspect, String> {
|
||||
var r:cc.Turtle.TurtleInspectResult;
|
||||
switch dir {
|
||||
case Front:
|
||||
r = cc.Turtle.inspect();
|
||||
case Up:
|
||||
r = cc.Turtle.inspectUp();
|
||||
case Down:
|
||||
r = cc.Turtle.inspectDown();
|
||||
}
|
||||
|
||||
if (!r.successful) {
|
||||
return Outcome.Failure(r.result);
|
||||
}
|
||||
|
||||
// TODO: check if this is correct
|
||||
return Outcome.Success({
|
||||
name: (r.result : cc.Turtle.TurtleBlockDetail).name,
|
||||
state: (r.result : cc.Turtle.TurtleBlockDetail).state,
|
||||
metadata: (r.result : cc.Turtle.TurtleBlockDetail).metadata,
|
||||
});
|
||||
}
|
||||
|
||||
public function getItemDetail(?detailed:Bool = false, ?slot:TurtleSlot):Option<ItemInspect> {
|
||||
var r = cc.Turtle.getItemDetail(slot); // FIXME: can take detailed as flag. Has to be fixed upstream
|
||||
|
||||
if (r == null) {
|
||||
return None;
|
||||
}
|
||||
|
||||
// TODO: check if this is correct
|
||||
return Some({
|
||||
name: r.name,
|
||||
count: r.count,
|
||||
damage: r.damage,
|
||||
});
|
||||
}
|
||||
|
||||
public function craft(?limit:Int = 64):Outcome<Noise, String> {
|
||||
if (limit < 1 || limit > 64) {
|
||||
return Outcome.Failure("Crafting limit out of bounds");
|
||||
}
|
||||
|
||||
var r = cc.Turtle.craft(limit);
|
||||
return conterToOutcome(r);
|
||||
}
|
||||
}
|
24
src/kernel/turtle/Types.hx
Normal file
24
src/kernel/turtle/Types.hx
Normal file
@ -0,0 +1,24 @@
|
||||
package kernel.turtle;
|
||||
|
||||
enum ToolSide {
|
||||
Left;
|
||||
Right;
|
||||
}
|
||||
|
||||
enum InteractDirections {
|
||||
Front;
|
||||
Up;
|
||||
Down;
|
||||
}
|
||||
|
||||
typedef BlockInspect = {
|
||||
public var name:String;
|
||||
public var metadata:Int;
|
||||
public var state:Dynamic;
|
||||
}
|
||||
|
||||
typedef ItemInspect = {
|
||||
public var name:String;
|
||||
public var damage:Int;
|
||||
public var count:Int;
|
||||
}
|
Loading…
Reference in New Issue
Block a user