added TurtleExt

This commit is contained in:
Djeeberjr 2022-04-28 22:54:54 +02:00
parent 5ab1a46840
commit 3219738799

View File

@ -0,0 +1,98 @@
package lib.turtle;
import kernel.turtle.Turtle;
using tink.CoreApi;
/**
Extends the Turtle kernel.
**/
class TurtleExt {
public static function getFreeSlots(t: Turtle): Int {
var ret: Int = 0;
for (i in 0...Turtle.MAX_SLOTS){
if (t.getItemCount(i) == 0){
ret++;
}
}
return ret;
}
public static function canPickup(t: Turtle,item: Item): Bool {
for (i in 0...Turtle.MAX_SLOTS){
var slotItem = t.getItemDetail(i).orNull();
if (slotItem != null && slotItem.name == item){
if (t.getItemSpace(i)>0){
return true;
}
}
}
return false;
}
public static function canPickupCount(t: Turtle,item: Item): Int {
var ret: Int = 0;
for (i in 0...Turtle.MAX_SLOTS){
var slotItem = Turtle.instance.getItemDetail(i).orNull();
if (slotItem != null && slotItem.name == item){
ret += Turtle.instance.getItemSpace(i);
}
}
return ret;
}
public static function getInventory(t: Turtle): Map<Int,{item: Item, count: Int, free: Int}> {
var rtn: Map<Int,{item: Item, count: Int, free: Int}> = new Map();
for (i in 0...Turtle.MAX_SLOTS){
var slotItem = t.getItemDetail(i).orNull();
if (slotItem != null){
rtn.set(i, {item: slotItem.name, count: slotItem.count, free: t.getItemSpace(i)});
}
}
return rtn;
}
/**
Optimize the turtle inventory.
TODO: does not work 100% yet. Can be optimized more i think. Not that it needs to be optimized.
**/
public static function tidy(t: Turtle) {
var inv = getInventory(t);
// For each item in the inventory
for(k1 => v1 in inv){
if (v1.free == 0 || v1.count == 0){
continue;
}
for(k2 => v2 in inv){
if (k2 == k1){
continue;
}
if (v1.item == v2.item && v2.free > 0){
// We can move an item in there
t.transfer(k1,k2,v2.free);
v1.count -= v2.free;
if (v1.count <= 0){
inv.remove(k1);
break;
}
}
}
}
}
}