renamed Pos and Pos3
This commit is contained in:
parent
08f41ccb0b
commit
e0f8d274e7
@ -2,7 +2,7 @@ package bin;
|
||||
|
||||
import lib.CLIAppBase;
|
||||
import kernel.gps.INS;
|
||||
import lib.Pos3;
|
||||
import lib.WorldPos;
|
||||
import lib.Vec.Vec3;
|
||||
|
||||
using tink.CoreApi;
|
||||
@ -15,7 +15,7 @@ class GPS extends CLIAppBase {
|
||||
var y:Float = args.getFloat("y");
|
||||
var z:Float = args.getFloat("z");
|
||||
|
||||
var pos:Pos3 = new Vec3<Float>(x, y, z);
|
||||
var pos:WorldPos = new Vec3<Float>(x, y, z);
|
||||
|
||||
kernel.gps.GPS.setManualPosition(pos);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package bin.pathfinder;
|
||||
|
||||
import lib.Pos3;
|
||||
import lib.WorldPos;
|
||||
import lib.ui.elements.IUIElement;
|
||||
import lib.ui.elements.TextElement;
|
||||
import lib.ui.elements.RootElement;
|
||||
@ -36,7 +36,7 @@ class PFClient implements IProcess {
|
||||
|
||||
private function render() {
|
||||
var acc = kernel.gps.GPS.getAccuracy();
|
||||
var pos:Pos3 = kernel.gps.GPS.getPosition() ?? {x: 0, y: 0, z: 0};
|
||||
var pos:WorldPos = kernel.gps.GPS.getPosition() ?? {x: 0, y: 0, z: 0};
|
||||
|
||||
var childre:Array<IUIElement> = [
|
||||
new TextElement('Acc: ${acc}'),
|
||||
|
@ -4,7 +4,7 @@ import kernel.turtle.TurtleMutex;
|
||||
import kernel.turtle.Turtle;
|
||||
import kernel.peripherals.Peripherals.Peripheral;
|
||||
import kernel.log.Log;
|
||||
import lib.Pos;
|
||||
import lib.ScreenPos;
|
||||
import cc.HTTP.HTTPResponse;
|
||||
import lua.TableTools;
|
||||
import lua.Coroutine;
|
||||
@ -38,11 +38,11 @@ class KernelEvents {
|
||||
distance:Null<Float>
|
||||
}>;
|
||||
public static var onMonitorResize(default, null):Signal<String>;
|
||||
public static var onMonitorTouch(default, null):Signal<{addr:String, pos:Pos}>;
|
||||
public static var onMouseClick(default, null):Signal<{button:ButtonType, pos:Pos}>;
|
||||
public static var onMouseDrag(default, null):Signal<{button:ButtonType, pos:Pos}>;
|
||||
public static var onMouseScroll(default, null):Signal<{dir:Int, pos:Pos}>;
|
||||
public static var onMouseUp(default, null):Signal<{button:ButtonType, pos:Pos}>;
|
||||
public static var onMonitorTouch(default, null):Signal<{addr:String, pos:ScreenPos}>;
|
||||
public static var onMouseClick(default, null):Signal<{button:ButtonType, pos:ScreenPos}>;
|
||||
public static var onMouseDrag(default, null):Signal<{button:ButtonType, pos:ScreenPos}>;
|
||||
public static var onMouseScroll(default, null):Signal<{dir:Int, pos:ScreenPos}>;
|
||||
public static var onMouseUp(default, null):Signal<{button:ButtonType, pos:ScreenPos}>;
|
||||
public static var onPaste(default, null):Signal<String>;
|
||||
public static var onPeripheral(default, null):Signal<String>;
|
||||
public static var onPeripheralDetach(default, null):Signal<String>;
|
||||
@ -75,11 +75,11 @@ class KernelEvents {
|
||||
distance:Null<Float>
|
||||
}> = Signal.trigger();
|
||||
private static final onMonitorResizeTrigger:SignalTrigger<String> = Signal.trigger();
|
||||
private static final onMonitorTouchTrigger:SignalTrigger<{addr:String, pos:Pos}> = Signal.trigger();
|
||||
private static final onMouseClickTrigger:SignalTrigger<{button:ButtonType, pos:Pos}> = Signal.trigger();
|
||||
private static final onMouseDragTrigger:SignalTrigger<{button:ButtonType, pos:Pos}> = Signal.trigger();
|
||||
private static final onMouseScrollTrigger:SignalTrigger<{dir:Int, pos:Pos}> = Signal.trigger();
|
||||
private static final onMouseUpTrigger:SignalTrigger<{button:ButtonType, pos:Pos}> = Signal.trigger();
|
||||
private static final onMonitorTouchTrigger:SignalTrigger<{addr:String, pos:ScreenPos}> = Signal.trigger();
|
||||
private static final onMouseClickTrigger:SignalTrigger<{button:ButtonType, pos:ScreenPos}> = Signal.trigger();
|
||||
private static final onMouseDragTrigger:SignalTrigger<{button:ButtonType, pos:ScreenPos}> = Signal.trigger();
|
||||
private static final onMouseScrollTrigger:SignalTrigger<{dir:Int, pos:ScreenPos}> = Signal.trigger();
|
||||
private static final onMouseUpTrigger:SignalTrigger<{button:ButtonType, pos:ScreenPos}> = Signal.trigger();
|
||||
private static final onPasteTrigger:SignalTrigger<String> = Signal.trigger();
|
||||
private static final onPeripheralTrigger:SignalTrigger<String> = Signal.trigger();
|
||||
private static final onPeripheralDetachTrigger:SignalTrigger<String> = Signal.trigger();
|
||||
|
@ -1,6 +1,6 @@
|
||||
package kernel;
|
||||
|
||||
import lib.Pos;
|
||||
import lib.ScreenPos;
|
||||
import kernel.ui.ITermWriteable;
|
||||
import cc.Term;
|
||||
import lib.Vec.Vec2;
|
||||
@ -39,7 +39,7 @@ class MainTerm implements ITermWriteable {
|
||||
Term.scroll(y);
|
||||
}
|
||||
|
||||
public function getCursorPos():Pos {
|
||||
public function getCursorPos():ScreenPos {
|
||||
var rtn = Term.getCursorPos();
|
||||
return {
|
||||
x: rtn.x - 1,
|
||||
@ -60,7 +60,7 @@ class MainTerm implements ITermWriteable {
|
||||
Term.setCursorBlink(blink);
|
||||
}
|
||||
|
||||
public function getSize():Pos {
|
||||
public function getSize():ScreenPos {
|
||||
var rtn = Term.getSize();
|
||||
return {
|
||||
x: rtn.width,
|
||||
|
@ -5,7 +5,7 @@ import lib.KVStore;
|
||||
import kernel.net.Net;
|
||||
import kernel.net.INetworkInterface;
|
||||
import kernel.net.Package;
|
||||
import lib.Pos3;
|
||||
import lib.WorldPos;
|
||||
|
||||
using tink.CoreApi;
|
||||
|
||||
@ -18,17 +18,17 @@ class GPS {
|
||||
private static var shouldRespond = true;
|
||||
private static var shouldDoWholeNumberCheck = true;
|
||||
private static var posAccuracy = 0; // 0 = unkown, 1 = (ins,best guess), 2 = (stored/manual,should be right), 3 = (gps,confirmed)
|
||||
private static var cachedPosition:Pos3;
|
||||
private static var lastPositionResponse:Array<{pos:Pos3, dist:Float}> = [];
|
||||
private static var cachedPosition:WorldPos;
|
||||
private static var lastPositionResponse:Array<{pos:WorldPos, dist:Float}> = [];
|
||||
|
||||
private static var futureResolve:(pos:Null<Pos3>) -> Void = null;
|
||||
private static var futureResolve:(pos:Null<WorldPos>) -> Void = null;
|
||||
|
||||
@:allow(kernel.Init)
|
||||
private static function init() {
|
||||
loadCachedPosition();
|
||||
}
|
||||
|
||||
public static function setManualPosition(pos:Pos3) {
|
||||
public static function setManualPosition(pos:WorldPos) {
|
||||
var kvstore = new KVStore("gps");
|
||||
kvstore.set("mpos", pos);
|
||||
kvstore.save();
|
||||
@ -40,12 +40,12 @@ class GPS {
|
||||
}
|
||||
|
||||
@:allow(kernel.gps.INS)
|
||||
private static function setINSPosition(pos:Pos3) {
|
||||
private static function setINSPosition(pos:WorldPos) {
|
||||
cachedPosition = pos;
|
||||
posAccuracy = 1;
|
||||
}
|
||||
|
||||
public static function getPosition():Null<Pos3> {
|
||||
public static function getPosition():Null<WorldPos> {
|
||||
return cachedPosition;
|
||||
}
|
||||
|
||||
@ -58,17 +58,17 @@ class GPS {
|
||||
posAccuracy = 0;
|
||||
}
|
||||
|
||||
public static function locate():Future<Null<Pos3>> {
|
||||
public static function locate():Future<Null<WorldPos>> {
|
||||
// TODO: implenet a timeout
|
||||
// TODO: dont send a request twice if the last one is still pending or we moved
|
||||
return new Future<Null<Pos3>>((resolve) -> {
|
||||
return new Future<Null<WorldPos>>((resolve) -> {
|
||||
futureResolve = resolve;
|
||||
sendPositionRequest();
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
private static function resolveFuture(pos:Null<Pos3>) {
|
||||
private static function resolveFuture(pos:Null<WorldPos>) {
|
||||
futureResolve(pos);
|
||||
}
|
||||
|
||||
@ -85,8 +85,8 @@ class GPS {
|
||||
var kvstore = new KVStore("gps");
|
||||
kvstore.load();
|
||||
|
||||
var mPos:Null<Pos3> = kvstore.get("mpos"); // Manual set position
|
||||
var cPos:Null<Pos3> = kvstore.get("cpos"); // Cached position
|
||||
var mPos:Null<WorldPos> = kvstore.get("mpos"); // Manual set position
|
||||
var cPos:Null<WorldPos> = kvstore.get("cpos"); // Cached position
|
||||
|
||||
if (mPos != null && cPos != null && mPos == cPos) {
|
||||
// Both are the same, so we can use the cached position
|
||||
@ -163,7 +163,7 @@ class GPS {
|
||||
}
|
||||
}
|
||||
|
||||
private static function calculatePosition():Null<Pos3> {
|
||||
private static function calculatePosition():Null<WorldPos> {
|
||||
if (lastPositionResponse.length < 3)
|
||||
return null;
|
||||
|
||||
@ -219,7 +219,7 @@ class GPS {
|
||||
/**
|
||||
Determines the position(s) of a point given 3 other points and the distance to each of them.
|
||||
**/
|
||||
private static function trilateration(p1:Pos3, p2:Pos3, p3:Pos3, r1:Float, r2:Float, r3:Float):Pair<Pos3, Pos3> {
|
||||
private static function trilateration(p1:WorldPos, p2:WorldPos, p3:WorldPos, r1:Float, r2:Float, r3:Float):Pair<WorldPos, WorldPos> {
|
||||
var a2b = p2 - p1;
|
||||
var a2c = p3 - p1;
|
||||
|
||||
|
@ -2,12 +2,12 @@ package kernel.gps;
|
||||
|
||||
import kernel.log.Log;
|
||||
import kernel.turtle.Turtle;
|
||||
import lib.Pos3;
|
||||
import lib.WorldPos;
|
||||
|
||||
using tink.CoreApi;
|
||||
|
||||
class INS {
|
||||
private static var heading:Null<Pos3> = null;
|
||||
private static var heading:Null<WorldPos> = null;
|
||||
private static var alingment:Int = 1; // 0 = degraded, 1 = not aligned, 2 = aligned
|
||||
|
||||
@:allow(kernel.turtle.Turtle)
|
||||
@ -68,7 +68,7 @@ class INS {
|
||||
}
|
||||
}
|
||||
|
||||
private static function move(dir:Null<Pos3>) {
|
||||
private static function move(dir:Null<WorldPos>) {
|
||||
var pos = GPS.getPosition();
|
||||
if (pos == null || dir == null)
|
||||
return;
|
||||
@ -76,7 +76,7 @@ class INS {
|
||||
GPS.setINSPosition(newPos);
|
||||
}
|
||||
|
||||
public static function getHeading():Null<Pos3> {
|
||||
public static function getHeading():Null<WorldPos> {
|
||||
return heading;
|
||||
}
|
||||
|
||||
@ -150,7 +150,7 @@ class INS {
|
||||
}
|
||||
}
|
||||
|
||||
private static function calcHeading(pos1:Pos3, pos2:Pos3, moved:Int):Null<Pos3> {
|
||||
private static function calcHeading(pos1:WorldPos, pos2:WorldPos, moved:Int):Null<WorldPos> {
|
||||
if (moved == 0) {
|
||||
return pos1 - pos2;
|
||||
} else if (moved == 1) {
|
||||
@ -184,7 +184,7 @@ class INS {
|
||||
}
|
||||
}
|
||||
|
||||
private static function rotatePos3ToRight(pos:Pos3):Pos3 {
|
||||
private static function rotatePos3ToRight(pos:WorldPos):WorldPos {
|
||||
if (pos.x == 0 && pos.z == -1) {
|
||||
return {x: 1, y: 0, z: 0};
|
||||
} else if (pos.x == -1 && pos.z == 0) {
|
||||
@ -198,7 +198,7 @@ class INS {
|
||||
}
|
||||
}
|
||||
|
||||
private static function rotatePos3ToLeft(pos3:Pos3):Pos3 {
|
||||
private static function rotatePos3ToLeft(pos3:WorldPos):WorldPos {
|
||||
return rotatePos3ToRight(rotatePos3ToRight(rotatePos3ToRight(pos3)));
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package kernel.net;
|
||||
|
||||
import lib.Pos3;
|
||||
import lib.WorldPos;
|
||||
|
||||
typedef NetworkID = Int;
|
||||
typedef GenericPackage = Package<Dynamic>;
|
||||
@ -12,7 +12,7 @@ enum PackageTypes {
|
||||
RouteDiscover(reachableIDs:Array<{id:NetworkID, cost:Int}>);
|
||||
RouteDiscoverResponse(reachableIDs:Array<{id:NetworkID, cost:Int}>);
|
||||
RouteDiscoverUpdate(reachableIDs:Array<{id:NetworkID, cost:Int}>);
|
||||
GPSResponse(pos:Pos3);
|
||||
GPSResponse(pos:WorldPos);
|
||||
GPSRequest();
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@ package kernel.peripherals;
|
||||
|
||||
import cc.Peripheral;
|
||||
import lib.Rect;
|
||||
import lib.Pos;
|
||||
import lib.ScreenPos;
|
||||
|
||||
class Printer implements IPeripheral {
|
||||
public static inline final TYPE_NAME:String = "printer";
|
||||
@ -25,11 +25,11 @@ class Printer implements IPeripheral {
|
||||
|
||||
public function write(text:String) {}
|
||||
|
||||
public function getCurserPos():Pos {
|
||||
return new Pos({x: 0, y: 0});
|
||||
public function getCurserPos():ScreenPos {
|
||||
return new ScreenPos({x: 0, y: 0});
|
||||
}
|
||||
|
||||
public function setCurserPos(pos:Pos) {
|
||||
public function setCurserPos(pos:ScreenPos) {
|
||||
this.native.setCursorPos(pos.x, pos.y);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
package kernel.peripherals;
|
||||
|
||||
import cc.Peripheral;
|
||||
import lib.Pos;
|
||||
import lib.ScreenPos;
|
||||
import cc.Term.TerminalSize;
|
||||
import kernel.ui.ITermWriteable;
|
||||
import lib.Vec.Vec2;
|
||||
@ -59,7 +59,7 @@ class Screen implements ITermWriteable implements IPeripheral {
|
||||
nativ.scroll(y);
|
||||
}
|
||||
|
||||
public function getCursorPos():Pos {
|
||||
public function getCursorPos():ScreenPos {
|
||||
var rtn = nativ.getCursorPos();
|
||||
return {
|
||||
x: rtn.x - 1,
|
||||
|
@ -1,6 +1,6 @@
|
||||
package kernel.ui;
|
||||
|
||||
import lib.Pos;
|
||||
import lib.ScreenPos;
|
||||
import lib.Vec.Vec2;
|
||||
import lib.Color;
|
||||
import kernel.ui.ITermWriteable;
|
||||
@ -86,7 +86,7 @@ class BufferedVirtualTermWriter implements IVirtualTermWriter extends TermBuffer
|
||||
super.scroll(y);
|
||||
}
|
||||
|
||||
public override function getCursorPos():Pos {
|
||||
public override function getCursorPos():ScreenPos {
|
||||
if (isEnabled()) {
|
||||
return target.getCursorPos();
|
||||
} else {
|
||||
|
@ -1,6 +1,6 @@
|
||||
package kernel.ui;
|
||||
|
||||
import lib.Pos;
|
||||
import lib.ScreenPos;
|
||||
import lib.Color;
|
||||
import lib.Vec.Vec2;
|
||||
|
||||
@ -18,7 +18,7 @@ interface ITermWriteable {
|
||||
/**
|
||||
Even though CC is 1 based we use a 0 based index.
|
||||
**/
|
||||
public function getCursorPos():Pos;
|
||||
public function getCursorPos():ScreenPos;
|
||||
|
||||
/**
|
||||
Even though CC is 1 based we use a 0 based index.
|
||||
|
@ -1,7 +1,7 @@
|
||||
package kernel.ui;
|
||||
|
||||
import kernel.log.Log;
|
||||
import lib.Pos;
|
||||
import lib.ScreenPos;
|
||||
import lib.Vec.Vec2;
|
||||
import lib.Color;
|
||||
|
||||
@ -110,8 +110,8 @@ class StatelessVirtualTermWriter implements IVirtualTermWriter {
|
||||
target.scroll(y);
|
||||
}
|
||||
|
||||
public inline function getCursorPos():Pos {
|
||||
return enabled ? target.getCursorPos() : new Pos({x: 0, y: 0});
|
||||
public inline function getCursorPos():ScreenPos {
|
||||
return enabled ? target.getCursorPos() : new ScreenPos({x: 0, y: 0});
|
||||
}
|
||||
|
||||
public inline function setCursorPos(x:Int, y:Int) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
package kernel.ui;
|
||||
|
||||
import lib.Pos;
|
||||
import lib.ScreenPos;
|
||||
import lib.Vec.Vec2;
|
||||
import lib.Color;
|
||||
import kernel.ui.ITermWriteable;
|
||||
@ -18,7 +18,7 @@ class TermBuffer implements ITermWriteable {
|
||||
**/
|
||||
private var screenBuffer:Array<Array<Pixel>>;
|
||||
|
||||
private var cursorPos:Pos = {x: 0, y: 0};
|
||||
private var cursorPos:ScreenPos = {x: 0, y: 0};
|
||||
private var currentTextColor:Color = White;
|
||||
private var currentBgColor:Color = Black;
|
||||
private var cursorBlink:Bool = false;
|
||||
@ -91,7 +91,7 @@ class TermBuffer implements ITermWriteable {
|
||||
target.setCursorBlink(cursorBlink);
|
||||
}
|
||||
|
||||
private function safeWriteScreenBuffer(pos:Pos, char:String) {
|
||||
private function safeWriteScreenBuffer(pos:ScreenPos, char:String) {
|
||||
if (screenBuffer.length > pos.y && screenBuffer[pos.y].length > pos.x) {
|
||||
screenBuffer[pos.y][pos.x].char = char;
|
||||
screenBuffer[pos.y][pos.x].bg = currentBgColor;
|
||||
@ -121,7 +121,7 @@ class TermBuffer implements ITermWriteable {
|
||||
]);
|
||||
}
|
||||
|
||||
public function getCursorPos():Pos {
|
||||
public function getCursorPos():ScreenPos {
|
||||
return cursorPos;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
package kernel.ui;
|
||||
|
||||
import lib.ui.rendere.IUIEventDelegate;
|
||||
import lib.Pos;
|
||||
import lib.ScreenPos;
|
||||
import lib.Color;
|
||||
import kernel.ButtonType;
|
||||
import lib.Vec.Vec2;
|
||||
@ -17,21 +17,21 @@ class WindowContext implements ITermWriteable {
|
||||
|
||||
@:allow(kernel.ui.WindowManager) private var eventDelegate:Null<IUIEventDelegate>;
|
||||
|
||||
public var onClick(default, null):Signal<{button:ButtonType, pos:Pos}>;
|
||||
public var onClick(default, null):Signal<{button:ButtonType, pos:ScreenPos}>;
|
||||
public var onKey(default, null):Signal<{keyCode:Int, isHeld:Bool}>;
|
||||
public var onKeyUp(default, null):Signal<Int>;
|
||||
public var onMouseDrag(default, null):Signal<{button:ButtonType, pos:Pos}>;
|
||||
public var onMouseScroll(default, null):Signal<{dir:Int, pos:Pos}>;
|
||||
public var onMouseUp(default, null):Signal<{button:ButtonType, pos:Pos}>;
|
||||
public var onMouseDrag(default, null):Signal<{button:ButtonType, pos:ScreenPos}>;
|
||||
public var onMouseScroll(default, null):Signal<{dir:Int, pos:ScreenPos}>;
|
||||
public var onMouseUp(default, null):Signal<{button:ButtonType, pos:ScreenPos}>;
|
||||
public var onPaste(default, null):Signal<String>;
|
||||
public var onChar(default, null):Signal<String>;
|
||||
|
||||
@:allow(kernel.ui.WindowManager) private final onClickTrigger:SignalTrigger<{button:ButtonType, pos:Pos}>;
|
||||
@:allow(kernel.ui.WindowManager) private final onClickTrigger:SignalTrigger<{button:ButtonType, pos:ScreenPos}>;
|
||||
@:allow(kernel.ui.WindowManager) private final onKeyTrigger:SignalTrigger<{keyCode:Int, isHeld:Bool}>;
|
||||
@:allow(kernel.ui.WindowManager) private final onKeyUpTrigger:SignalTrigger<Int>;
|
||||
@:allow(kernel.ui.WindowManager) private final onMouseDragTrigger:SignalTrigger<{button:ButtonType, pos:Pos}>;
|
||||
@:allow(kernel.ui.WindowManager) private final onMouseScrollTrigger:SignalTrigger<{dir:Int, pos:Pos}>;
|
||||
@:allow(kernel.ui.WindowManager) private final onMouseUpTrigger:SignalTrigger<{button:ButtonType, pos:Pos}>;
|
||||
@:allow(kernel.ui.WindowManager) private final onMouseDragTrigger:SignalTrigger<{button:ButtonType, pos:ScreenPos}>;
|
||||
@:allow(kernel.ui.WindowManager) private final onMouseScrollTrigger:SignalTrigger<{dir:Int, pos:ScreenPos}>;
|
||||
@:allow(kernel.ui.WindowManager) private final onMouseUpTrigger:SignalTrigger<{button:ButtonType, pos:ScreenPos}>;
|
||||
@:allow(kernel.ui.WindowManager) private final onPasteTrigger:SignalTrigger<String>;
|
||||
@:allow(kernel.ui.WindowManager) private final onCharTrigger:SignalTrigger<String>;
|
||||
|
||||
@ -89,7 +89,7 @@ class WindowContext implements ITermWriteable {
|
||||
writer.scroll(y);
|
||||
}
|
||||
|
||||
public inline function getCursorPos():Pos {
|
||||
public inline function getCursorPos():ScreenPos {
|
||||
return writer.getCursorPos();
|
||||
}
|
||||
|
||||
|
103
src/lib/BlockPos.hx
Normal file
103
src/lib/BlockPos.hx
Normal file
@ -0,0 +1,103 @@
|
||||
package lib;
|
||||
|
||||
import lib.Vec.Vec3;
|
||||
|
||||
/**
|
||||
Represents a Point in a 3D `Int` System.
|
||||
Basicly a wrapper for Vec3<Int> with some extra functions.
|
||||
`Y` represents the height of the point.
|
||||
**/
|
||||
@:forward(x, y, z)
|
||||
abstract BlockPos(Vec3<Int>) from Vec3<Int> to Vec3<Int> {
|
||||
public inline function new(x:Int, y:Int, z:Int) {
|
||||
this = new Vec3(x, y, z);
|
||||
}
|
||||
|
||||
@:op(A + B)
|
||||
public function add(rhs:BlockPos):BlockPos {
|
||||
return {
|
||||
y: this.y + rhs.y,
|
||||
x: this.x + rhs.x,
|
||||
z: this.z + rhs.z
|
||||
};
|
||||
}
|
||||
|
||||
@:op(A - B)
|
||||
public function sub(rhs:BlockPos):BlockPos {
|
||||
return {
|
||||
y: this.y - rhs.y,
|
||||
x: this.x - rhs.x,
|
||||
z: this.z - rhs.z
|
||||
};
|
||||
}
|
||||
|
||||
@:op(A * B)
|
||||
public function multiplyScalar(rhs:Int):BlockPos {
|
||||
return {
|
||||
y: this.y * rhs,
|
||||
x: this.x * rhs,
|
||||
z: this.z * rhs
|
||||
};
|
||||
}
|
||||
|
||||
@:op(-A)
|
||||
public function negate():BlockPos {
|
||||
return {
|
||||
y: -this.y,
|
||||
x: -this.x,
|
||||
z: -this.z
|
||||
};
|
||||
}
|
||||
|
||||
@:op(A == B)
|
||||
public function equals(rhs:BlockPos):Bool {
|
||||
return this.x == rhs.x && this.y == rhs.y && this.z == rhs.z;
|
||||
}
|
||||
|
||||
@:op(A != B)
|
||||
public function notEquals(rhs:BlockPos):Bool {
|
||||
return !equals(rhs);
|
||||
}
|
||||
|
||||
public function dot(rhs:BlockPos):Float {
|
||||
return this.x * rhs.x + this.y * rhs.y + this.z * rhs.z;
|
||||
}
|
||||
|
||||
public function cross(rhs:BlockPos):BlockPos {
|
||||
return {
|
||||
x: this.x * rhs.y - this.y * rhs.x,
|
||||
y: this.y * rhs.z - this.z * rhs.y,
|
||||
z: this.z * rhs.x - this.x * rhs.z,
|
||||
};
|
||||
}
|
||||
|
||||
public function length():Float {
|
||||
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
|
||||
}
|
||||
|
||||
public function hashCode():Int {
|
||||
return (this.x * 73856093) ^ (this.y * 19349663) ^ (this.z * 83492791);
|
||||
}
|
||||
|
||||
public function toString():String {
|
||||
return 'BlockPos(${this.x}, ${this.y}, ${this.z})';
|
||||
}
|
||||
|
||||
public function distance(rhs:BlockPos):Float {
|
||||
return Math.sqrt(Math.pow(this.x - rhs.x, 2) + Math.pow(this.y - rhs.y, 2) + Math.pow(this.z - rhs.z, 2));
|
||||
}
|
||||
|
||||
/**
|
||||
Returns a list of positions neighboring the block. No Diagonal.
|
||||
**/
|
||||
public function neighbors():Array<BlockPos> {
|
||||
return [
|
||||
new BlockPos(this.x + 1, this.y + 0, this.z + 0), // Front
|
||||
new BlockPos(this.x - 1, this.y + 0, this.z + 0), // Back
|
||||
new BlockPos(this.x + 0, this.y + 0, this.z - 1), // Left
|
||||
new BlockPos(this.x + 0, this.y + 0, this.z + 1), // Right
|
||||
new BlockPos(this.x + 0, this.y - 1, this.z + 0), // Bot
|
||||
new BlockPos(this.x + 0, this.y + 1, this.z + 0), // Top
|
||||
];
|
||||
}
|
||||
}
|
@ -1,10 +1,12 @@
|
||||
package lib;
|
||||
|
||||
class Rect {
|
||||
private final tl:Pos;
|
||||
private final br:Pos;
|
||||
import kernel.peripherals.Screen;
|
||||
|
||||
public function new(p1:Pos, p2:Pos) {
|
||||
class Rect {
|
||||
public final tl:ScreenPos;
|
||||
public final br:ScreenPos;
|
||||
|
||||
public function new(p1:ScreenPos, p2:ScreenPos) {
|
||||
this.tl = {
|
||||
x: MathI.min(p1.x, p2.x),
|
||||
y: MathI.min(p1.y, p2.y)
|
||||
@ -20,11 +22,11 @@ class Rect {
|
||||
return getWidth() * getHight();
|
||||
}
|
||||
|
||||
public function isInside(p:Pos):Bool {
|
||||
public function isInside(p:ScreenPos):Bool {
|
||||
return (p.x >= tl.x && p.x <= br.x) && (p.y >= tl.y && p.y <= br.y);
|
||||
}
|
||||
|
||||
public function isOutside(p:Pos):Bool {
|
||||
public function isOutside(p:ScreenPos):Bool {
|
||||
return !this.isInside(p);
|
||||
}
|
||||
|
||||
@ -36,7 +38,7 @@ class Rect {
|
||||
return br.x - tl.x;
|
||||
}
|
||||
|
||||
public function offset(pos:Pos) {
|
||||
public function offset(pos:ScreenPos) {
|
||||
tl.x += pos.x;
|
||||
tl.y += pos.y;
|
||||
br.x += pos.x;
|
||||
|
@ -7,38 +7,38 @@ import lib.Vec.Vec2;
|
||||
Basicly a wrapper for Vec2<Int> with some extra functions.
|
||||
**/
|
||||
@:forward(x, y)
|
||||
abstract Pos(Vec2<Int>) from Vec2<Int> to Vec2<Int> {
|
||||
abstract ScreenPos(Vec2<Int>) from Vec2<Int> to Vec2<Int> {
|
||||
inline public function new(i:Vec2<Int>) {
|
||||
this = i;
|
||||
}
|
||||
|
||||
@:op(A + B)
|
||||
public function add(rhs:Vec2<Int>):Pos {
|
||||
return new Pos({
|
||||
public function add(rhs:Vec2<Int>):ScreenPos {
|
||||
return new ScreenPos({
|
||||
y: this.y + rhs.y,
|
||||
x: this.x + rhs.x,
|
||||
});
|
||||
}
|
||||
|
||||
@:op(A - B)
|
||||
public function sub(rhs:Vec2<Int>):Pos {
|
||||
return new Pos({
|
||||
public function sub(rhs:Vec2<Int>):ScreenPos {
|
||||
return new ScreenPos({
|
||||
y: this.y - rhs.y,
|
||||
x: this.x - rhs.x,
|
||||
});
|
||||
}
|
||||
|
||||
@:op(A * B)
|
||||
public function multiply(rhs:Vec2<Int>):Pos {
|
||||
return new Pos({
|
||||
public function multiply(rhs:Vec2<Int>):ScreenPos {
|
||||
return new ScreenPos({
|
||||
y: this.y * rhs.y,
|
||||
x: this.x * rhs.x,
|
||||
});
|
||||
}
|
||||
|
||||
@:op(-A)
|
||||
public function negate():Pos {
|
||||
return new Pos({
|
||||
public function negate():ScreenPos {
|
||||
return new ScreenPos({
|
||||
y: -this.y,
|
||||
x: -this.x,
|
||||
});
|
@ -8,14 +8,14 @@ import lib.Vec.Vec3;
|
||||
`Y` represents the height of the point.
|
||||
**/
|
||||
@:forward(x, y, z)
|
||||
abstract Pos3(Vec3<Float>) from Vec3<Float> to Vec3<Float> {
|
||||
abstract WorldPos(Vec3<Float>) from Vec3<Float> to Vec3<Float> {
|
||||
inline public function new(i:Vec3<Float>) {
|
||||
this = i;
|
||||
}
|
||||
|
||||
@:op(A + B)
|
||||
public function add(rhs:Vec3<Float>):Pos3 {
|
||||
return new Pos3({
|
||||
public function add(rhs:Vec3<Float>):WorldPos {
|
||||
return new WorldPos({
|
||||
y: this.y + rhs.y,
|
||||
x: this.x + rhs.x,
|
||||
z: this.z + rhs.z
|
||||
@ -23,8 +23,8 @@ abstract Pos3(Vec3<Float>) from Vec3<Float> to Vec3<Float> {
|
||||
}
|
||||
|
||||
@:op(A - B)
|
||||
public function sub(rhs:Vec3<Float>):Pos3 {
|
||||
return new Pos3({
|
||||
public function sub(rhs:Vec3<Float>):WorldPos {
|
||||
return new WorldPos({
|
||||
y: this.y - rhs.y,
|
||||
x: this.x - rhs.x,
|
||||
z: this.z - rhs.z
|
||||
@ -32,8 +32,8 @@ abstract Pos3(Vec3<Float>) from Vec3<Float> to Vec3<Float> {
|
||||
}
|
||||
|
||||
@:op(A * B)
|
||||
public function multiplyScalar(rhs:Float):Pos3 {
|
||||
return new Pos3({
|
||||
public function multiplyScalar(rhs:Float):WorldPos {
|
||||
return new WorldPos({
|
||||
y: this.y * rhs,
|
||||
x: this.x * rhs,
|
||||
z: this.z * rhs
|
||||
@ -41,8 +41,8 @@ abstract Pos3(Vec3<Float>) from Vec3<Float> to Vec3<Float> {
|
||||
}
|
||||
|
||||
@:op(A / B)
|
||||
public function divideScalar(rhs:Float):Pos3 {
|
||||
return new Pos3({
|
||||
public function divideScalar(rhs:Float):WorldPos {
|
||||
return new WorldPos({
|
||||
y: this.y / rhs,
|
||||
x: this.x / rhs,
|
||||
z: this.z / rhs
|
||||
@ -50,8 +50,8 @@ abstract Pos3(Vec3<Float>) from Vec3<Float> to Vec3<Float> {
|
||||
}
|
||||
|
||||
@:op(-A)
|
||||
public function negate():Pos3 {
|
||||
return new Pos3({
|
||||
public function negate():WorldPos {
|
||||
return new WorldPos({
|
||||
y: -this.y,
|
||||
x: -this.x,
|
||||
z: -this.z
|
||||
@ -62,15 +62,15 @@ abstract Pos3(Vec3<Float>) from Vec3<Float> to Vec3<Float> {
|
||||
return this.x * rhs.x + this.y * rhs.y + this.z * rhs.z;
|
||||
}
|
||||
|
||||
public function cross(rhs:Vec3<Float>):Pos3 {
|
||||
return new Pos3({
|
||||
public function cross(rhs:Vec3<Float>):WorldPos {
|
||||
return new WorldPos({
|
||||
x: this.y * rhs.z - this.z * rhs.y,
|
||||
y: this.z * rhs.x - this.x * rhs.z,
|
||||
z: this.x * rhs.y - this.y * rhs.x
|
||||
});
|
||||
}
|
||||
|
||||
public function normalize():Pos3 {
|
||||
public function normalize():WorldPos {
|
||||
var l = length();
|
||||
return multiplyScalar(1 / l);
|
||||
}
|
||||
@ -80,32 +80,32 @@ abstract Pos3(Vec3<Float>) from Vec3<Float> to Vec3<Float> {
|
||||
}
|
||||
|
||||
@:op(A == B)
|
||||
public function equals(rhs:Pos3):Bool {
|
||||
public function equals(rhs:WorldPos):Bool {
|
||||
return close(rhs);
|
||||
}
|
||||
|
||||
@:op(A != B)
|
||||
public function notEquals(rhs:Pos3):Bool {
|
||||
public function notEquals(rhs:WorldPos):Bool {
|
||||
return !close(rhs);
|
||||
}
|
||||
|
||||
public function close(rhs:Pos3, epsilon:Float = 0.001):Bool {
|
||||
public function close(rhs:WorldPos, epsilon:Float = 0.001):Bool {
|
||||
return Math.abs(this.x - rhs.x) < epsilon && Math.abs(this.y - rhs.y) < epsilon && Math.abs(this.z - rhs.z) < epsilon;
|
||||
}
|
||||
|
||||
public function toString():String {
|
||||
return 'Pos3(${this.x}, ${this.y}, ${this.z})';
|
||||
return 'WorldPos(${this.x}, ${this.y}, ${this.z})';
|
||||
}
|
||||
|
||||
public function round():Pos3 {
|
||||
return new Pos3({
|
||||
public function round():WorldPos {
|
||||
return new WorldPos({
|
||||
x: Math.fround(this.x),
|
||||
y: Math.fround(this.y),
|
||||
z: Math.fround(this.z)
|
||||
});
|
||||
}
|
||||
|
||||
public function distance(rhs:Pos3):Float {
|
||||
public function distance(rhs:WorldPos):Float {
|
||||
return Math.sqrt(Math.pow(this.x - rhs.x, 2) + Math.pow(this.y - rhs.y, 2) + Math.pow(this.z - rhs.z, 2));
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package lib.ui;
|
||||
|
||||
import kernel.ui.WindowContext;
|
||||
import lib.Pos;
|
||||
import lib.ScreenPos;
|
||||
import lib.Rect;
|
||||
import kernel.ui.Pixel;
|
||||
|
||||
@ -10,7 +10,7 @@ abstract Canvas(Array<Array<Pixel>>) to Array<Array<Pixel>> from Array<Array<Pix
|
||||
this = [[]];
|
||||
}
|
||||
|
||||
public inline function set(i:Pos, pixel:Pixel) {
|
||||
public inline function set(i:ScreenPos, pixel:Pixel) {
|
||||
if (this[i.y] == null) {
|
||||
this[i.y] = [];
|
||||
}
|
||||
@ -18,7 +18,7 @@ abstract Canvas(Array<Array<Pixel>>) to Array<Array<Pixel>> from Array<Array<Pix
|
||||
this[i.y][i.x] = pixel;
|
||||
}
|
||||
|
||||
public inline function get(i:Pos):Null<Pixel> {
|
||||
public inline function get(i:ScreenPos):Null<Pixel> {
|
||||
if (this[i.y] == null) {
|
||||
return null;
|
||||
}
|
||||
@ -26,11 +26,11 @@ abstract Canvas(Array<Array<Pixel>>) to Array<Array<Pixel>> from Array<Array<Pix
|
||||
return this[i.y][i.x];
|
||||
}
|
||||
|
||||
public function keyValueIterator():KeyValueIterator<Pos, Pixel> {
|
||||
public function keyValueIterator():KeyValueIterator<ScreenPos, Pixel> {
|
||||
return new CanvasKeyValueIterator(this);
|
||||
}
|
||||
|
||||
public function combine(other:Canvas, offset:Pos) {
|
||||
public function combine(other:Canvas, offset:ScreenPos) {
|
||||
for (key => value in other) {
|
||||
if (value == null) {
|
||||
continue;
|
||||
@ -127,8 +127,8 @@ abstract Canvas(Array<Array<Pixel>>) to Array<Array<Pixel>> from Array<Array<Pix
|
||||
|
||||
class CanvasKeyValueIterator {
|
||||
private final canvas:Array<Array<Pixel>>;
|
||||
private var index:Null<Pos> = {x: 0, y: 0};
|
||||
private var nextIndex:Null<Pos> = null;
|
||||
private var index:Null<ScreenPos> = {x: 0, y: 0};
|
||||
private var nextIndex:Null<ScreenPos> = null;
|
||||
|
||||
@:allow(lib.ui.Canvas)
|
||||
private function new(canvas:Array<Array<Pixel>>) {
|
||||
@ -141,7 +141,7 @@ class CanvasKeyValueIterator {
|
||||
this.nextIndex = nextValidPixel();
|
||||
}
|
||||
|
||||
private function isValidPos(pos:Pos):Bool {
|
||||
private function isValidPos(pos:ScreenPos):Bool {
|
||||
if (this.canvas[pos.y] == null) {
|
||||
return false;
|
||||
}
|
||||
@ -157,7 +157,7 @@ class CanvasKeyValueIterator {
|
||||
return this.index != null;
|
||||
}
|
||||
|
||||
private function nextValidPixel():Null<Pos> {
|
||||
private function nextValidPixel():Null<ScreenPos> {
|
||||
if (this.index == null) {
|
||||
return null;
|
||||
}
|
||||
@ -182,7 +182,7 @@ class CanvasKeyValueIterator {
|
||||
return null;
|
||||
}
|
||||
|
||||
public function next():{key:Pos, value:Pixel} {
|
||||
public function next():{key:ScreenPos, value:Pixel} {
|
||||
var rtn = {
|
||||
key: this.index,
|
||||
value: this.canvas[this.index.y][this.index.x]
|
||||
|
@ -1,17 +1,17 @@
|
||||
package lib.ui;
|
||||
|
||||
import lib.Pos;
|
||||
import lib.ScreenPos;
|
||||
import kernel.ButtonType;
|
||||
|
||||
using tink.CoreApi;
|
||||
|
||||
typedef UIEvents = {
|
||||
public var ?onClick:Callback<{button:ButtonType, pos:Pos}>;
|
||||
public var ?onClick:Callback<{button:ButtonType, pos:ScreenPos}>;
|
||||
public var ?onKey:Callback<{keyCode:Int, isHeld:Bool}>;
|
||||
public var ?onKeyUp:Callback<Int>;
|
||||
public var ?onMouseDrag:Callback<{button:ButtonType, pos:Pos}>;
|
||||
public var ?onMouseScroll:Callback<{dir:Int, pos:Pos}>;
|
||||
public var ?onMouseUp:Callback<{button:ButtonType, pos:Pos}>;
|
||||
public var ?onMouseDrag:Callback<{button:ButtonType, pos:ScreenPos}>;
|
||||
public var ?onMouseScroll:Callback<{dir:Int, pos:ScreenPos}>;
|
||||
public var ?onMouseUp:Callback<{button:ButtonType, pos:ScreenPos}>;
|
||||
public var ?onPaste:Callback<String>;
|
||||
public var ?onChar:Callback<String>;
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ abstract EventMap(Array<{bound:Rect, delegate:IUIEventDelegate}>) {
|
||||
}
|
||||
}
|
||||
|
||||
public function findResponseableDelegate(pos:Pos):IUIEventDelegate {
|
||||
public function findResponseableDelegate(pos:ScreenPos):IUIEventDelegate {
|
||||
for (i in 0...this.length) {
|
||||
var newi = (this.length - 1) - i;
|
||||
var element = this[newi];
|
||||
|
@ -3,5 +3,5 @@ package lib.ui.elements;
|
||||
import lib.ui.rendere.IUIEventDelegate;
|
||||
|
||||
interface IUIElement extends IUIEventDelegate {
|
||||
public function render(bounds:Pos):Canvas;
|
||||
public function render(bounds:ScreenPos):Canvas;
|
||||
}
|
||||
|
@ -21,15 +21,15 @@ class RootElement implements IUIElement {
|
||||
this.children = children;
|
||||
}
|
||||
|
||||
public function render(bounds:Pos):Canvas {
|
||||
public function render(bounds:ScreenPos):Canvas {
|
||||
var canvas = new Canvas();
|
||||
var offset = new Pos({x: 0, y: 0});
|
||||
var offset = new ScreenPos({x: 0, y: 0});
|
||||
|
||||
if (hasTitle()) {
|
||||
var title = new TextElement(this.title);
|
||||
var halfWidth = Math.floor(bounds.x / 2) - Math.floor(this.title.length / 2);
|
||||
canvas.combine(title.render(bounds), {x: halfWidth, y: offset.y});
|
||||
offset = new Pos({x: 0, y: 1});
|
||||
offset = new ScreenPos({x: 0, y: 1});
|
||||
}
|
||||
|
||||
this.eventManager.clearMap();
|
||||
@ -42,7 +42,7 @@ class RootElement implements IUIElement {
|
||||
this.eventManager.addMapElement(child, bounds);
|
||||
canvas.combine(childCanvas, offset);
|
||||
|
||||
offset = new Pos({x: 0, y: offset.y + bounds.getHight() + 1});
|
||||
offset = new ScreenPos({x: 0, y: offset.y + bounds.getHight() + 1});
|
||||
}
|
||||
|
||||
return canvas;
|
||||
|
@ -26,7 +26,7 @@ class TextElement implements IUIElement {
|
||||
return uiEvents;
|
||||
}
|
||||
|
||||
public function render(bounds:Pos):Canvas {
|
||||
public function render(bounds:ScreenPos):Canvas {
|
||||
var canvas = new Canvas();
|
||||
|
||||
var x = 0;
|
||||
|
@ -30,7 +30,7 @@ class UIEventManager implements IUIEventDelegate {
|
||||
};
|
||||
}
|
||||
|
||||
private function handleClickEvent(params:{button:ButtonType, pos:Pos}) {
|
||||
private function handleClickEvent(params:{button:ButtonType, pos:ScreenPos}) {
|
||||
var element = this.map.findResponseableDelegate(params.pos);
|
||||
if (element == null) {
|
||||
return;
|
||||
@ -48,11 +48,11 @@ class UIEventManager implements IUIEventDelegate {
|
||||
|
||||
private function handlePasteEvent(text:String) {}
|
||||
|
||||
private function handleMouseUpEvent(params:{button:ButtonType, pos:Pos}) {}
|
||||
private function handleMouseUpEvent(params:{button:ButtonType, pos:ScreenPos}) {}
|
||||
|
||||
private function handleMouseScrollEvent(params:{dir:Int, pos:Pos}) {}
|
||||
private function handleMouseScrollEvent(params:{dir:Int, pos:ScreenPos}) {}
|
||||
|
||||
private function handleMouseDragEvent(params:{button:ButtonType, pos:Pos}) {}
|
||||
private function handleMouseDragEvent(params:{button:ButtonType, pos:ScreenPos}) {}
|
||||
|
||||
private function handleKeyEvent(params:{keyCode:Int, isHeld:Bool}) {}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user