cc-haxe/src/kernel/MainTerm.hx

106 lines
1.9 KiB
Haxe

package kernel;
import lib.ScreenPos;
import kernel.ui.ITermWriteable;
import cc.Term;
import lib.Vec.Vec2;
import lib.Color;
using tink.CoreApi;
/**
Represents the main computer screen.
**/
class MainTerm implements ITermWriteable {
/**
Depends on: KernelEvents,
**/
public static var instance:MainTerm;
public var onResize(default, null):Signal<Vec2<Int>>;
private var onResizeTrigger:SignalTrigger<Vec2<Int>>;
@:allow(kernel.Init)
private function new() {
this.onResizeTrigger = Signal.trigger();
this.onResize = this.onResizeTrigger.asSignal();
KernelEvents.onTermResize.handle(_ -> {
onResizeTrigger.trigger(getSize());
});
}
public function write(text:String) {
Term.write(text);
}
public function scroll(y:Int) {
Term.scroll(y);
}
public function getCursorPos():ScreenPos {
var rtn = Term.getCursorPos();
return {
x: rtn.x - 1,
y: rtn.y - 1
}
}
public function setCursorPos(x:Int, y:Int) {
Term.setCursorPos(x + 1, y + 1);
}
public function getCursorBlink():Bool {
// Missing in api
throw new haxe.exceptions.NotImplementedException();
}
public function setCursorBlink(blink:Bool) {
Term.setCursorBlink(blink);
}
public function getSize():ScreenPos {
var rtn = Term.getSize();
return {
x: rtn.width,
y: rtn.height,
}
}
public function clear() {
Term.clear();
}
public function clearLine() {
Term.clearLine();
}
public function getTextColor():Color {
return Term.getTextColor();
}
public function setTextColor(color:Color) {
Term.setTextColor(color);
}
public function getBackgroundColor():Color {
return Term.getBackgroundColor();
}
public function setBackgroundColor(color:Color) {
Term.setBackgroundColor(color);
}
public function isColor():Bool {
return Term.isColor();
}
public function reset() {
this.setBackgroundColor(Black);
this.setTextColor(White);
this.clear();
this.setCursorPos(0, 0);
}
}