package kernel; using tink.CoreApi; import lib.TermWriteable; import cc.Term; import util.Vec.Vec2; import util.Color; /** Represents the main computer screen. **/ class MainTerm implements TermWriteable{ 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():Vec2 { 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():Vec2 { 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 ColorConvert.ccToColor(Term.getTextColor()); } public function setTextColor(colour:Color) { Term.setTextColor(ColorConvert.colorToCC(colour)); } public function getBackgroundColor():Color { return ColorConvert.ccToColor(Term.getBackgroundColor()); } public function setBackgroundColor(color:Color) { Term.setBackgroundColor(ColorConvert.colorToCC(color)); } public function isColor():Bool { return Term.isColor(); } }