Skip to content

Instantly share code, notes, and snippets.

@01010111
Last active July 12, 2019 21:06
Show Gist options
  • Select an option

  • Save 01010111/ac0687f0a2afb6a8158270a2d91b4ebf to your computer and use it in GitHub Desktop.

Select an option

Save 01010111/ac0687f0a2afb6a8158270a2d91b4ebf to your computer and use it in GitHub Desktop.
Vector class
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