Last active
July 12, 2019 21:06
-
-
Save 01010111/ac0687f0a2afb6a8158270a2d91b4ebf to your computer and use it in GitHub Desktop.
Vector class
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using Math; | |
| abstract Vec4(Array<Float>) | |
| { | |
| // Utility | |
| static var epsilon:Float = 1e-8; | |
| static function zero(n:Float):Float return n.abs() <= epsilon ? 0 : n; | |
| public static function run_tests() Vec4Tests.run(); | |
| // Array creation/access | |
| @:from static function from_array_float(input:Array<Float>) return new Vec4(input[0], input[1], input[2], input[3]); | |
| @:from static function from_array_int(input:Array<Int>) return new Vec4(input[0], input[1], input[2], input[3]); | |
| @:arrayAccess function arr_set(n:Int, v:Float) n < 0 || n > 3 ? return : this[n] = v; | |
| @:arrayAccess function arr_get(n:Int):Float return this[n.min(3).max(0).floor()]; | |
| // Pooling | |
| static var pool:Array<Vec4> = []; | |
| public static function get(x:Float = 0, y:Float = 0, z:Float = 0, w:Float = 0):Vec4 return pool.length > 0 ? pool.shift().set(x, y, z, w) : new Vec4(x, y, z, w); | |
| public inline function put() | |
| { | |
| pool.push(this); | |
| this = null; | |
| } | |
| function new(x:Float = 0, y:Float = 0, z:Float = 0, w:Float = 0) this = [x, y, z, w]; | |
| public inline function set(x:Float = 0, y:Float = 0, z:Float = 0, w:Float = 0):Vec4 | |
| { | |
| this[0] = zero(x); | |
| this[1] = zero(y); | |
| this[2] = zero(z); | |
| this[3] = zero(w); | |
| return this; | |
| } | |
| public var x (get, set):Float; | |
| function get_x() return this[0]; | |
| function set_x(v) return this[0] = v; | |
| public var y (get, set):Float; | |
| function get_y() return this[1]; | |
| function set_y(v) return this[1] = v; | |
| public var z (get, set):Float; | |
| function get_z() return this[2]; | |
| function set_z(v) return this[2] = v; | |
| public var w (get, set):Float; | |
| function get_w() return this[3]; | |
| function set_w(v) return this[3] = v; | |
| // These functions modify the vector in place! | |
| public inline function copy_from(v:Vec4):Vec4 return set(v.x, v.y, v.z, v.w); | |
| public inline function scale(n:Float):Vec4 return set(x * n, y * n, z * n, w * n); | |
| public inline function copy():Vec4 return Vec4.get(x, y, z, w); | |
| public inline function equals(v:Vec4):Bool return x == v.x && y == v.y && z == v.z && w == v.w; | |
| public inline function toString():String return 'x: $x | y: $y | z: $z | w: $w'; | |
| // Operator Overloads | |
| @:op(A + B) static function add(v1:Vec4, v2:Vec4):Vec4 return Vec4.get(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z, v1.w + v2.w); | |
| @:op(A + B) static function add_f(v:Vec4, n:Float):Vec4 return Vec4.get(v.x + n, v.y + n, v.z + n, v.w + n); | |
| @:op(A - B) static function subtract(v1:Vec4, v2:Vec4):Vec4 return Vec4.get(v1.x - v2.x, v1.y - v2.y, v1.z - v2.z, v1.w - v2.w); | |
| @:op(A - B) static function subtract_f(v:Vec4, n:Float):Vec4 return Vec4.get(v.x - n, v.y - n, v.z - n, v.w - n); | |
| @:op(A * B) static function multiply(v1:Vec4, v2:Vec4):Vec4 return Vec4.get(v1.x * v2.x, v1.y * v2.y, v1.z * v2.z, v1.w * v2.w); | |
| @:op(A * B) static function multiply_f(v:Vec4, n:Float):Vec4 return Vec4.get(v.x * n, v.y * n, v.z * n, v.w * n); | |
| @:op(A / B) static function divide(v1:Vec4, v2:Vec4):Vec4 return Vec4.get(v1.x / v2.x, v1.y / v2.y, v1.z / v2.z, v1.w / v2.w); | |
| @:op(A / B) static function divide_f(v:Vec4, n:Float):Vec4 return Vec4.get(v.x / n, v.y / n, v.z / n, v.w / n); | |
| @:op(A % B) static function mod(v1:Vec4, v2:Vec4):Vec4 return Vec4.get(v1.x % v2.x, v1.y % v2.y, v1.z % v2.z, v1.w % v2.w); | |
| @:op(A % B) static function mod_f(v:Vec4, n:Float):Vec4 return Vec4.get(v.x % n, v.y % n, v.z % n, v.w % n); | |
| // Swizzling | |
| public var xx (get, never):Vec2; public function get_xx() return Vec2.get(x, x); | |
| public var xy (get, never):Vec2; public function get_xy() return Vec2.get(x, y); | |
| public var xz (get, never):Vec2; public function get_xz() return Vec2.get(x, z); | |
| public var xw (get, never):Vec2; public function get_xw() return Vec2.get(x, w); | |
| public var yx (get, never):Vec2; public function get_yx() return Vec2.get(y, x); | |
| public var yy (get, never):Vec2; public function get_yy() return Vec2.get(y, y); | |
| public var yz (get, never):Vec2; public function get_yz() return Vec2.get(y, z); | |
| public var yw (get, never):Vec2; public function get_yw() return Vec2.get(y, w); | |
| public var zx (get, never):Vec2; public function get_zx() return Vec2.get(z, x); | |
| public var zy (get, never):Vec2; public function get_zy() return Vec2.get(z, y); | |
| public var zz (get, never):Vec2; public function get_zz() return Vec2.get(z, z); | |
| public var zw (get, never):Vec2; public function get_zw() return Vec2.get(z, w); | |
| public var wx (get, never):Vec2; public function get_wx() return Vec2.get(w, x); | |
| public var wy (get, never):Vec2; public function get_wy() return Vec2.get(w, y); | |
| public var wz (get, never):Vec2; public function get_wz() return Vec2.get(w, z); | |
| public var ww (get, never):Vec2; public function get_ww() return Vec2.get(w, w); | |
| public var xxxx (get, never):Vec4; public function get_xxxx() return Vec4.get(x, x, x, x); | |
| public var xxxy (get, never):Vec4; public function get_xxxy() return Vec4.get(x, x, x, y); | |
| public var xxxz (get, never):Vec4; public function get_xxxz() return Vec4.get(x, x, x, z); | |
| public var xxxw (get, never):Vec4; public function get_xxxw() return Vec4.get(x, x, x, w); | |
| public var xxyx (get, never):Vec4; public function get_xxyx() return Vec4.get(x, x, y, x); | |
| public var xxyy (get, never):Vec4; public function get_xxyy() return Vec4.get(x, x, y, y); | |
| public var xxyz (get, never):Vec4; public function get_xxyz() return Vec4.get(x, x, y, z); | |
| public var xxyw (get, never):Vec4; public function get_xxyw() return Vec4.get(x, x, y, w); | |
| public var xxzx (get, never):Vec4; public function get_xxzx() return Vec4.get(x, x, z, x); | |
| public var xxzy (get, never):Vec4; public function get_xxzy() return Vec4.get(x, x, z, y); | |
| public var xxzz (get, never):Vec4; public function get_xxzz() return Vec4.get(x, x, z, z); | |
| public var xxzw (get, never):Vec4; public function get_xxzw() return Vec4.get(x, x, z, w); | |
| public var xxwx (get, never):Vec4; public function get_xxwx() return Vec4.get(x, x, w, x); | |
| public var xxwy (get, never):Vec4; public function get_xxwy() return Vec4.get(x, x, w, y); | |
| public var xxwz (get, never):Vec4; public function get_xxwz() return Vec4.get(x, x, w, z); | |
| public var xxww (get, never):Vec4; public function get_xxww() return Vec4.get(x, x, w, w); | |
| public var xyxx (get, never):Vec4; public function get_xyxx() return Vec4.get(x, y, x, x); | |
| public var xyxy (get, never):Vec4; public function get_xyxy() return Vec4.get(x, y, x, y); | |
| public var xyxz (get, never):Vec4; public function get_xyxz() return Vec4.get(x, y, x, z); | |
| public var xyxw (get, never):Vec4; public function get_xyxw() return Vec4.get(x, y, x, w); | |
| public var xyyx (get, never):Vec4; public function get_xyyx() return Vec4.get(x, y, y, x); | |
| public var xyyy (get, never):Vec4; public function get_xyyy() return Vec4.get(x, y, y, y); | |
| public var xyyz (get, never):Vec4; public function get_xyyz() return Vec4.get(x, y, y, z); | |
| public var xyyw (get, never):Vec4; public function get_xyyw() return Vec4.get(x, y, y, w); | |
| public var xyzx (get, never):Vec4; public function get_xyzx() return Vec4.get(x, y, z, x); | |
| public var xyzy (get, never):Vec4; public function get_xyzy() return Vec4.get(x, y, z, y); | |
| public var xyzz (get, never):Vec4; public function get_xyzz() return Vec4.get(x, y, z, z); | |
| public var xyzw (get, never):Vec4; public function get_xyzw() return Vec4.get(x, y, z, w); | |
| public var xywx (get, never):Vec4; public function get_xywx() return Vec4.get(x, y, w, x); | |
| public var xywy (get, never):Vec4; public function get_xywy() return Vec4.get(x, y, w, y); | |
| public var xywz (get, never):Vec4; public function get_xywz() return Vec4.get(x, y, w, z); | |
| public var xyww (get, never):Vec4; public function get_xyww() return Vec4.get(x, y, w, w); | |
| public var xzxx (get, never):Vec4; public function get_xzxx() return Vec4.get(x, z, x, x); | |
| public var xzxy (get, never):Vec4; public function get_xzxy() return Vec4.get(x, z, x, y); | |
| public var xzxz (get, never):Vec4; public function get_xzxz() return Vec4.get(x, z, x, z); | |
| public var xzxw (get, never):Vec4; public function get_xzxw() return Vec4.get(x, z, x, w); | |
| public var xzyx (get, never):Vec4; public function get_xzyx() return Vec4.get(x, z, y, x); | |
| public var xzyy (get, never):Vec4; public function get_xzyy() return Vec4.get(x, z, y, y); | |
| public var xzyz (get, never):Vec4; public function get_xzyz() return Vec4.get(x, z, y, z); | |
| public var xzyw (get, never):Vec4; public function get_xzyw() return Vec4.get(x, z, y, w); | |
| public var xzzx (get, never):Vec4; public function get_xzzx() return Vec4.get(x, z, z, x); | |
| public var xzzy (get, never):Vec4; public function get_xzzy() return Vec4.get(x, z, z, y); | |
| public var xzzz (get, never):Vec4; public function get_xzzz() return Vec4.get(x, z, z, z); | |
| public var xzzw (get, never):Vec4; public function get_xzzw() return Vec4.get(x, z, z, w); | |
| public var xzwx (get, never):Vec4; public function get_xzwx() return Vec4.get(x, z, w, x); | |
| public var xzwy (get, never):Vec4; public function get_xzwy() return Vec4.get(x, z, w, y); | |
| public var xzwz (get, never):Vec4; public function get_xzwz() return Vec4.get(x, z, w, z); | |
| public var xzww (get, never):Vec4; public function get_xzww() return Vec4.get(x, z, w, w); | |
| public var xwxx (get, never):Vec4; public function get_xwxx() return Vec4.get(x, w, x, x); | |
| public var xwxy (get, never):Vec4; public function get_xwxy() return Vec4.get(x, w, x, y); | |
| public var xwxz (get, never):Vec4; public function get_xwxz() return Vec4.get(x, w, x, z); | |
| public var xwxw (get, never):Vec4; public function get_xwxw() return Vec4.get(x, w, x, w); | |
| public var xwyx (get, never):Vec4; public function get_xwyx() return Vec4.get(x, w, y, x); | |
| public var xwyy (get, never):Vec4; public function get_xwyy() return Vec4.get(x, w, y, y); | |
| public var xwyz (get, never):Vec4; public function get_xwyz() return Vec4.get(x, w, y, z); | |
| public var xwyw (get, never):Vec4; public function get_xwyw() return Vec4.get(x, w, y, w); | |
| public var xwzx (get, never):Vec4; public function get_xwzx() return Vec4.get(x, w, z, x); | |
| public var xwzy (get, never):Vec4; public function get_xwzy() return Vec4.get(x, w, z, y); | |
| public var xwzz (get, never):Vec4; public function get_xwzz() return Vec4.get(x, w, z, z); | |
| public var xwzw (get, never):Vec4; public function get_xwzw() return Vec4.get(x, w, z, w); | |
| public var xwwx (get, never):Vec4; public function get_xwwx() return Vec4.get(x, w, w, x); | |
| public var xwwy (get, never):Vec4; public function get_xwwy() return Vec4.get(x, w, w, y); | |
| public var xwwz (get, never):Vec4; public function get_xwwz() return Vec4.get(x, w, w, z); | |
| public var xwww (get, never):Vec4; public function get_xwww() return Vec4.get(x, w, w, w); | |
| public var yxxx (get, never):Vec4; public function get_yxxx() return Vec4.get(y, x, x, x); | |
| public var yxxy (get, never):Vec4; public function get_yxxy() return Vec4.get(y, x, x, y); | |
| public var yxxz (get, never):Vec4; public function get_yxxz() return Vec4.get(y, x, x, z); | |
| public var yxxw (get, never):Vec4; public function get_yxxw() return Vec4.get(y, x, x, w); | |
| public var yxyx (get, never):Vec4; public function get_yxyx() return Vec4.get(y, x, y, x); | |
| public var yxyy (get, never):Vec4; public function get_yxyy() return Vec4.get(y, x, y, y); | |
| public var yxyz (get, never):Vec4; public function get_yxyz() return Vec4.get(y, x, y, z); | |
| public var yxyw (get, never):Vec4; public function get_yxyw() return Vec4.get(y, x, y, w); | |
| public var yxzx (get, never):Vec4; public function get_yxzx() return Vec4.get(y, x, z, x); | |
| public var yxzy (get, never):Vec4; public function get_yxzy() return Vec4.get(y, x, z, y); | |
| public var yxzz (get, never):Vec4; public function get_yxzz() return Vec4.get(y, x, z, z); | |
| public var yxzw (get, never):Vec4; public function get_yxzw() return Vec4.get(y, x, z, w); | |
| public var yxwx (get, never):Vec4; public function get_yxwx() return Vec4.get(y, x, w, x); | |
| public var yxwy (get, never):Vec4; public function get_yxwy() return Vec4.get(y, x, w, y); | |
| public var yxwz (get, never):Vec4; public function get_yxwz() return Vec4.get(y, x, w, z); | |
| public var yxww (get, never):Vec4; public function get_yxww() return Vec4.get(y, x, w, w); | |
| public var yyxx (get, never):Vec4; public function get_yyxx() return Vec4.get(y, y, x, x); | |
| public var yyxy (get, never):Vec4; public function get_yyxy() return Vec4.get(y, y, x, y); | |
| public var yyxz (get, never):Vec4; public function get_yyxz() return Vec4.get(y, y, x, z); | |
| public var yyxw (get, never):Vec4; public function get_yyxw() return Vec4.get(y, y, x, w); | |
| public var yyyx (get, never):Vec4; public function get_yyyx() return Vec4.get(y, y, y, x); | |
| public var yyyy (get, never):Vec4; public function get_yyyy() return Vec4.get(y, y, y, y); | |
| public var yyyz (get, never):Vec4; public function get_yyyz() return Vec4.get(y, y, y, z); | |
| public var yyyw (get, never):Vec4; public function get_yyyw() return Vec4.get(y, y, y, w); | |
| public var yyzx (get, never):Vec4; public function get_yyzx() return Vec4.get(y, y, z, x); | |
| public var yyzy (get, never):Vec4; public function get_yyzy() return Vec4.get(y, y, z, y); | |
| public var yyzz (get, never):Vec4; public function get_yyzz() return Vec4.get(y, y, z, z); | |
| public var yyzw (get, never):Vec4; public function get_yyzw() return Vec4.get(y, y, z, w); | |
| public var yywx (get, never):Vec4; public function get_yywx() return Vec4.get(y, y, w, x); | |
| public var yywy (get, never):Vec4; public function get_yywy() return Vec4.get(y, y, w, y); | |
| public var yywz (get, never):Vec4; public function get_yywz() return Vec4.get(y, y, w, z); | |
| public var yyww (get, never):Vec4; public function get_yyww() return Vec4.get(y, y, w, w); | |
| public var yzxx (get, never):Vec4; public function get_yzxx() return Vec4.get(y, z, x, x); | |
| public var yzxy (get, never):Vec4; public function get_yzxy() return Vec4.get(y, z, x, y); | |
| public var yzxz (get, never):Vec4; public function get_yzxz() return Vec4.get(y, z, x, z); | |
| public var yzxw (get, never):Vec4; public function get_yzxw() return Vec4.get(y, z, x, w); | |
| public var yzyx (get, never):Vec4; public function get_yzyx() return Vec4.get(y, z, y, x); | |
| public var yzyy (get, never):Vec4; public function get_yzyy() return Vec4.get(y, z, y, y); | |
| public var yzyz (get, never):Vec4; public function get_yzyz() return Vec4.get(y, z, y, z); | |
| public var yzyw (get, never):Vec4; public function get_yzyw() return Vec4.get(y, z, y, w); | |
| public var yzzx (get, never):Vec4; public function get_yzzx() return Vec4.get(y, z, z, x); | |
| public var yzzy (get, never):Vec4; public function get_yzzy() return Vec4.get(y, z, z, y); | |
| public var yzzz (get, never):Vec4; public function get_yzzz() return Vec4.get(y, z, z, z); | |
| public var yzzw (get, never):Vec4; public function get_yzzw() return Vec4.get(y, z, z, w); | |
| public var yzwx (get, never):Vec4; public function get_yzwx() return Vec4.get(y, z, w, x); | |
| public var yzwy (get, never):Vec4; public function get_yzwy() return Vec4.get(y, z, w, y); | |
| public var yzwz (get, never):Vec4; public function get_yzwz() return Vec4.get(y, z, w, z); | |
| public var yzww (get, never):Vec4; public function get_yzww() return Vec4.get(y, z, w, w); | |
| public var ywxx (get, never):Vec4; public function get_ywxx() return Vec4.get(y, w, x, x); | |
| public var ywxy (get, never):Vec4; public function get_ywxy() return Vec4.get(y, w, x, y); | |
| public var ywxz (get, never):Vec4; public function get_ywxz() return Vec4.get(y, w, x, z); | |
| public var ywxw (get, never):Vec4; public function get_ywxw() return Vec4.get(y, w, x, w); | |
| public var ywyx (get, never):Vec4; public function get_ywyx() return Vec4.get(y, w, y, x); | |
| public var ywyy (get, never):Vec4; public function get_ywyy() return Vec4.get(y, w, y, y); | |
| public var ywyz (get, never):Vec4; public function get_ywyz() return Vec4.get(y, w, y, z); | |
| public var ywyw (get, never):Vec4; public function get_ywyw() return Vec4.get(y, w, y, w); | |
| public var ywzx (get, never):Vec4; public function get_ywzx() return Vec4.get(y, w, z, x); | |
| public var ywzy (get, never):Vec4; public function get_ywzy() return Vec4.get(y, w, z, y); | |
| public var ywzz (get, never):Vec4; public function get_ywzz() return Vec4.get(y, w, z, z); | |
| public var ywzw (get, never):Vec4; public function get_ywzw() return Vec4.get(y, w, z, w); | |
| public var ywwx (get, never):Vec4; public function get_ywwx() return Vec4.get(y, w, w, x); | |
| public var ywwy (get, never):Vec4; public function get_ywwy() return Vec4.get(y, w, w, y); | |
| public var ywwz (get, never):Vec4; public function get_ywwz() return Vec4.get(y, w, w, z); | |
| public var ywww (get, never):Vec4; public function get_ywww() return Vec4.get(y, w, w, w); | |
| public var zxxx (get, never):Vec4; public function get_zxxx() return Vec4.get(z, x, x, x); | |
| public var zxxy (get, never):Vec4; public function get_zxxy() return Vec4.get(z, x, x, y); | |
| public var zxxz (get, never):Vec4; public function get_zxxz() return Vec4.get(z, x, x, z); | |
| public var zxxw (get, never):Vec4; public function get_zxxw() return Vec4.get(z, x, x, w); | |
| public var zxyx (get, never):Vec4; public function get_zxyx() return Vec4.get(z, x, y, x); | |
| public var zxyy (get, never):Vec4; public function get_zxyy() return Vec4.get(z, x, y, y); | |
| public var zxyz (get, never):Vec4; public function get_zxyz() return Vec4.get(z, x, y, z); | |
| public var zxyw (get, never):Vec4; public function get_zxyw() return Vec4.get(z, x, y, w); | |
| public var zxzx (get, never):Vec4; public function get_zxzx() return Vec4.get(z, x, z, x); | |
| public var zxzy (get, never):Vec4; public function get_zxzy() return Vec4.get(z, x, z, y); | |
| public var zxzz (get, never):Vec4; public function get_zxzz() return Vec4.get(z, x, z, z); | |
| public var zxzw (get, never):Vec4; public function get_zxzw() return Vec4.get(z, x, z, w); | |
| public var zxwx (get, never):Vec4; public function get_zxwx() return Vec4.get(z, x, w, x); | |
| public var zxwy (get, never):Vec4; public function get_zxwy() return Vec4.get(z, x, w, y); | |
| public var zxwz (get, never):Vec4; public function get_zxwz() return Vec4.get(z, x, w, z); | |
| public var zxww (get, never):Vec4; public function get_zxww() return Vec4.get(z, x, w, w); | |
| public var zyxx (get, never):Vec4; public function get_zyxx() return Vec4.get(z, y, x, x); | |
| public var zyxy (get, never):Vec4; public function get_zyxy() return Vec4.get(z, y, x, y); | |
| public var zyxz (get, never):Vec4; public function get_zyxz() return Vec4.get(z, y, x, z); | |
| public var zyxw (get, never):Vec4; public function get_zyxw() return Vec4.get(z, y, x, w); | |
| public var zyyx (get, never):Vec4; public function get_zyyx() return Vec4.get(z, y, y, x); | |
| public var zyyy (get, never):Vec4; public function get_zyyy() return Vec4.get(z, y, y, y); | |
| public var zyyz (get, never):Vec4; public function get_zyyz() return Vec4.get(z, y, y, z); | |
| public var zyyw (get, never):Vec4; public function get_zyyw() return Vec4.get(z, y, y, w); | |
| public var zyzx (get, never):Vec4; public function get_zyzx() return Vec4.get(z, y, z, x); | |
| public var zyzy (get, never):Vec4; public function get_zyzy() return Vec4.get(z, y, z, y); | |
| public var zyzz (get, never):Vec4; public function get_zyzz() return Vec4.get(z, y, z, z); | |
| public var zyzw (get, never):Vec4; public function get_zyzw() return Vec4.get(z, y, z, w); | |
| public var zywx (get, never):Vec4; public function get_zywx() return Vec4.get(z, y, w, x); | |
| public var zywy (get, never):Vec4; public function get_zywy() return Vec4.get(z, y, w, y); | |
| public var zywz (get, never):Vec4; public function get_zywz() return Vec4.get(z, y, w, z); | |
| public var zyww (get, never):Vec4; public function get_zyww() return Vec4.get(z, y, w, w); | |
| public var zzxx (get, never):Vec4; public function get_zzxx() return Vec4.get(z, z, x, x); | |
| public var zzxy (get, never):Vec4; public function get_zzxy() return Vec4.get(z, z, x, y); | |
| public var zzxz (get, never):Vec4; public function get_zzxz() return Vec4.get(z, z, x, z); | |
| public var zzxw (get, never):Vec4; public function get_zzxw() return Vec4.get(z, z, x, w); | |
| public var zzyx (get, never):Vec4; public function get_zzyx() return Vec4.get(z, z, y, x); | |
| public var zzyy (get, never):Vec4; public function get_zzyy() return Vec4.get(z, z, y, y); | |
| public var zzyz (get, never):Vec4; public function get_zzyz() return Vec4.get(z, z, y, z); | |
| public var zzyw (get, never):Vec4; public function get_zzyw() return Vec4.get(z, z, y, w); | |
| public var zzzx (get, never):Vec4; public function get_zzzx() return Vec4.get(z, z, z, x); | |
| public var zzzy (get, never):Vec4; public function get_zzzy() return Vec4.get(z, z, z, y); | |
| public var zzzz (get, never):Vec4; public function get_zzzz() return Vec4.get(z, z, z, z); | |
| public var zzzw (get, never):Vec4; public function get_zzzw() return Vec4.get(z, z, z, w); | |
| public var zzwx (get, never):Vec4; public function get_zzwx() return Vec4.get(z, z, w, x); | |
| public var zzwy (get, never):Vec4; public function get_zzwy() return Vec4.get(z, z, w, y); | |
| public var zzwz (get, never):Vec4; public function get_zzwz() return Vec4.get(z, z, w, z); | |
| public var zzww (get, never):Vec4; public function get_zzww() return Vec4.get(z, z, w, w); | |
| public var zwxx (get, never):Vec4; public function get_zwxx() return Vec4.get(z, w, x, x); | |
| public var zwxy (get, never):Vec4; public function get_zwxy() return Vec4.get(z, w, x, y); | |
| public var zwxz (get, never):Vec4; public function get_zwxz() return Vec4.get(z, w, x, z); | |
| public var zwxw (get, never):Vec4; public function get_zwxw() return Vec4.get(z, w, x, w); | |
| public var zwyx (get, never):Vec4; public function get_zwyx() return Vec4.get(z, w, y, x); | |
| public var zwyy (get, never):Vec4; public function get_zwyy() return Vec4.get(z, w, y, y); | |
| public var zwyz (get, never):Vec4; public function get_zwyz() return Vec4.get(z, w, y, z); | |
| public var zwyw (get, never):Vec4; public function get_zwyw() return Vec4.get(z, w, y, w); | |
| public var zwzx (get, never):Vec4; public function get_zwzx() return Vec4.get(z, w, z, x); | |
| public var zwzy (get, never):Vec4; public function get_zwzy() return Vec4.get(z, w, z, y); | |
| public var zwzz (get, never):Vec4; public function get_zwzz() return Vec4.get(z, w, z, z); | |
| public var zwzw (get, never):Vec4; public function get_zwzw() return Vec4.get(z, w, z, w); | |
| public var zwwx (get, never):Vec4; public function get_zwwx() return Vec4.get(z, w, w, x); | |
| public var zwwy (get, never):Vec4; public function get_zwwy() return Vec4.get(z, w, w, y); | |
| public var zwwz (get, never):Vec4; public function get_zwwz() return Vec4.get(z, w, w, z); | |
| public var zwww (get, never):Vec4; public function get_zwww() return Vec4.get(z, w, w, w); | |
| public var wxxx (get, never):Vec4; public function get_wxxx() return Vec4.get(w, x, x, x); | |
| public var wxxy (get, never):Vec4; public function get_wxxy() return Vec4.get(w, x, x, y); | |
| public var wxxz (get, never):Vec4; public function get_wxxz() return Vec4.get(w, x, x, z); | |
| public var wxxw (get, never):Vec4; public function get_wxxw() return Vec4.get(w, x, x, w); | |
| public var wxyx (get, never):Vec4; public function get_wxyx() return Vec4.get(w, x, y, x); | |
| public var wxyy (get, never):Vec4; public function get_wxyy() return Vec4.get(w, x, y, y); | |
| public var wxyz (get, never):Vec4; public function get_wxyz() return Vec4.get(w, x, y, z); | |
| public var wxyw (get, never):Vec4; public function get_wxyw() return Vec4.get(w, x, y, w); | |
| public var wxzx (get, never):Vec4; public function get_wxzx() return Vec4.get(w, x, z, x); | |
| public var wxzy (get, never):Vec4; public function get_wxzy() return Vec4.get(w, x, z, y); | |
| public var wxzz (get, never):Vec4; public function get_wxzz() return Vec4.get(w, x, z, z); | |
| public var wxzw (get, never):Vec4; public function get_wxzw() return Vec4.get(w, x, z, w); | |
| public var wxwx (get, never):Vec4; public function get_wxwx() return Vec4.get(w, x, w, x); | |
| public var wxwy (get, never):Vec4; public function get_wxwy() return Vec4.get(w, x, w, y); | |
| public var wxwz (get, never):Vec4; public function get_wxwz() return Vec4.get(w, x, w, z); | |
| public var wxww (get, never):Vec4; public function get_wxww() return Vec4.get(w, x, w, w); | |
| public var wyxx (get, never):Vec4; public function get_wyxx() return Vec4.get(w, y, x, x); | |
| public var wyxy (get, never):Vec4; public function get_wyxy() return Vec4.get(w, y, x, y); | |
| public var wyxz (get, never):Vec4; public function get_wyxz() return Vec4.get(w, y, x, z); | |
| public var wyxw (get, never):Vec4; public function get_wyxw() return Vec4.get(w, y, x, w); | |
| public var wyyx (get, never):Vec4; public function get_wyyx() return Vec4.get(w, y, y, x); | |
| public var wyyy (get, never):Vec4; public function get_wyyy() return Vec4.get(w, y, y, y); | |
| public var wyyz (get, never):Vec4; public function get_wyyz() return Vec4.get(w, y, y, z); | |
| public var wyyw (get, never):Vec4; public function get_wyyw() return Vec4.get(w, y, y, w); | |
| public var wyzx (get, never):Vec4; public function get_wyzx() return Vec4.get(w, y, z, x); | |
| public var wyzy (get, never):Vec4; public function get_wyzy() return Vec4.get(w, y, z, y); | |
| public var wyzz (get, never):Vec4; public function get_wyzz() return Vec4.get(w, y, z, z); | |
| public var wyzw (get, never):Vec4; public function get_wyzw() return Vec4.get(w, y, z, w); | |
| public var wywx (get, never):Vec4; public function get_wywx() return Vec4.get(w, y, w, x); | |
| public var wywy (get, never):Vec4; public function get_wywy() return Vec4.get(w, y, w, y); | |
| public var wywz (get, never):Vec4; public function get_wywz() return Vec4.get(w, y, w, z); | |
| public var wyww (get, never):Vec4; public function get_wyww() return Vec4.get(w, y, w, w); | |
| public var wzxx (get, never):Vec4; public function get_wzxx() return Vec4.get(w, z, x, x); | |
| public var wzxy (get, never):Vec4; public function get_wzxy() return Vec4.get(w, z, x, y); | |
| public var wzxz (get, never):Vec4; public function get_wzxz() return Vec4.get(w, z, x, z); | |
| public var wzxw (get, never):Vec4; public function get_wzxw() return Vec4.get(w, z, x, w); | |
| public var wzyx (get, never):Vec4; public function get_wzyx() return Vec4.get(w, z, y, x); | |
| public var wzyy (get, never):Vec4; public function get_wzyy() return Vec4.get(w, z, y, y); | |
| public var wzyz (get, never):Vec4; public function get_wzyz() return Vec4.get(w, z, y, z); | |
| public var wzyw (get, never):Vec4; public function get_wzyw() return Vec4.get(w, z, y, w); | |
| public var wzzx (get, never):Vec4; public function get_wzzx() return Vec4.get(w, z, z, x); | |
| public var wzzy (get, never):Vec4; public function get_wzzy() return Vec4.get(w, z, z, y); | |
| public var wzzz (get, never):Vec4; public function get_wzzz() return Vec4.get(w, z, z, z); | |
| public var wzzw (get, never):Vec4; public function get_wzzw() return Vec4.get(w, z, z, w); | |
| public var wzwx (get, never):Vec4; public function get_wzwx() return Vec4.get(w, z, w, x); | |
| public var wzwy (get, never):Vec4; public function get_wzwy() return Vec4.get(w, z, w, y); | |
| public var wzwz (get, never):Vec4; public function get_wzwz() return Vec4.get(w, z, w, z); | |
| public var wzww (get, never):Vec4; public function get_wzww() return Vec4.get(w, z, w, w); | |
| public var wwxx (get, never):Vec4; public function get_wwxx() return Vec4.get(w, w, x, x); | |
| public var wwxy (get, never):Vec4; public function get_wwxy() return Vec4.get(w, w, x, y); | |
| public var wwxz (get, never):Vec4; public function get_wwxz() return Vec4.get(w, w, x, z); | |
| public var wwxw (get, never):Vec4; public function get_wwxw() return Vec4.get(w, w, x, w); | |
| public var wwyx (get, never):Vec4; public function get_wwyx() return Vec4.get(w, w, y, x); | |
| public var wwyy (get, never):Vec4; public function get_wwyy() return Vec4.get(w, w, y, y); | |
| public var wwyz (get, never):Vec4; public function get_wwyz() return Vec4.get(w, w, y, z); | |
| public var wwyw (get, never):Vec4; public function get_wwyw() return Vec4.get(w, w, y, w); | |
| public var wwzx (get, never):Vec4; public function get_wwzx() return Vec4.get(w, w, z, x); | |
| public var wwzy (get, never):Vec4; public function get_wwzy() return Vec4.get(w, w, z, y); | |
| public var wwzz (get, never):Vec4; public function get_wwzz() return Vec4.get(w, w, z, z); | |
| public var wwzw (get, never):Vec4; public function get_wwzw() return Vec4.get(w, w, z, w); | |
| public var wwwx (get, never):Vec4; public function get_wwwx() return Vec4.get(w, w, w, x); | |
| public var wwwy (get, never):Vec4; public function get_wwwy() return Vec4.get(w, w, w, y); | |
| public var wwwz (get, never):Vec4; public function get_wwwz() return Vec4.get(w, w, w, z); | |
| public var wwww (get, never):Vec4; public function get_wwww() return Vec4.get(w, w, w, w); | |
| } | |
| private class Vec4Tests | |
| { | |
| public static function run() | |
| { | |
| var pass = true; | |
| pass = pass && vector_variables(); | |
| pass = pass && vector_methods(); | |
| pass = pass && operators(); | |
| if (pass) trace('All tests passsed!'); | |
| } | |
| static function vector_variables():Bool | |
| { | |
| var pass = true; | |
| var v1 = Vec4.get(1, 2, 3, 4); | |
| var v2 = Vec4.get().copy_from(v1); | |
| var v3 = Vec4.get().copy_from(v1); | |
| v2.x = 0.5; | |
| v3.y = 100; | |
| pass = pass && eval('Color', v2.x == 0.5); | |
| pass = pass && eval('Rect', v3.y == 100); | |
| return pass; | |
| } | |
| static function vector_methods():Bool | |
| { | |
| var pass = true; | |
| var v1 = Vec4.get(1, 2, 3, 4); | |
| var v2 = Vec4.get().copy_from(v1); | |
| var v3 = Vec4.get(0.5, 0.5, 0.5, 1); | |
| v2.z = 0; | |
| pass = pass && eval('Copy', v1.copy().equals(v1) && v2.copy() != v2); | |
| pass = pass && eval('Area', (cast v1:Rect).area() == 12); | |
| pass = pass && eval('Is Empty', (cast v2:Rect).is_empty()); | |
| pass = pass && eval('Contains Point', (cast v1:Rect).contains_point([2, 4]) && !(cast v1:Rect).contains_point([0, 0])); | |
| pass = pass && eval('Equals', v1.equals([1, 2, 3, 4])); | |
| pass = pass && eval('RGBA to Hex', (cast v3:Color).rgba_to_hex() == 0xFF808080); | |
| pass = pass && eval('Intersection', (cast v1:Rect).intersection([2, 3, 3, 4]).equals([2, 3, 2, 3])); | |
| return pass; | |
| } | |
| static function operators():Bool | |
| { | |
| var pass = true; | |
| pass = pass && eval('Vector Addition', (Vec4.get(0, 1, 2, 3) + Vec4.get(0, 1, 2, 3)).equals([0, 2, 4, 6])); | |
| pass = pass && eval('Vector Subtraction', (Vec4.get(0, 1, 2, 3) - Vec4.get(3, 2, 1, 0)).equals([-3, -1, 1, 3])); | |
| pass = pass && eval('Vector Multiplication', (Vec4.get(1, 1, 2, 2) * [2, 2, 3, 3]).equals([2, 2, 6, 6])); | |
| pass = pass && eval('Vector Division', (Vec4.get(4, 4, 8, 8) / [2, 2, 4, 4]).equals([2, 2, 2, 2])); | |
| pass = pass && eval('Vector Modulo', (Vec4.get(3, 4, 5, 6) % [2, 2, 2, 2]).equals([1, 0, 1, 0])); | |
| pass = pass && eval('Float Addition', (Vec4.get(0, 1, 2, 3) + 1).equals([1, 2, 3, 4])); | |
| pass = pass && eval('Float Subtraction', (Vec4.get(0, 1, 2, 3) - 1).equals([-1, 0, 1, 2])); | |
| pass = pass && eval('Float Multiplication', (Vec4.get(1, 1, 2, 2) * 2).equals([2, 2, 4, 4])); | |
| pass = pass && eval('Float Division', (Vec4.get(4, 4, 6, 6) / 2).equals([2, 2, 3, 3])); | |
| pass = pass && eval('Float Modulo', (Vec4.get(3, 4, 5, 6) % 2).equals([1, 0, 1, 0])); | |
| return pass; | |
| } | |
| static function eval(name:String, exp:Bool) | |
| { | |
| if (!exp) trace('$name test failed!'); | |
| return exp; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment