131 lines
3.1 KiB
Haxe
131 lines
3.1 KiB
Haxe
package kernel.peripherals;
|
|
|
|
import kernel.peripherals.Modem;
|
|
import kernel.peripherals.Screen;
|
|
|
|
using lua.Table;
|
|
using Lambda;
|
|
using tink.CoreApi;
|
|
|
|
/**
|
|
Class responseable for retrieving peripherals.
|
|
**/
|
|
class Peripheral {
|
|
/**
|
|
Depends on: KernelEvents
|
|
**/
|
|
public static var instance:Peripheral;
|
|
|
|
@:allow(kernel.Init)
|
|
private function new() {
|
|
}
|
|
|
|
public function getAllAddresses(): Array<String> {
|
|
return cc.Peripheral.getNames().toArray();
|
|
}
|
|
|
|
public function isPresent(addr: String): Bool {
|
|
return cc.Peripheral.isPresent(addr);
|
|
}
|
|
|
|
public function getTypes(addr: String): Array<String> {
|
|
if (!cc.Peripheral.isPresent(addr)) {
|
|
return [];
|
|
}
|
|
|
|
return cc.Peripheral.getType(addr).toArray();
|
|
}
|
|
|
|
private function findAddrByType(type: String): Array<String> {
|
|
return getAllAddresses().filter(addr -> getTypes(addr).contains(type));
|
|
}
|
|
|
|
private function safeGetAddr(addr: String, type: String): Null<String> {
|
|
if (!isPresent(addr)) {
|
|
return null;
|
|
}
|
|
|
|
var types = getTypes(addr);
|
|
if (!types.contains(type)) {
|
|
return null;
|
|
}
|
|
|
|
return addr;
|
|
}
|
|
|
|
public function inspect(addr: String): Null<{ types: Array<String>, methods: Array<String>}> {
|
|
if (!isPresent(addr)) {
|
|
return null;
|
|
}
|
|
|
|
var types = getTypes(addr);
|
|
var methodsMap = cc.Peripheral.getMethods(addr).toArray();
|
|
var methods: Array<String> = [];
|
|
|
|
for (method in methodsMap) {
|
|
methods.push(method);
|
|
}
|
|
|
|
return {
|
|
types: types,
|
|
methods: methods
|
|
};
|
|
}
|
|
|
|
public function getScreen(addr: String): Null<Screen> {
|
|
var addr = safeGetAddr(addr, Screen.TYPE_NAME);
|
|
if (addr == null) return null;
|
|
return new Screen(addr);
|
|
}
|
|
|
|
|
|
public function getAllScreens(): Array<Screen> {
|
|
return [ for (addr in findAddrByType(Screen.TYPE_NAME)) new Screen(addr)];
|
|
}
|
|
|
|
public function getModem(addr: String): Null<Modem> {
|
|
var addr = safeGetAddr(addr, Modem.TYPE_NAME);
|
|
if (addr == null) return null;
|
|
return new Modem(addr);
|
|
}
|
|
|
|
public function getAllModems(): Array<Modem> {
|
|
return [ for (addr in findAddrByType(Modem.TYPE_NAME)) new Modem(addr)];
|
|
}
|
|
|
|
public function getDrive(addr: String): Null<Drive> {
|
|
var addr = safeGetAddr(addr, Drive.TYPE_NAME);
|
|
if (addr == null) return null;
|
|
return new Drive(addr);
|
|
}
|
|
|
|
public function getAllDrives(): Array<Drive> {
|
|
return [ for (addr in findAddrByType(Drive.TYPE_NAME)) new Drive(addr)];
|
|
}
|
|
|
|
public function getRedstone(side: String): Redstone {
|
|
// TODO: maybe handle restone differently to not duplicate event listeners
|
|
return new Redstone(side);
|
|
}
|
|
|
|
public function getPrinter(addr: String):Null<Printer> {
|
|
var addr = safeGetAddr(addr, Printer.TYPE_NAME);
|
|
if (addr == null) return null;
|
|
return new Printer(addr);
|
|
}
|
|
|
|
public function getAllPrinters(): Array<Printer> {
|
|
return [ for (addr in findAddrByType(Printer.TYPE_NAME)) new Printer(addr)];
|
|
}
|
|
|
|
public function getEnergyStorage(addr: String): Null<EnergyStorage> {
|
|
var addr = safeGetAddr(addr, EnergyStorage.TYPE_NAME);
|
|
if (addr == null) return null;
|
|
return new EnergyStorage(addr);
|
|
}
|
|
|
|
public function getAllEnergyStorages(): Array<EnergyStorage> {
|
|
return [ for (addr in findAddrByType(EnergyStorage.TYPE_NAME)) new EnergyStorage(addr)];
|
|
}
|
|
}
|