made peripherals a static class

This commit is contained in:
2023-07-27 20:38:23 +02:00
parent a93ee1cddf
commit 9deea0ee98
14 changed files with 42 additions and 52 deletions

View File

@@ -26,7 +26,6 @@ class Init {
// Init singeltons here because haxe is confused about the order to create them.
Log.init();
KernelEvents.init();
Peripheral.instance = new Peripheral();
WindowManager.instance = new WindowManager();
MainTerm.instance = new MainTerm();

View File

@@ -149,7 +149,7 @@ class KernelEvents {
public static function shutdown() {
// clearing screens
for (screen in Peripheral.instance.getAllScreens()) {
for (screen in Peripheral.getAllScreens()) {
screen.reset();
}

View File

@@ -32,7 +32,7 @@ class Net {
@:allow(kernel.Init)
private function new() {
this.interfaces = [for (e in Peripheral.instance.getAllModems()) e ]; // TODO: is this the way to do it?
this.interfaces = [for (e in Peripheral.getAllModems()) e ]; // TODO: is this the way to do it?
this.interfaces.push(Loopback.instance);
for (interf in interfaces){
@@ -280,7 +280,7 @@ class Net {
data: null,
};
for (modem in Peripheral.instance.getAllModems()) {
for (modem in Peripheral.getAllModems()) {
if (!modem.isWireless()) continue;
modem.send(Net.BRODCAST_PORT, Net.instance.networkID, pack);
}

View File

@@ -64,7 +64,7 @@ class Routing {
private function brodcastRoutingTable() {
var pack = newRoutDiscoverPackage();
for (modem in Peripheral.instance.getAllModems()) {
for (modem in Peripheral.getAllModems()) {
modem.send(Net.BRODCAST_PORT, Net.instance.networkID, pack);
}
}

View File

@@ -11,24 +11,15 @@ 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> {
public static function getAllAddresses(): Array<String> {
return cc.Peripheral.getNames().toArray();
}
public function isPresent(addr: String): Bool {
public static function isPresent(addr: String): Bool {
return cc.Peripheral.isPresent(addr);
}
public function getTypes(addr: String): Array<String> {
public static function getTypes(addr: String): Array<String> {
if (!cc.Peripheral.isPresent(addr)) {
return [];
}
@@ -36,11 +27,11 @@ class Peripheral {
return cc.Peripheral.getType(addr).toArray();
}
public function findAddrByType(type: String): Array<String> {
public static function findAddrByType(type: String): Array<String> {
return getAllAddresses().filter(addr -> getTypes(addr).contains(type));
}
private function safeGetAddr(addr: String, type: String): Null<String> {
private static function safeGetAddr(addr: String, type: String): Null<String> {
if (!isPresent(addr)) {
return null;
}
@@ -53,7 +44,7 @@ class Peripheral {
return addr;
}
public function inspect(addr: String): Null<{ types: Array<String>, methods: Array<String>}> {
public static function inspect(addr: String): Null<{ types: Array<String>, methods: Array<String>}> {
if (!isPresent(addr)) {
return null;
}
@@ -76,7 +67,7 @@ class Peripheral {
Cast peripheral to a specific type.
This is a temporary solution, maybe forever.
**/
public function getFromType(addr: String, type: String): Null<IPeripheral> {
public static function getFromType(addr: String, type: String): Null<IPeripheral> {
switch (type){
case Computer.TYPE_NAME:
return getComputer(addr);
@@ -97,69 +88,69 @@ class Peripheral {
return null;
}
public function getScreen(addr: String): Null<Screen> {
public static 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> {
public static function getAllScreens(): Array<Screen> {
return [ for (addr in findAddrByType(Screen.TYPE_NAME)) new Screen(addr)];
}
public function getModem(addr: String): Null<Modem> {
public static 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> {
public static function getAllModems(): Array<Modem> {
return [ for (addr in findAddrByType(Modem.TYPE_NAME)) new Modem(addr)];
}
public function getDrive(addr: String): Null<Drive> {
public static 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> {
public static function getAllDrives(): Array<Drive> {
return [ for (addr in findAddrByType(Drive.TYPE_NAME)) new Drive(addr)];
}
public function getRedstone(side: String): Redstone {
public static 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> {
public static 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> {
public static function getAllPrinters(): Array<Printer> {
return [ for (addr in findAddrByType(Printer.TYPE_NAME)) new Printer(addr)];
}
public function getEnergyStorage(addr: String): Null<EnergyStorage> {
public static 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> {
public static function getAllEnergyStorages(): Array<EnergyStorage> {
return [ for (addr in findAddrByType(EnergyStorage.TYPE_NAME)) new EnergyStorage(addr)];
}
public function getComputer(addr: String): Null<Computer> {
public static function getComputer(addr: String): Null<Computer> {
var addr = safeGetAddr(addr, Computer.TYPE_NAME);
if (addr == null) return null;
return new Computer(addr);
}
public function getAllComputers(): Array<Computer> {
public static function getAllComputers(): Array<Computer> {
return [ for (addr in findAddrByType(Computer.TYPE_NAME)) new Computer(addr)];
}
}

View File

@@ -134,7 +134,7 @@ class WindowManager {
}
public function getOutputs():ReadOnlyArray<String> {
var arr = Peripheral.instance.getAllScreens().map(screen -> return screen.getAddr());
var arr = Peripheral.getAllScreens().map(screen -> return screen.getAddr());
arr.push("main");
return arr;
}
@@ -148,7 +148,7 @@ class WindowManager {
target = MainTerm.instance;
currentMainContext = context;
} else {
target = Peripheral.instance.getScreen(output);
target = Peripheral.getScreen(output);
if (target == null) {
// output target not found