package kernel; import util.Pos; using tink.CoreApi; import kernel.ui.TermWriteable; import cc.Term; import util.Vec.Vec2; import util.Color; /** Represents the main computer screen. **/ class MainTerm implements TermWriteable { /** Depends on: KernelEvents, **/ public static var instance:MainTerm; public var onResize(default, null):Signal>; private var onResizeTrigger:SignalTrigger>; @:allow(kernel.Init) private function new() { this.onResizeTrigger = Signal.trigger(); this.onResize = this.onResizeTrigger.asSignal(); KernelEvents.instance.onTermResize.handle(_ -> { onResizeTrigger.trigger(getSize()); }); } public function write(text:String) { Term.write(text); } public function scroll(y:Int) { Term.scroll(y); } public function getCursorPos():Pos { 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():Pos { 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); } }