Started a rework.
-Upgraded: LWJGL3 to version 3.3.2 -Changed: Reworked to new formatting that i like. -Started: New Gui System
This commit is contained in:
		
							parent
							
								
									30b0cd7eb7
								
							
						
					
					
						commit
						ba143d7d83
					
				| @ -1,4 +1,4 @@ | ||||
| org.gradle.jvmargs=-Xmx2G | ||||
| 
 | ||||
| lwjglVersion = 3.2.4-SNAPSHOT | ||||
| lwjglVersion = 3.3.2 | ||||
| lwjglNatives = natives-windows | ||||
| @ -14,10 +14,8 @@ public interface Vec | ||||
| 	public Vec abs(); | ||||
| 	public Vec negate(); | ||||
| 	public Vec invert(); | ||||
| 	 | ||||
| 	public Vec store(ByteBuffer buffer);	 | ||||
| 	public Vec load(ByteBuffer buffer); | ||||
| 	 | ||||
| 	public boolean isMutable(); | ||||
| 	public Vec asMutable(); | ||||
| 	public Vec copyAsMutable(); | ||||
|  | ||||
| @ -13,9 +13,4 @@ public class VectorUtil | ||||
| 		float l3 = 1.0f - l1 - l2; | ||||
| 		return l1 * p1.getY() + l2 * p2.getY() + l3 * p3.getY(); | ||||
| 	} | ||||
| 	 | ||||
| 	public static float fma(float x, float y, float z) | ||||
| 	{ | ||||
| 		return x * y + z; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -9,82 +9,71 @@ import speiger.src.coreengine.math.vector.ints.Vec2i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec2l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec2s; | ||||
| 
 | ||||
| 
 | ||||
| public interface Vec2b extends Vecb | ||||
| { | ||||
| public interface Vec2b extends Vecb { | ||||
| 	public static final Vec2b ZERO = of(); | ||||
| 	public static final Vec2b MINUS_ONE = of((byte)-1); | ||||
| 	public static final Vec2b ONE = of((byte)1); | ||||
| 	 | ||||
| 	public static Vec2b mutable(){return new Vec2bMutable();} | ||||
| 	public static Vec2b mutable(byte value){return new Vec2bMutable(value);} | ||||
| 	public static Vec2b mutable(byte x, byte y){return new Vec2bMutable(x, y);} | ||||
| 	public static Vec2b mutable(Vec2b value){return mutable(value.getX(), value.getY());} | ||||
| 	public static Vec2b mutable() { return new Vec2bMutable(); } | ||||
| 	public static Vec2b mutable(byte value) { return new Vec2bMutable(value); } | ||||
| 	public static Vec2b mutable(byte x, byte y) { return new Vec2bMutable(x, y); } | ||||
| 	public static Vec2b mutable(Vec2b value) { return mutable(value.getX(), value.getY()); } | ||||
| 	 | ||||
| 	public static Vec2b of(){return new Vec2bImmutable();} | ||||
| 	public static Vec2b of(byte value){return new Vec2bImmutable(value);} | ||||
| 	public static Vec2b of(byte x, byte y){return new Vec2bImmutable(x, y);} | ||||
| 	public static Vec2b of(Vec2b value){return of(value.getX(), value.getY());} | ||||
| 	public static Vec2b of() { return new Vec2bImmutable(); } | ||||
| 	public static Vec2b of(byte value) { return new Vec2bImmutable(value); } | ||||
| 	public static Vec2b of(byte x, byte y) { return new Vec2bImmutable(x, y); } | ||||
| 	public static Vec2b of(Vec2b value) { return of(value.getX(), value.getY()); } | ||||
| 	 | ||||
| 	public byte getX(); | ||||
| 	public byte getY(); | ||||
| 	public Vec2b setX(byte x); | ||||
| 	public Vec2b setY(byte y); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default byte[] asArray(){return new byte[]{getX(), getY()};} | ||||
| 	public default byte[] asArray() { return new byte[] {getX(), getY()}; } | ||||
| 	@Override | ||||
| 	public Vec2b copy(); | ||||
| 	@Override | ||||
| 	public default Vec2b abs(){return set((byte)Math.abs(getX()), (byte)Math.abs(getY()));} | ||||
| 	public default Vec2b abs() { return set((byte)Math.abs(getX()), (byte)Math.abs(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2b negate(){return set((byte)0, (byte)0);} | ||||
| 	public default Vec2b negate() { return set((byte)0, (byte)0); } | ||||
| 	@Override | ||||
| 	public default Vec2b invert(){return set((byte)(-getX()), (byte)(-getY()));}; | ||||
| 	 | ||||
| 	public default Vec2b invert() { return set((byte)(-getX()), (byte)(-getY())); }; | ||||
| 	@Override | ||||
| 	public default Vec2b add(byte value) {return add(value, value);} | ||||
| 	public default Vec2b add(Vec2b value) {return add(value.getX(), value.getY());} | ||||
| 	public default Vec2b add(byte x, byte y) {return set((byte)(x + getX()), (byte)(y + getY()));} | ||||
| 	 | ||||
| 	public default Vec2b add(byte value) { return add(value, value); } | ||||
| 	public default Vec2b add(Vec2b value) { return add(value.getX(), value.getY()); } | ||||
| 	public default Vec2b add(byte x, byte y) { return set((byte)(x + getX()), (byte)(y + getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2b sub(byte value){return sub(value, value);} | ||||
| 	public default Vec2b sub(Vec2b value){return sub(value.getX(), value.getY());} | ||||
| 	public default Vec2b sub(byte x, byte y) {return set((byte)(getX() - x), (byte)(getY() - y));} | ||||
| 	 | ||||
| 	public default Vec2b sub(byte value) { return sub(value, value); } | ||||
| 	public default Vec2b sub(Vec2b value) { return sub(value.getX(), value.getY()); } | ||||
| 	public default Vec2b sub(byte x, byte y) { return set((byte)(getX() - x), (byte)(getY() - y)); } | ||||
| 	@Override | ||||
| 	public default Vec2b multiply(byte value){return multiply(value, value);} | ||||
| 	public default Vec2b multiply(Vec2b value){return multiply(value.getX(), value.getY());} | ||||
| 	public default Vec2b multiply(byte x, byte y) {return set((byte)(x * getX()), (byte)(y * getY()));} | ||||
| 	 | ||||
| 	public default Vec2b multiply(byte value) { return multiply(value, value); } | ||||
| 	public default Vec2b multiply(Vec2b value) { return multiply(value.getX(), value.getY()); } | ||||
| 	public default Vec2b multiply(byte x, byte y) { return set((byte)(x * getX()), (byte)(y * getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2b devide(byte value){return devide(value, value);} | ||||
| 	public default Vec2b devide(Vec2b value){return devide(value.getX(), value.getY());} | ||||
| 	public default Vec2b devide(byte x, byte y){return set((byte)(getX() / x), (byte)(getY() / y));} | ||||
| 	 | ||||
| 	public default Vec2b devide(byte value) { return devide(value, value); } | ||||
| 	public default Vec2b devide(Vec2b value) { return devide(value.getX(), value.getY()); } | ||||
| 	public default Vec2b devide(byte x, byte y) { return set((byte)(getX() / x), (byte)(getY() / y)); } | ||||
| 	@Override | ||||
| 	public default Vec2b set(byte value){return set(value, value);}; | ||||
| 	public default Vec2b set(Vec2b value){return set(value.getX(), value.getY());} | ||||
| 	public default Vec2b set(byte value) { return set(value, value); }; | ||||
| 	public default Vec2b set(Vec2b value) { return set(value.getX(), value.getY()); } | ||||
| 	public Vec2b set(byte x, byte y); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec2b value){return distanceTo(value.getX(), value.getY());} | ||||
| 	public default double distanceTo(byte x, byte y){return Math.sqrt(distanceToSquared(x, y));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec2b value){return distanceToSquared(value.getX(), value.getY());} | ||||
| 	public default long distanceToSquared(byte x, byte y) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec2b value) { return distanceTo(value.getX(), value.getY()); } | ||||
| 	public default double distanceTo(byte x, byte y) { return Math.sqrt(distanceToSquared(x, y)); } | ||||
| 	public default long distanceToSquared(Vec2b value) { return distanceToSquared(value.getX(), value.getY()); } | ||||
| 	public default long distanceToSquared(byte x, byte y) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		return (xPos * xPos) + (yPos * yPos); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY());} | ||||
| 	 | ||||
| 	public default long dotProduct(Vec2b value){return dotProduct(value.getX(), value.getY());} | ||||
| 	public default long dotProduct(byte x, byte y){return (getX() * x) + (getY() * y);} | ||||
| 	 | ||||
| 	public default Vec2b rotate(byte angle, Vec2b center){return rotate(angle, center.getX(), center.getY());} | ||||
| 	public default Vec2b rotate(byte angle, byte x, byte y) | ||||
| 	{ | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()); } | ||||
| 	public default long dotProduct(Vec2b value) { return dotProduct(value.getX(), value.getY()); } | ||||
| 	public default long dotProduct(byte x, byte y) { return (getX() * x) + (getY() * y); } | ||||
| 	public default Vec2b rotate(byte angle, Vec2b center) { return rotate(angle, center.getX(), center.getY()); } | ||||
| 	public default Vec2b rotate(byte angle, byte x, byte y) { | ||||
| 		byte xPos = (byte)(getX() - x); | ||||
| 		byte yPos = (byte)(getY() - y); | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| @ -92,58 +81,48 @@ public interface Vec2b extends Vecb | ||||
| 		return set((byte)((xPos * cos) + (yPos * sin) + x), (byte)(-(xPos * sin) + (yPos * cos) + y)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2b min(Vec2b other) {return min(other, this);} | ||||
| 	public default Vec2b min(Vec2b other, Vec2b result){return min(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2b min(byte x, byte y) {return min(x, y, this);} | ||||
| 	public default Vec2b min(byte x, byte y, Vec2b result){return result.set((byte)Math.min(getX(), x), (byte)Math.min(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2b max(Vec2b other) {return max(other, this);} | ||||
| 	public default Vec2b max(Vec2b other, Vec2b result){return max(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2b max(byte x, byte y) {return max(x, y, this);} | ||||
| 	public default Vec2b max(byte x, byte y, Vec2b result){return result.set((byte)Math.max(getX(), x), (byte)Math.max(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2b difference(Vec2b other) {return difference(other, this);} | ||||
| 	public default Vec2b difference(Vec2b other, Vec2b result){return difference(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2b difference(byte x, byte y) {return difference(x, y, this);} | ||||
| 	public default Vec2b difference(byte x, byte y, Vec2b result){return result.set((byte)(getX() - x), (byte)(getY() - y));} | ||||
| 	 | ||||
| 	public default Vec2b min(Vec2b other) { return min(other, this); } | ||||
| 	public default Vec2b min(Vec2b other, Vec2b result) { return min(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2b min(byte x, byte y) { return min(x, y, this); } | ||||
| 	public default Vec2b min(byte x, byte y, Vec2b result) { return result.set((byte)Math.min(getX(), x), (byte)Math.min(getY(), y)); } | ||||
| 	public default Vec2b max(Vec2b other) { return max(other, this); } | ||||
| 	public default Vec2b max(Vec2b other, Vec2b result) { return max(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2b max(byte x, byte y) { return max(x, y, this); } | ||||
| 	public default Vec2b max(byte x, byte y, Vec2b result) { return result.set((byte)Math.max(getX(), x), (byte)Math.max(getY(), y)); } | ||||
| 	public default Vec2b difference(Vec2b other) { return difference(other, this); } | ||||
| 	public default Vec2b difference(Vec2b other, Vec2b result) { return difference(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2b difference(byte x, byte y) { return difference(x, y, this); } | ||||
| 	public default Vec2b difference(byte x, byte y, Vec2b result) { return result.set((byte)(getX() - x), (byte)(getY() - y)); } | ||||
| 	@Override | ||||
| 	public default Vec2b clamp(byte min, byte max){return clamp(min, max, ALL);} | ||||
| 	public default Vec2b clamp(byte min, byte max, Vec2b result){return clamp(min, max, result, ALL);} | ||||
| 	public default Vec2b clamp(byte min, byte max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec2b clamp(byte min, byte max, Vec2b result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec2b clamp(byte min, byte max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec2b clamp(byte min, byte max, Vec2b result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()));} | ||||
| 	 | ||||
| 	public default Vec2b clamp(byte min, byte max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec2b clamp(byte min, byte max, Vec2b result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2b store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec2b store(ByteBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	@Override | ||||
| 	public default Vec2b load(ByteBuffer buffer) { return set(buffer.get(), buffer.get()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2b load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2s asShort() { return isMutable() ? Vec2s.mutable(getX(), getY()) : Vec2s.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2s asShort(){return isMutable() ? Vec2s.mutable(getX(), getY()) : Vec2s.of(getX(), getY());} | ||||
| 	public default Vec2i asInt() { return isMutable() ? Vec2i.mutable(getX(), getY()) : Vec2i.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2i asInt(){return isMutable() ? Vec2i.mutable(getX(), getY()) : Vec2i.of(getX(), getY());} | ||||
| 	public default Vec2l asLong() { return isMutable() ? Vec2l.mutable(getX(), getY()) : Vec2l.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2l asLong(){return isMutable() ? Vec2l.mutable(getX(), getY()) : Vec2l.of(getX(), getY());} | ||||
| 	public default Vec2f asFloat() { return isMutable() ? Vec2f.mutable(getX(), getY()) : Vec2f.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2f asFloat() {return isMutable() ? Vec2f.mutable(getX(), getY()) : Vec2f.of(getX(), getY());} | ||||
| 	public default Vec2d asDouble() { return isMutable() ? Vec2d.mutable(getX(), getY()) : Vec2d.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2d asDouble(){return isMutable() ? Vec2d.mutable(getX(), getY()) : Vec2d.of(getX(), getY());} | ||||
| 	 | ||||
| 	public default Vec2b asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec2b asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec2b asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec2b asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec2b copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec2b copyAsMutable(){return mutable(this);} | ||||
| 	@Override | ||||
| 	public default Vec2b copyAsImmutable(){return of(this);} | ||||
| 	public default Vec2b copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,82 +2,44 @@ package speiger.src.coreengine.math.vector.bytes; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2bImmutable implements Vec2b | ||||
| { | ||||
| public class Vec2bImmutable implements Vec2b { | ||||
| 	final byte x; | ||||
| 	final byte y; | ||||
| 	 | ||||
| 	public Vec2bImmutable() | ||||
| 	{ | ||||
| 	public Vec2bImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2bImmutable(byte value) | ||||
| 	{ | ||||
| 	public Vec2bImmutable(byte value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2bImmutable(byte x, byte y) | ||||
| 	{ | ||||
| 	public Vec2bImmutable(byte x, byte y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public byte getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	public byte getX() { return x; } | ||||
| 	@Override | ||||
| 	public byte getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	public byte getY() { return y; } | ||||
| 	@Override | ||||
| 	public Vec2b setX(byte x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec2b.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2b setX(byte x) { return this.x == x ? this : Vec2b.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2b setY(byte y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec2b.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2b setY(byte y) { return this.y == y ? this : Vec2b.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2b copy() | ||||
| 	{ | ||||
| 		return Vec2b.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2b copy() { return Vec2b.of(this); } | ||||
| 	@Override | ||||
| 	public Vec2b set(byte x, byte y) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y ? this : Vec2b.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2b set(byte x, byte y) { return this.x == x && this.y == y ? this : Vec2b.of(x, y); } | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 
 | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2b) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2b) { | ||||
| 			Vec2b vec = (Vec2b)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -85,8 +47,5 @@ public class Vec2bImmutable implements Vec2b | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2b[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2b[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,84 +2,57 @@ package speiger.src.coreengine.math.vector.bytes; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2bMutable implements Vec2b | ||||
| { | ||||
| public class Vec2bMutable implements Vec2b { | ||||
| 	byte x; | ||||
| 	byte y; | ||||
| 	 | ||||
| 	public Vec2bMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec2bMutable() {} | ||||
| 	 | ||||
| 	public Vec2bMutable(byte value) | ||||
| 	{ | ||||
| 	public Vec2bMutable(byte value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2bMutable(byte x, byte y) | ||||
| 	{ | ||||
| 	public Vec2bMutable(byte x, byte y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public byte getX() { return x; } | ||||
| 	@Override | ||||
| 	public byte getY() { return y; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2b setX(byte x) | ||||
| 	{ | ||||
| 	public Vec2b setX(byte x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2b setY(byte y) | ||||
| 	{ | ||||
| 	public Vec2b setY(byte y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2b copy() | ||||
| 	{ | ||||
| 		return Vec2b.mutable(this); | ||||
| 	} | ||||
| 	public Vec2b copy() { return Vec2b.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2b set(byte x, byte y) | ||||
| 	{ | ||||
| 	public Vec2b set(byte x, byte y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2b) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2b) { | ||||
| 			Vec2b vec = (Vec2b)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -87,8 +60,5 @@ public class Vec2bMutable implements Vec2b | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2b[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2b[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -9,21 +9,19 @@ import speiger.src.coreengine.math.vector.ints.Vec3i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec3l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec3s; | ||||
| 
 | ||||
| public interface Vec3b extends Vecb | ||||
| { | ||||
| public interface Vec3b extends Vecb { | ||||
| 	public static final Vec3b ZERO = of(); | ||||
| 	public static final Vec3b MINUS_ONE = of((byte)-1); | ||||
| 	public static final Vec3b ONE = of((byte)1); | ||||
| 	 | ||||
| 	public static Vec3b mutable(){return new Vec3bMutable();} | ||||
| 	public static Vec3b mutable(byte value){return new Vec3bMutable(value);} | ||||
| 	public static Vec3b mutable(byte x, byte y, byte z){return new Vec3bMutable(x, y, z);} | ||||
| 	public static Vec3b mutable(Vec3b vec){return mutable(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	 | ||||
| 	public static Vec3b of(){return new Vec3bImmutable();} | ||||
| 	public static Vec3b of(byte value){return new Vec3bImmutable(value);} | ||||
| 	public static Vec3b of(byte x, byte y, byte z){return new Vec3bImmutable(x, y, z);} | ||||
| 	public static Vec3b of(Vec3b vec){return of(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	public static Vec3b mutable() { return new Vec3bMutable(); } | ||||
| 	public static Vec3b mutable(byte value) { return new Vec3bMutable(value); } | ||||
| 	public static Vec3b mutable(byte x, byte y, byte z) { return new Vec3bMutable(x, y, z); } | ||||
| 	public static Vec3b mutable(Vec3b vec) { return mutable(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	public static Vec3b of() { return new Vec3bImmutable(); } | ||||
| 	public static Vec3b of(byte value) { return new Vec3bImmutable(value); } | ||||
| 	public static Vec3b of(byte x, byte y, byte z) { return new Vec3bImmutable(x, y, z); } | ||||
| 	public static Vec3b of(Vec3b vec) { return of(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	 | ||||
| 	public byte getX(); | ||||
| 	public byte getY(); | ||||
| @ -31,111 +29,95 @@ public interface Vec3b extends Vecb | ||||
| 	public Vec3b setX(byte x); | ||||
| 	public Vec3b setY(byte y); | ||||
| 	public Vec3b setZ(byte z); | ||||
| 	@Override | ||||
| 	public default byte[] asArray(){return new byte[]{getX(), getY(), getZ()};} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default byte[] asArray() { return new byte[] {getX(), getY(), getZ()}; } | ||||
| 	@Override | ||||
| 	public Vec3b copy(); | ||||
| 	@Override | ||||
| 	public default Vec3b abs(){return set((byte)Math.abs(getX()), (byte)Math.abs(getY()), (byte)Math.abs(getZ()));} | ||||
| 	public default Vec3b abs() { return set((byte)Math.abs(getX()), (byte)Math.abs(getY()), (byte)Math.abs(getZ())); } | ||||
| 	@Override | ||||
| 	public default Vec3b negate(){return set((byte)0, (byte)0, (byte)0);} | ||||
| 	public default Vec3b negate() { return set((byte)0, (byte)0, (byte)0); } | ||||
| 	@Override | ||||
| 	public default Vec3b invert(){return set((byte)-getX(), (byte)-getY(), (byte)-getZ());} | ||||
| 	public default Vec3b invert() { return set((byte)-getX(), (byte)-getY(), (byte)-getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3b add(byte value){return add(value, value, value);}	 | ||||
| 	public default Vec3b add(Vec3b value){return add(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3b add(byte x, byte y, byte z){return set((byte)(getX() + x), (byte)(getY() + y), (byte)(getZ() + z));} | ||||
| 
 | ||||
| 	public default Vec3b add(byte value) { return add(value, value, value); } | ||||
| 	public default Vec3b add(Vec3b value) { return add(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3b add(byte x, byte y, byte z) { return set((byte)(getX() + x), (byte)(getY() + y), (byte)(getZ() + z)); } | ||||
| 	@Override | ||||
| 	public default Vec3b sub(byte value){return sub(value, value, value);} | ||||
| 	public default Vec3b sub(Vec3b value){return sub(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3b sub(byte x, byte y, byte z){return set((byte)(getX() - x), (byte)(getY() - y), (byte)(getZ() - z));} | ||||
| 	 | ||||
| 	public default Vec3b sub(byte value) { return sub(value, value, value); } | ||||
| 	public default Vec3b sub(Vec3b value) { return sub(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3b sub(byte x, byte y, byte z) { return set((byte)(getX() - x), (byte)(getY() - y), (byte)(getZ() - z)); } | ||||
| 	@Override | ||||
| 	public default Vec3b multiply(byte value){return multiply(value, value, value);} | ||||
| 	public default Vec3b multiply(Vec3b value){return multiply(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3b multiply(byte x, byte y, byte z){return set((byte)(getX() * x), (byte)(getY() * y), (byte)(getZ() * z));} | ||||
| 
 | ||||
| 	public default Vec3b multiply(byte value) { return multiply(value, value, value); } | ||||
| 	public default Vec3b multiply(Vec3b value) { return multiply(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3b multiply(byte x, byte y, byte z) { return set((byte)(getX() * x), (byte)(getY() * y), (byte)(getZ() * z)); } | ||||
| 	@Override | ||||
| 	public default Vec3b devide(byte value){return devide(value, value, value);} | ||||
| 	public default Vec3b devide(Vec3b value){return devide(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3b devide(byte x, byte y, byte z){return set((byte)(getX() / x), (byte)(getY() / y), (byte)(getZ() / z));} | ||||
| 	 | ||||
| 	public default Vec3b devide(byte value) { return devide(value, value, value); } | ||||
| 	public default Vec3b devide(Vec3b value) { return devide(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3b devide(byte x, byte y, byte z) { return set((byte)(getX() / x), (byte)(getY() / y), (byte)(getZ() / z)); } | ||||
| 	@Override | ||||
| 	public default Vec3b set(byte value){return set(value, value, value);} | ||||
| 	public default Vec3b set(Vec3b value){return set(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3b set(byte value) { return set(value, value, value); } | ||||
| 	public default Vec3b set(Vec3b value) { return set(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public Vec3b set(byte x, byte y, byte z); | ||||
| 	public default double distanceTo(Vec3b value) { return distanceTo(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default double distanceTo(byte x, byte y, byte z) { return Math.sqrt(distanceToSquared(x, y, z)); } | ||||
| 	public default long distanceToSquared(Vec3b value) { return distanceToSquared(value.getX(), value.getY(), value.getZ()); } | ||||
| 	 | ||||
| 	public default double distanceTo(Vec3b value){return distanceTo(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double distanceTo(byte x, byte y, byte z){return Math.sqrt(distanceToSquared(x, y, z));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec3b value){return distanceToSquared(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default long distanceToSquared(byte x, byte y, byte z) | ||||
| 	{ | ||||
| 	public default long distanceToSquared(byte x, byte y, byte z) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		long zPos = getZ() - z; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos); | ||||
| 	} | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ());} | ||||
| 	 | ||||
| 	public default long dotProduct(Vec3b value){return dotProduct(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default long dotProduct(byte x, byte y, byte z){return (getX() * x) + (getY() * y) + (getZ() * z);} | ||||
| 	 | ||||
| 	public default Vec3b min(Vec3b other) {return min(other, this);} | ||||
| 	public default Vec3b min(Vec3b other, Vec3b result){return min(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3b min(byte x, byte y, byte z) {return min(x, y, z, this);} | ||||
| 	public default Vec3b min(byte x, byte y, byte z, Vec3b result){return result.set((byte)Math.min(getX(), x), (byte)Math.min(getY(), y), (byte)Math.min(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec3b max(Vec3b other) {return max(other, this);} | ||||
| 	public default Vec3b max(Vec3b other, Vec3b result){return max(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3b max(byte x, byte y, byte z) {return max(x, y, z, this);} | ||||
| 	public default Vec3b max(byte x, byte y, byte z, Vec3b result){return result.set((byte)Math.max(getX(), x), (byte)Math.max(getY(), y), (byte)Math.max(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec3b difference(Vec3b other) {return difference(other, this);} | ||||
| 	public default Vec3b difference(Vec3b other, Vec3b result){return difference(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3b difference(byte x, byte y, byte z) {return difference(x, y, z, this);} | ||||
| 	public default Vec3b difference(byte x, byte y, byte z, Vec3b result){return result.set((byte)(getX() - x), (byte)(getY() - y), (byte)(getZ() - z));} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3b clamp(byte min, byte max){return clamp(min, max, ALL);} | ||||
| 	public default Vec3b clamp(byte min, byte max, Vec3b result){return clamp(min, max, result, ALL);} | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()); } | ||||
| 	public default long dotProduct(Vec3b value) { return dotProduct(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default long dotProduct(byte x, byte y, byte z) { return (getX() * x) + (getY() * y) + (getZ() * z); } | ||||
| 	public default Vec3b min(Vec3b other) { return min(other, this); } | ||||
| 	public default Vec3b min(Vec3b other, Vec3b result) { return min(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3b min(byte x, byte y, byte z) { return min(x, y, z, this); } | ||||
| 	public default Vec3b min(byte x, byte y, byte z, Vec3b result) { return result.set((byte)Math.min(getX(), x), (byte)Math.min(getY(), y), (byte)Math.min(getZ(), z)); } | ||||
| 	public default Vec3b max(Vec3b other) { return max(other, this); } | ||||
| 	public default Vec3b max(Vec3b other, Vec3b result) { return max(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3b max(byte x, byte y, byte z) { return max(x, y, z, this); } | ||||
| 	public default Vec3b max(byte x, byte y, byte z, Vec3b result) { return result.set((byte)Math.max(getX(), x), (byte)Math.max(getY(), y), (byte)Math.max(getZ(), z)); } | ||||
| 	public default Vec3b difference(Vec3b other) { return difference(other, this); } | ||||
| 	public default Vec3b difference(Vec3b other, Vec3b result) { return difference(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3b difference(byte x, byte y, byte z) { return difference(x, y, z, this); } | ||||
| 	public default Vec3b difference(byte x, byte y, byte z, Vec3b result) { return result.set((byte)(getX() - x), (byte)(getY() - y), (byte)(getZ() - z)); } | ||||
| 	@Override | ||||
| 	public default Vec3b clamp(byte min, byte max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec3b clamp(byte min, byte max, Vec3b result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()));} | ||||
| 	public default Vec3b clamp(byte min, byte max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec3b clamp(byte min, byte max, Vec3b result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec3b clamp(byte min, byte max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec3b clamp(byte min, byte max, Vec3b result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3b store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3b store(ByteBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3b load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3b load(ByteBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec3s asShort(){return isMutable() ? Vec3s.mutable(getX(), getY(), getZ()) : Vec3s.of(getX(), getY(), getZ());} | ||||
| 	public default Vec3s asShort() { return isMutable() ? Vec3s.mutable(getX(), getY(), getZ()) : Vec3s.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3i asInt(){return isMutable() ? Vec3i.mutable(getX(), getY(), getZ()) : Vec3i.of(getX(), getY(), getZ());} | ||||
| 	public default Vec3i asInt() { return isMutable() ? Vec3i.mutable(getX(), getY(), getZ()) : Vec3i.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3l asLong(){return isMutable() ? Vec3l.mutable(getX(), getY(), getZ()) : Vec3l.of(getX(), getY(), getZ());} | ||||
| 	public default Vec3l asLong() { return isMutable() ? Vec3l.mutable(getX(), getY(), getZ()) : Vec3l.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3f asFloat() {return isMutable() ? Vec3f.mutable(getX(), getY(), getZ()) : Vec3f.of(getX(), getY(), getZ());} | ||||
| 	public default Vec3f asFloat() { return isMutable() ? Vec3f.mutable(getX(), getY(), getZ()) : Vec3f.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3d asDouble(){return isMutable() ? Vec3d.mutable(getX(), getY(), getZ()) : Vec3d.of(getX(), getY(), getZ());} | ||||
| 	 | ||||
| 	public default Vec3d asDouble() { return isMutable() ? Vec3d.mutable(getX(), getY(), getZ()) : Vec3d.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3b asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec3b asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec3b asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec3b asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec3b copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec3b copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec3b copyAsImmutable(){return of(this);} | ||||
| 	public default Vec3b copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,98 +2,52 @@ package speiger.src.coreengine.math.vector.bytes; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3bImmutable implements Vec3b | ||||
| { | ||||
| public class Vec3bImmutable implements Vec3b { | ||||
| 	final byte x; | ||||
| 	final byte y; | ||||
| 	final byte z; | ||||
| 	 | ||||
| 	public Vec3bImmutable() | ||||
| 	{ | ||||
| 	public Vec3bImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3bImmutable(byte value) | ||||
| 	{ | ||||
| 	public Vec3bImmutable(byte value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3bImmutable(byte x, byte y, byte z) | ||||
| 	{ | ||||
| 	public Vec3bImmutable(byte x, byte y, byte z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public byte getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	public byte getX() { return x; } | ||||
| 	@Override | ||||
| 	public byte getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	public byte getY() { return y; } | ||||
| 	@Override | ||||
| 	public byte getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	public byte getZ() { return z; } | ||||
| 	@Override | ||||
| 	public Vec3b setX(byte x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec3b.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3b setX(byte x) { return this.x == x ? this : Vec3b.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3b setY(byte y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec3b.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3b setY(byte y) { return this.y == y ? this : Vec3b.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3b setZ(byte z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec3b.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3b setZ(byte z) { return this.z == z ? this : Vec3b.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3b copy() | ||||
| 	{ | ||||
| 		return Vec3b.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3b copy() { return Vec3b.of(this); } | ||||
| 	@Override | ||||
| 	public Vec3b set(byte x, byte y, byte z) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z ? this : Vec3b.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3b set(byte x, byte y, byte z) { return this.x == x && this.y == y && this.z == z ? this : Vec3b.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 
 | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3b) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3b) { | ||||
| 			Vec3b vec = (Vec3b)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -101,8 +55,5 @@ public class Vec3bImmutable implements Vec3b | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3b[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3b[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,84 +2,57 @@ package speiger.src.coreengine.math.vector.bytes; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3bMutable implements Vec3b | ||||
| { | ||||
| public class Vec3bMutable implements Vec3b { | ||||
| 	byte x; | ||||
| 	byte y; | ||||
| 	byte z; | ||||
| 	 | ||||
| 	public Vec3bMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec3bMutable() {} | ||||
| 	 | ||||
| 	public Vec3bMutable(byte value) | ||||
| 	{ | ||||
| 	public Vec3bMutable(byte value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3bMutable(byte x, byte y, byte z) | ||||
| 	{ | ||||
| 	public Vec3bMutable(byte x, byte y, byte z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public byte getX() { return x; } | ||||
| 	@Override | ||||
| 	public byte getY() { return y; } | ||||
| 	@Override | ||||
| 	public byte getZ() { return z; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3b setX(byte x) | ||||
| 	{ | ||||
| 	public Vec3b setX(byte x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3b setY(byte y) | ||||
| 	{ | ||||
| 	public Vec3b setY(byte y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3b setZ(byte z) | ||||
| 	{ | ||||
| 	public Vec3b setZ(byte z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3b copy() | ||||
| 	{ | ||||
| 		return Vec3b.mutable(this); | ||||
| 	} | ||||
| 	public Vec3b copy() { return Vec3b.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3b set(byte x, byte y, byte z) | ||||
| 	{ | ||||
| 	public Vec3b set(byte x, byte y, byte z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -87,16 +60,11 @@ public class Vec3bMutable implements Vec3b | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3b) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3b) { | ||||
| 			Vec3b vec = (Vec3b)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -104,8 +72,5 @@ public class Vec3bMutable implements Vec3b | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3b[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3b[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -9,21 +9,19 @@ import speiger.src.coreengine.math.vector.ints.Vec4i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec4l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec4s; | ||||
| 
 | ||||
| public interface Vec4b extends Vecb | ||||
| { | ||||
| public interface Vec4b extends Vecb { | ||||
| 	public static final Vec4b ZERO = of(); | ||||
| 	public static final Vec4b MINUS_ONE = of((byte)-1); | ||||
| 	public static final Vec4b ONE = of((byte)1); | ||||
| 	 | ||||
| 	public static Vec4b mutable(){return new Vec4bMutable();} | ||||
| 	public static Vec4b mutable(byte value){return new Vec4bMutable(value);} | ||||
| 	public static Vec4b mutable(byte x, byte y, byte z, byte w){return new Vec4bMutable(x, y, z, w);} | ||||
| 	public static Vec4b mutable(Vec4b vec){return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	 | ||||
| 	public static Vec4b of(){return new Vec4bImmutable();} | ||||
| 	public static Vec4b of(byte value){return new Vec4bImmutable(value);} | ||||
| 	public static Vec4b of(byte x, byte y, byte z, byte w){return new Vec4bImmutable(x, y, z, w);} | ||||
| 	public static Vec4b of(Vec4b vec){return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	public static Vec4b mutable() { return new Vec4bMutable(); } | ||||
| 	public static Vec4b mutable(byte value) { return new Vec4bMutable(value); } | ||||
| 	public static Vec4b mutable(byte x, byte y, byte z, byte w) { return new Vec4bMutable(x, y, z, w); } | ||||
| 	public static Vec4b mutable(Vec4b vec) { return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	public static Vec4b of() { return new Vec4bImmutable(); } | ||||
| 	public static Vec4b of(byte value) { return new Vec4bImmutable(value); } | ||||
| 	public static Vec4b of(byte x, byte y, byte z, byte w) { return new Vec4bImmutable(x, y, z, w); } | ||||
| 	public static Vec4b of(Vec4b vec) { return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	 | ||||
| 	public byte getX(); | ||||
| 	public byte getY(); | ||||
| @ -33,113 +31,93 @@ public interface Vec4b extends Vecb | ||||
| 	public Vec4b setY(byte y); | ||||
| 	public Vec4b setZ(byte z); | ||||
| 	public Vec4b setW(byte w); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default byte[] asArray(){return new byte[]{getX(), getY(), getZ(), getW()};} | ||||
| 	public default byte[] asArray() { return new byte[] {getX(), getY(), getZ(), getW()}; } | ||||
| 	@Override | ||||
| 	public Vec4b copy(); | ||||
| 	@Override | ||||
| 	public default Vec4b abs(){return set((byte)Math.abs(getX()), (byte)Math.abs(getY()), (byte)Math.abs(getZ()), (byte)Math.abs(getW()));} | ||||
| 	public default Vec4b abs() { return set((byte)Math.abs(getX()), (byte)Math.abs(getY()), (byte)Math.abs(getZ()), (byte)Math.abs(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4b negate(){return set((byte)0, (byte)0, (byte)0, (byte)0);} | ||||
| 	public default Vec4b negate() { return set((byte)0, (byte)0, (byte)0, (byte)0); } | ||||
| 	@Override | ||||
| 	public default Vec4b invert(){return set((byte)-getX(), (byte)-getY(), (byte)-getZ(), (byte)-getW());} | ||||
| 	 | ||||
| 	public default Vec4b invert() { return set((byte)-getX(), (byte)-getY(), (byte)-getZ(), (byte)-getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4b add(byte value){return add(value, value, value, value);}	 | ||||
| 	public default Vec4b add(Vec4b value){return add(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4b add(byte x, byte y, byte z, byte w){return set((byte)(getX() + x), (byte)(getY() + y), (byte)(getZ() + z), (byte)(getW() + w));} | ||||
| 
 | ||||
| 	public default Vec4b add(byte value) { return add(value, value, value, value); } | ||||
| 	public default Vec4b add(Vec4b value) { return add(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4b add(byte x, byte y, byte z, byte w) { return set((byte)(getX() + x), (byte)(getY() + y), (byte)(getZ() + z), (byte)(getW() + w)); } | ||||
| 	@Override | ||||
| 	public default Vec4b sub(byte value){return sub(value, value, value, value);} | ||||
| 	public default Vec4b sub(Vec4b value){return sub(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4b sub(byte x, byte y, byte z, byte w){return set((byte)(getX() - x), (byte)(getY() - y), (byte)(getZ() - z), (byte)(getW() - w));} | ||||
| 	 | ||||
| 	public default Vec4b sub(byte value) { return sub(value, value, value, value); } | ||||
| 	public default Vec4b sub(Vec4b value) { return sub(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4b sub(byte x, byte y, byte z, byte w) { return set((byte)(getX() - x), (byte)(getY() - y), (byte)(getZ() - z), (byte)(getW() - w)); } | ||||
| 	@Override | ||||
| 	public default Vec4b multiply(byte value){return multiply(value, value, value, value);} | ||||
| 	public default Vec4b multiply(Vec4b value){return multiply(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4b multiply(byte x, byte y, byte z, byte w){return set((byte)(getX() * x), (byte)(getY() * y), (byte)(getZ() * z), (byte)(getW() * w));} | ||||
| 	 | ||||
| 	public default Vec4b multiply(byte value) { return multiply(value, value, value, value); } | ||||
| 	public default Vec4b multiply(Vec4b value) { return multiply(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4b multiply(byte x, byte y, byte z, byte w) { return set((byte)(getX() * x), (byte)(getY() * y), (byte)(getZ() * z), (byte)(getW() * w)); } | ||||
| 	@Override | ||||
| 	public default Vec4b devide(byte value){return devide(value, value, value, value);} | ||||
| 	public default Vec4b devide(Vec4b value){return devide(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4b devide(byte x, byte y, byte z, byte w){return set((byte)(getX() / x), (byte)(getY() / y), (byte)(getZ() / z), (byte)(getW() / w));} | ||||
| 	 | ||||
| 	public default Vec4b devide(byte value) { return devide(value, value, value, value); } | ||||
| 	public default Vec4b devide(Vec4b value) { return devide(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4b devide(byte x, byte y, byte z, byte w) { return set((byte)(getX() / x), (byte)(getY() / y), (byte)(getZ() / z), (byte)(getW() / w)); } | ||||
| 	@Override | ||||
| 	public default Vec4b set(byte value){return set(value, value, value, value);} | ||||
| 	public default Vec4b set(Vec4b value){return set(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4b set(byte value) { return set(value, value, value, value); } | ||||
| 	public default Vec4b set(Vec4b value) { return set(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public Vec4b set(byte x, byte y, byte z, byte w); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec4b value){return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double distanceTo(byte x, byte y, byte z, byte w){return Math.sqrt(distanceTo(x, y, z, w));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec4b value){return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default long distanceToSquared(byte x, byte y, byte z, byte w) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec4b value) { return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double distanceTo(byte x, byte y, byte z, byte w) {  return Math.sqrt(distanceTo(x, y, z, w)); }  | ||||
| 	public default long distanceToSquared(Vec4b value) { return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default long distanceToSquared(byte x, byte y, byte z, byte w) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		long zPos = getZ() - z; | ||||
| 		long wPos = getW() - w; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos) + (wPos * wPos); | ||||
| 	} | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW());} | ||||
| 
 | ||||
| 	public default long dotProduct(Vec4b value){return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default long dotProduct(byte x, byte y, byte z, byte w){return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w);}; | ||||
| 	 | ||||
| 	public default Vec4b min(Vec4b other) {return min(other, this);} | ||||
| 	public default Vec4b min(Vec4b other, Vec4b result){return min(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4b min(byte x, byte y, byte z, byte w) {return min(x, y, z, w, this);} | ||||
| 	public default Vec4b min(byte x, byte y, byte z, byte w, Vec4b result){return result.set((byte)Math.min(getX(), x), (byte)Math.min(getY(), y), (byte)Math.min(getZ(), z), (byte)Math.min(getW(), w));} | ||||
| 	 | ||||
| 	public default Vec4b max(Vec4b other) {return max(other, this);} | ||||
| 	public default Vec4b max(Vec4b other, Vec4b result){return max(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4b max(byte x, byte y, byte z, byte w) {return max(x, y, z, w, this);} | ||||
| 	public default Vec4b max(byte x, byte y, byte z, byte w, Vec4b result){return result.set((byte)Math.max(getX(), x), (byte)Math.max(getY(), y), (byte)Math.max(getZ(), z), (byte)Math.max(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec4b difference(Vec4b other) {return difference(other, this);} | ||||
| 	public default Vec4b difference(Vec4b other, Vec4b result){return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4b difference(byte x, byte y, byte z, byte w) {return difference(x, y, z, w, this);} | ||||
| 	public default Vec4b difference(byte x, byte y, byte z, byte w, Vec4b result){return result.set((byte)(getX() - x), (byte)(getY() - y), (byte)(getZ() - z), (byte)(getW() - w));} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4b clamp(byte min, byte max){return clamp(min, max, ALL);} | ||||
| 	public default Vec4b clamp(byte min, byte max, Vec4b result){return clamp(min, max, result, ALL);} | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW()); } | ||||
| 	public default long dotProduct(Vec4b value) { return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default long dotProduct(byte x, byte y, byte z, byte w) { return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w); }; | ||||
| 	public default Vec4b min(Vec4b other) { return min(other, this); } | ||||
| 	public default Vec4b min(Vec4b other, Vec4b result) { return min(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4b min(byte x, byte y, byte z, byte w) { return min(x, y, z, w, this); } | ||||
| 	public default Vec4b min(byte x, byte y, byte z, byte w, Vec4b result) { return result.set((byte)Math.min(getX(), x), (byte)Math.min(getY(), y), (byte)Math.min(getZ(), z), (byte)Math.min(getW(), w)); } | ||||
| 	public default Vec4b max(Vec4b other) { return max(other, this); } | ||||
| 	public default Vec4b max(Vec4b other, Vec4b result) { return max(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4b max(byte x, byte y, byte z, byte w) { return max(x, y, z, w, this); } | ||||
| 	public default Vec4b max(byte x, byte y, byte z, byte w, Vec4b result) { return result.set((byte)Math.max(getX(), x), (byte)Math.max(getY(), y), (byte)Math.max(getZ(), z), (byte)Math.max(getZ(), z)); } | ||||
| 	public default Vec4b difference(Vec4b other) { return difference(other, this); } | ||||
| 	public default Vec4b difference(Vec4b other, Vec4b result) { return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4b difference(byte x, byte y, byte z, byte w) { return difference(x, y, z, w, this); } | ||||
| 	public default Vec4b difference(byte x, byte y, byte z, byte w, Vec4b result) { return result.set((byte)(getX() - x), (byte)(getY() - y), (byte)(getZ() - z), (byte)(getW() - w)); } | ||||
| 	@Override | ||||
| 	public default Vec4b clamp(byte min, byte max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec4b clamp(byte min, byte max, Vec4b result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW()));} | ||||
| 	 | ||||
| 	public default Vec4b clamp(byte min, byte max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec4b clamp(byte min, byte max, Vec4b result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec4b store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec4b clamp(byte min, byte max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec4b clamp(byte min, byte max, Vec4b result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4b store(ByteBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()).put(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4b load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec4b load(ByteBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec4s asShort(){return isMutable() ? Vec4s.mutable(getX(), getY(), getZ(), getW()) : Vec4s.of(getX(), getY(), getZ(), getW());} | ||||
| 	public default Vec4s asShort() { return isMutable() ? Vec4s.mutable(getX(), getY(), getZ(), getW()) : Vec4s.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4i asInt(){return isMutable() ? Vec4i.mutable(getX(), getY(), getZ(), getW()) : Vec4i.of(getX(), getY(), getZ(), getW());} | ||||
| 	public default Vec4i asInt() { return isMutable() ? Vec4i.mutable(getX(), getY(), getZ(), getW()) : Vec4i.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4l asLong(){return isMutable() ? Vec4l.mutable(getX(), getY(), getZ(), getW()) : Vec4l.of(getX(), getY(), getZ(), getW());} | ||||
| 	public default Vec4l asLong() { return isMutable() ? Vec4l.mutable(getX(), getY(), getZ(), getW()) : Vec4l.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4f asFloat() {return isMutable() ? Vec4f.mutable(getX(), getY(), getZ(), getW()) : Vec4f.of(getX(), getY(), getZ(), getW());} | ||||
| 	public default Vec4f asFloat() { return isMutable() ? Vec4f.mutable(getX(), getY(), getZ(), getW()) : Vec4f.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4d asDouble(){return isMutable() ? Vec4d.mutable(getX(), getY(), getZ(), getW()) : Vec4d.of(getX(), getY(), getZ(), getW());} | ||||
| 
 | ||||
| 	 | ||||
| 	public default Vec4d asDouble() {return isMutable() ? Vec4d.mutable(getX(), getY(), getZ(), getW()) : Vec4d.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4b asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec4b asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec4b asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec4b asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec4b copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec4b copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec4b copyAsImmutable(){return of(this);} | ||||
| 	public default Vec4b copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,31 +2,27 @@ package speiger.src.coreengine.math.vector.bytes; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4bImmutable implements Vec4b | ||||
| { | ||||
| public class Vec4bImmutable implements Vec4b { | ||||
| 	final byte x; | ||||
| 	final byte y; | ||||
| 	final byte z; | ||||
| 	final byte w; | ||||
| 	 | ||||
| 	public Vec4bImmutable() | ||||
| 	{ | ||||
| 	public Vec4bImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 		w = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4bImmutable(byte value) | ||||
| 	{ | ||||
| 	public Vec4bImmutable(byte value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4bImmutable(byte x, byte y, byte z, byte w) | ||||
| 	{ | ||||
| 	public Vec4bImmutable(byte x, byte y, byte z, byte w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -34,82 +30,33 @@ public class Vec4bImmutable implements Vec4b | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public byte getX() { return x; } | ||||
| 	@Override | ||||
| 	public byte getY() { return y; } | ||||
| 	@Override | ||||
| 	public byte getZ() { return z; } | ||||
| 	@Override | ||||
| 	public byte getW() { return w; } | ||||
| 	@Override | ||||
| 	public Vec4b setX(byte x) { return this.x == x ? this : Vec4b.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4b setY(byte y) { return this.y == y ? this : Vec4b.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4b setZ(byte z) { return this.z == z ? this : Vec4b.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4b setW(byte w) { return this.w == w ? this : Vec4b.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4b copy() { return Vec4b.of(this); } | ||||
| 	@Override | ||||
| 	public Vec4b set(byte x, byte y, byte z, byte w) { return this.x == x && this.y == y && this.z == z && this.w == w ? this : Vec4b.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b setX(byte x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec4b.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b setY(byte y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec4b.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b setZ(byte z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec4b.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b setW(byte w) | ||||
| 	{ | ||||
| 		return this.w == w ? this : Vec4b.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b copy() | ||||
| 	{ | ||||
| 		return Vec4b.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b set(byte x, byte y, byte z, byte w) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z && this.w == w ? this : Vec4b.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4b) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4b) { | ||||
| 			Vec4b vec = (Vec4b)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -117,8 +64,5 @@ public class Vec4bImmutable implements Vec4b | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4b[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4b[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,27 +2,22 @@ package speiger.src.coreengine.math.vector.bytes; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4bMutable implements Vec4b | ||||
| { | ||||
| public class Vec4bMutable implements Vec4b { | ||||
| 	byte x; | ||||
| 	byte y; | ||||
| 	byte z; | ||||
| 	byte w; | ||||
| 	 | ||||
| 	public Vec4bMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec4bMutable() {} | ||||
| 	 | ||||
| 	public Vec4bMutable(byte value) | ||||
| 	{ | ||||
| 	public Vec4bMutable(byte value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4bMutable(byte x, byte y, byte z, byte w) | ||||
| 	{ | ||||
| 	public Vec4bMutable(byte x, byte y, byte z, byte w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -30,72 +25,45 @@ public class Vec4bMutable implements Vec4b | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public byte getX() { return x; } | ||||
| 	@Override | ||||
| 	public byte getY() { return y; } | ||||
| 	@Override | ||||
| 	public byte getZ() { return z; } | ||||
| 	@Override | ||||
| 	public byte getW() { return w; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public byte getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b setX(byte x) | ||||
| 	{ | ||||
| 	public Vec4b setX(byte x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b setY(byte y) | ||||
| 	{ | ||||
| 	public Vec4b setY(byte y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b setZ(byte z) | ||||
| 	{ | ||||
| 	public Vec4b setZ(byte z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b setW(byte w) | ||||
| 	{ | ||||
| 	public Vec4b setW(byte w) { | ||||
| 		this.w = w; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b copy() | ||||
| 	{ | ||||
| 		return Vec4b.mutable(this); | ||||
| 	} | ||||
| 	public Vec4b copy() { return Vec4b.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4b set(byte x, byte y, byte z, byte w) | ||||
| 	{ | ||||
| 	public Vec4b set(byte x, byte y, byte z, byte w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -104,16 +72,11 @@ public class Vec4bMutable implements Vec4b | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4b) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4b) { | ||||
| 			Vec4b vec = (Vec4b)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -121,9 +84,6 @@ public class Vec4bMutable implements Vec4b | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4b[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4b[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| 	 | ||||
| } | ||||
|  | ||||
| @ -7,8 +7,7 @@ import speiger.src.coreengine.math.vector.ints.Veci; | ||||
| import speiger.src.coreengine.math.vector.longs.Vecl; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vecs; | ||||
| 
 | ||||
| public interface Vecb extends Vec | ||||
| { | ||||
| public interface Vecb extends Vec { | ||||
| 	public Vecb set(byte value); | ||||
| 	public Vecb add(byte value); | ||||
| 	public Vecb sub(byte value); | ||||
| @ -16,10 +15,8 @@ public interface Vecb extends Vec | ||||
| 	public Vecb devide(byte value); | ||||
| 	public Vecb clamp(byte min, byte max); | ||||
| 	public Vecb clamp(byte min, byte max, int filter); | ||||
| 	 | ||||
| 	public long lengthSquared(); | ||||
| 	public default double length(){return Math.sqrt(lengthSquared());} | ||||
| 	 | ||||
| 	public default double length() { return Math.sqrt(lengthSquared()); } | ||||
| 	public byte[] asArray(); | ||||
| 	public Vecs asShort(); | ||||
| 	public Veci asInt(); | ||||
|  | ||||
| @ -10,106 +10,91 @@ import speiger.src.coreengine.math.vector.ints.Vec2i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec2l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec2s; | ||||
| 
 | ||||
| public interface Vec2d extends Vecd | ||||
| { | ||||
| public interface Vec2d extends Vecd { | ||||
| 	public static final Vec2d ZERO = of(); | ||||
| 	public static final Vec2d MINUS_ONE = of(-1D); | ||||
| 	public static final Vec2d ONE = of(1D); | ||||
| 	 | ||||
| 	public static Vec2d mutable(){return new Vec2dMutable();} | ||||
| 	public static Vec2d mutable(double value){return new Vec2dMutable(value);} | ||||
| 	public static Vec2d mutable(double x, double y){return new Vec2dMutable(x, y);} | ||||
| 	public static Vec2d mutable(Vec2d value){return mutable(value.getX(), value.getY());} | ||||
| 	 | ||||
| 	public static Vec2d of(){return new Vec2dImmutable();} | ||||
| 	public static Vec2d of(double value){return new Vec2dImmutable(value);} | ||||
| 	public static Vec2d of(double x, double y){return new Vec2dImmutable(x, y);} | ||||
| 	public static Vec2d of(Vec2d value){return of(value.getX(), value.getY());} | ||||
| 	public static Vec2d mutable() { return new Vec2dMutable(); } | ||||
| 	public static Vec2d mutable(double value) { return new Vec2dMutable(value); } | ||||
| 	public static Vec2d mutable(double x, double y) { return new Vec2dMutable(x, y); } | ||||
| 	public static Vec2d mutable(Vec2d value) { return mutable(value.getX(), value.getY()); } | ||||
| 	public static Vec2d of() { return new Vec2dImmutable(); } | ||||
| 	public static Vec2d of(double value) { return new Vec2dImmutable(value); } | ||||
| 	public static Vec2d of(double x, double y) { return new Vec2dImmutable(x, y); } | ||||
| 	public static Vec2d of(Vec2d value) { return of(value.getX(), value.getY()); } | ||||
| 	 | ||||
| 	public double getX(); | ||||
| 	public double getY(); | ||||
| 	public Vec2d setX(double x); | ||||
| 	public Vec2d setY(double y); | ||||
| 	@Override | ||||
| 	public default double[] asArray(){return new double[]{getX(), getY()};} | ||||
| 	public default double[] asArray() { return new double[] {getX(), getY()}; } | ||||
| 	@Override | ||||
| 	public Vec2d copy(); | ||||
| 	@Override | ||||
| 	public default Vec2d abs(){return set(Math.abs(getX()), Math.abs(getY()));} | ||||
| 	public default Vec2d abs() { return set(Math.abs(getX()), Math.abs(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2d negate(){return set(0D, 0D);} | ||||
| 	public default Vec2d negate() { return set(0D, 0D); } | ||||
| 	@Override | ||||
| 	public default Vec2d invert(){return set(-getX(), -getY());}; | ||||
| 	public default Vec2d normalize() | ||||
| 	{ | ||||
| 	public default Vec2d invert() { return set(-getX(), -getY()); }; | ||||
| 	public default Vec2d normalize() { | ||||
| 		double l = length(); | ||||
| 		return l == 0D ? this : multiply(1D / l); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2d add(double value) {return add(value, value);} | ||||
| 	public default Vec2d add(Vec2d value) {return add(value.getX(), value.getY());} | ||||
| 	public default Vec2d add(double x, double y) {return set(x + getX(), y + getY());} | ||||
| 	 | ||||
| 	public default Vec2d add(double value) { return add(value, value); } | ||||
| 	public default Vec2d add(Vec2d value) { return add(value.getX(), value.getY()); } | ||||
| 	public default Vec2d add(double x, double y) { return set(x + getX(), y + getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2d sub(double value){return sub(value, value);} | ||||
| 	public default Vec2d sub(Vec2d value){return sub(value.getX(), value.getY());} | ||||
| 	public default Vec2d sub(double x, double y) {return set(getX() - x, getY() - y);} | ||||
| 	 | ||||
| 	public default Vec2d sub(double value) { return sub(value, value); } | ||||
| 	public default Vec2d sub(Vec2d value) { return sub(value.getX(), value.getY()); } | ||||
| 	public default Vec2d sub(double x, double y) { return set(getX() - x, getY() - y); } | ||||
| 	@Override | ||||
| 	public default Vec2d multiply(double value){return multiply(value, value);} | ||||
| 	public default Vec2d multiply(Vec2d value){return multiply(value.getX(), value.getY());} | ||||
| 	public default Vec2d multiply(double x, double y) {return set(x * getX(), y * getY());} | ||||
| 	 | ||||
| 	public default Vec2d multiply(double value) { return multiply(value, value); } | ||||
| 	public default Vec2d multiply(Vec2d value) { return multiply(value.getX(), value.getY()); } | ||||
| 	public default Vec2d multiply(double x, double y) { return set(x * getX(), y * getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2d devide(double value){return devide(value, value);} | ||||
| 	public default Vec2d devide(Vec2d value){return devide(value.getX(), value.getY());} | ||||
| 	public default Vec2d devide(double x, double y){return set(getX() / x, getY() / y);} | ||||
| 	 | ||||
| 	public default Vec2d devide(double value) { return devide(value, value); } | ||||
| 	public default Vec2d devide(Vec2d value) { return devide(value.getX(), value.getY()); } | ||||
| 	public default Vec2d devide(double x, double y) { return set(getX() / x, getY() / y); } | ||||
| 	@Override | ||||
| 	public default Vec2d set(double value){return set(value, value);}; | ||||
| 	public default Vec2d set(Vec2d value){return set(value.getX(), value.getY());} | ||||
| 	public default Vec2d set(double value) { return set(value, value); }; | ||||
| 	public default Vec2d set(Vec2d value) { return set(value.getX(), value.getY()); } | ||||
| 	public Vec2d set(double x, double y); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec2d value){return distanceTo(value.getX(), value.getY());} | ||||
| 	public default double distanceTo(double x, double y){return Math.sqrt(distanceToSquared(x, y));} | ||||
| 	 | ||||
| 	public default double distanceToSquared(Vec2d value){return distanceToSquared(value.getX(), value.getY());} | ||||
| 	public default double distanceToSquared(double x, double y) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec2d value) { return distanceTo(value.getX(), value.getY()); } | ||||
| 	public default double distanceTo(double x, double y) { return Math.sqrt(distanceToSquared(x, y)); } | ||||
| 	public default double distanceToSquared(Vec2d value) { return distanceToSquared(value.getX(), value.getY()); } | ||||
| 	public default double distanceToSquared(double x, double y) { | ||||
| 		double xPos = getX() - x; | ||||
| 		double yPos = getY() - y; | ||||
| 		return (xPos * xPos) + (yPos * yPos); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default double lengthSquared() {return (getX() * getX()) + (getY() * getY());} | ||||
| 	 | ||||
| 	public default double dotProduct(Vec2d value){return dotProduct(value.getX(), value.getY());} | ||||
| 	public default double dotProduct(double x, double y){return (getX() * x) + (getY() * y);} | ||||
| 	 | ||||
| 	public default Vec2d lerp(Vec2d value, float progress, Vec2d result){return lerp(value.getX(), value.getY(), progress, result);} | ||||
| 	public default Vec2d lerp(double x, double y, float progress, Vec2d result){return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress));}; | ||||
| 	 | ||||
| 	public default double angle(Vec2d value){return angle(value.getX(), value.getY());} | ||||
| 	public default double angle(double x, double y){return (float)Math.atan2((getX() * y) - (getY() * x), (getX() * x) + (getY() * y));} | ||||
| 	 | ||||
| 	public default double directionAngle(Vec2d value){return directionAngle(value.getX(), value.getY());} | ||||
| 	public default double directionAngle(double x, double y){return (float)(-Math.toDegrees(Math.atan2(getX() - x, getY() - y)) % 360D);} | ||||
| 	 | ||||
| 	public default Vec2d reflect(Vec2d value){return reflect(value.getX(), value.getY(), this);} | ||||
| 	public default Vec2d reflect(double x, double y){return reflect(x, y, this);}; | ||||
| 	public default Vec2d reflect(Vec2d value, Vec2d result){return reflect(value.getX(), value.getY(), result);} | ||||
| 	public default Vec2d reflect(double x, double y, Vec2d result) | ||||
| 	{ | ||||
| 	public default double lengthSquared() { return (getX() * getX()) + (getY() * getY()); } | ||||
| 	public default double dotProduct(Vec2d value) { return dotProduct(value.getX(), value.getY()); } | ||||
| 	public default double dotProduct(double x, double y) { return (getX() * x) + (getY() * y); } | ||||
| 	public default Vec2d lerp(Vec2d value, float progress, Vec2d result) { return lerp(value.getX(), value.getY(), progress, result); } | ||||
| 	public default Vec2d lerp(double x, double y, float progress, Vec2d result) { return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress)); }; | ||||
| 	public default double angle(Vec2d value) { return angle(value.getX(), value.getY()); } | ||||
| 	public default double angle(double x, double y) { return (float)Math.atan2((getX() * y) - (getY() * x), (getX() * x) + (getY() * y)); } | ||||
| 	public default double directionAngle(Vec2d value) { return directionAngle(value.getX(), value.getY()); } | ||||
| 	public default double directionAngle(double x, double y) { return (float)(-Math.toDegrees(Math.atan2(getX() - x, getY() - y)) % 360D); } | ||||
| 	public default Vec2d reflect(Vec2d value) { return reflect(value.getX(), value.getY(), this); } | ||||
| 	public default Vec2d reflect(double x, double y) { return reflect(x, y, this); }; | ||||
| 	public default Vec2d reflect(Vec2d value, Vec2d result) { return reflect(value.getX(), value.getY(), result); } | ||||
| 	public default Vec2d reflect(double x, double y, Vec2d result) { | ||||
| 		double dot = dotProduct(x, y); | ||||
| 		double x2 = (float)((dot + dot) * x); | ||||
| 		double y2 = (float)((dot + dot) * y); | ||||
| 		return result.set(getX() - x2, getY() - y2); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2d rotate(double angle, Vec2d center){return rotate(angle, center.getX(), center.getY());} | ||||
| 	public default Vec2d rotate(double angle, double x, double y) | ||||
| 	{ | ||||
| 	public default Vec2d rotate(double angle, Vec2d center) { return rotate(angle, center.getX(), center.getY()); } | ||||
| 	public default Vec2d rotate(double angle, double x, double y) { | ||||
| 		double xPos = getX() - x; | ||||
| 		double yPos = getY() - y; | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| @ -117,71 +102,55 @@ public interface Vec2d extends Vecd | ||||
| 		return set((float)((xPos * cos) + (yPos * sin) + x), (float)(-(xPos * sin) + (yPos * cos) + y)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2d min(Vec2d other) {return min(other, this);} | ||||
| 	public default Vec2d min(Vec2d other, Vec2d result){return min(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2d min(double x, double y) {return min(x, y, this);} | ||||
| 	public default Vec2d min(double x, double y, Vec2d result){return result.set(Math.min(getX(), x), Math.min(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2d max(Vec2d other) {return max(other, this);} | ||||
| 	public default Vec2d max(Vec2d other, Vec2d result){return max(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2d max(double x, double y) {return max(x, y, this);} | ||||
| 	public default Vec2d max(double x, double y, Vec2d result){return result.set(Math.max(getX(), x), Math.max(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2d difference(Vec2d other) {return difference(other, this);} | ||||
| 	public default Vec2d difference(Vec2d other, Vec2d result){return difference(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2d difference(double x, double y) {return difference(x, y, this);} | ||||
| 	public default Vec2d difference(double x, double y, Vec2d result){return result.set(getX() - x, getY() - y);} | ||||
| 	public default Vec2d min(Vec2d other) { return min(other, this); } | ||||
| 	public default Vec2d min(Vec2d other, Vec2d result) { return min(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2d min(double x, double y) { return min(x, y, this); } | ||||
| 	public default Vec2d min(double x, double y, Vec2d result) { return result.set(Math.min(getX(), x), Math.min(getY(), y)); } | ||||
| 	public default Vec2d max(Vec2d other) { return max(other, this); } | ||||
| 	public default Vec2d max(Vec2d other, Vec2d result) { return max(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2d max(double x, double y) { return max(x, y, this); } | ||||
| 	public default Vec2d max(double x, double y, Vec2d result) { return result.set(Math.max(getX(), x), Math.max(getY(), y)); } | ||||
| 	public default Vec2d difference(Vec2d other) { return difference(other, this); } | ||||
| 	public default Vec2d difference(Vec2d other, Vec2d result) { return difference(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2d difference(double x, double y) { return difference(x, y, this); } | ||||
| 	public default Vec2d difference(double x, double y, Vec2d result) { return result.set(getX() - x, getY() - y); } | ||||
| 	@Override | ||||
| 	public default Vec2d clamp(double min, double max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec2d clamp(double min, double max, Vec2d result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec2d clamp(double min, double max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec2d clamp(double min, double max, Vec2d result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2d clamp(double min, double max){return clamp(min, max, ALL);} | ||||
| 	public default Vec2d clamp(double min, double max, Vec2d result){return clamp(min, max, result, ALL);} | ||||
| 	@Override | ||||
| 	public default Vec2d clamp(double min, double max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec2d clamp(double min, double max, Vec2d result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()));} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2d store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec2d store(ByteBuffer buffer) { | ||||
| 		buffer.putDouble(getX()).putDouble(getY()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2d load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getDouble(), buffer.getDouble()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2d load(ByteBuffer buffer) { return set(buffer.getDouble(), buffer.getDouble()); } | ||||
| 	@Override | ||||
| 	public default Vec2d store(DoubleBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec2d store(DoubleBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2d load(DoubleBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	public default Vec2d load(DoubleBuffer buffer) { return set(buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec2b asByte(){return isMutable() ? Vec2b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY())) : Vec2b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()));} | ||||
| 	public default Vec2b asByte() { return isMutable() ? Vec2b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY())) : Vec2b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2s asShort(){return isMutable() ? Vec2s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY())) : Vec2s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()));} | ||||
| 	public default Vec2s asShort() { return isMutable() ? Vec2s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY())) : Vec2s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2i asInt(){return isMutable() ? Vec2i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY())) : Vec2i.of(MathUtils.floor(getX()), MathUtils.floor(getY()));} | ||||
| 	public default Vec2i asInt() { return isMutable() ? Vec2i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY())) : Vec2i.of(MathUtils.floor(getX()), MathUtils.floor(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2l asLong() {return isMutable() ? Vec2l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY())) : Vec2l.of(MathUtils.floor(getX()), MathUtils.floor(getY()));} | ||||
| 	public default Vec2l asLong() { return isMutable() ? Vec2l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY())) : Vec2l.of(MathUtils.floor(getX()), MathUtils.floor(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2f asFloat(){return isMutable() ? Vec2f.mutable((float)getX(), (float)getY()) : Vec2f.of((float)getX(), (float)getY());} | ||||
| 
 | ||||
| 	 | ||||
| 	public default Vec2f asFloat() { return isMutable() ? Vec2f.mutable((float)getX(), (float)getY()) : Vec2f.of((float)getX(), (float)getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2d asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec2d asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec2d asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec2d asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec2d copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec2d copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec2d copyAsImmutable(){return of(this);} | ||||
| 	public default Vec2d copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,82 +2,45 @@ package speiger.src.coreengine.math.vector.doubles; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2dImmutable implements Vec2d | ||||
| { | ||||
| public class Vec2dImmutable implements Vec2d { | ||||
| 	final double x; | ||||
| 	final double y; | ||||
| 	 | ||||
| 	public Vec2dImmutable() | ||||
| 	{ | ||||
| 	public Vec2dImmutable() { | ||||
| 		x = 0D; | ||||
| 		y = 0D; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2dImmutable(double value) | ||||
| 	{ | ||||
| 	public Vec2dImmutable(double value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2dImmutable(double x, double y) | ||||
| 	{ | ||||
| 	public Vec2dImmutable(double x, double y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public double getX() { return x; } | ||||
| 	@Override | ||||
| 	public double getY() { return y; } | ||||
| 	@Override | ||||
| 	public Vec2d setX(double x) { return this.x == x ? this : Vec2d.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2d setY(double y) { return this.y == y ? this : Vec2d.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2d copy() { return Vec2d.of(this); } | ||||
| 	@Override | ||||
| 	public Vec2d set(double x, double y) { return this.x == x && this.y == y ? this : Vec2d.of(x, y); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2d setX(double x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec2d.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2d setY(double y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec2d.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2d copy() | ||||
| 	{ | ||||
| 		return Vec2d.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2d set(double x, double y) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y ? this : Vec2d.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2d) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2d) { | ||||
| 			Vec2d vec = (Vec2d)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -85,8 +48,5 @@ public class Vec2dImmutable implements Vec2d | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2d[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2d[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,86 +2,60 @@ package speiger.src.coreengine.math.vector.doubles; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2dMutable implements Vec2d | ||||
| { | ||||
| public class Vec2dMutable implements Vec2d { | ||||
| 	double x; | ||||
| 	double y; | ||||
| 	 | ||||
| 	public Vec2dMutable() | ||||
| 	{ | ||||
| 	public Vec2dMutable() { | ||||
| 		x = 0D; | ||||
| 		y = 0D; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2dMutable(double value) | ||||
| 	{ | ||||
| 	public Vec2dMutable(double value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2dMutable(double x, double y) | ||||
| 	{ | ||||
| 	public Vec2dMutable(double x, double y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public double getX() { return x; } | ||||
| 	@Override | ||||
| 	public double getY() { return y; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2d setX(double x) | ||||
| 	{ | ||||
| 	public Vec2d setX(double x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2d setY(double y) | ||||
| 	{ | ||||
| 	public Vec2d setY(double y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2d copy() | ||||
| 	{ | ||||
| 		return Vec2d.mutable(this); | ||||
| 	} | ||||
| 	public Vec2d copy() { return Vec2d.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2d set(double x, double y) | ||||
| 	{ | ||||
| 	public Vec2d set(double x, double y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2d) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2d) { | ||||
| 			Vec2d vec = (Vec2d)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -89,8 +63,5 @@ public class Vec2dMutable implements Vec2d | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2d[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2d[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -10,21 +10,26 @@ import speiger.src.coreengine.math.vector.ints.Vec3i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec3l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec3s; | ||||
| 
 | ||||
| public interface Vec3d extends Vecd | ||||
| { | ||||
| public interface Vec3d extends Vecd { | ||||
| 	public static final Vec3d ZERO = of(); | ||||
| 	public static final Vec3d MINUS_ONE = of(-1D); | ||||
| 	public static final Vec3d ONE = of(1D); | ||||
| 	 | ||||
| 	public static Vec3d mutable(){return new Vec3dMutable();} | ||||
| 	public static Vec3d mutable(double value){return new Vec3dMutable(value);} | ||||
| 	public static Vec3d mutable(double x, double y, double z){return new Vec3dMutable(x, y, z);} | ||||
| 	public static Vec3d mutable(Vec3d vec){return mutable(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	public static Vec3d mutable() { return new Vec3dMutable(); } | ||||
| 	 | ||||
| 	public static Vec3d of(){return new Vec3dImmutable();} | ||||
| 	public static Vec3d of(double value){return new Vec3dImmutable(value);} | ||||
| 	public static Vec3d of(double x, double y, double z){return new Vec3dImmutable(x, y, z);} | ||||
| 	public static Vec3d of(Vec3d vec){return of(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	public static Vec3d mutable(double value) { return new Vec3dMutable(value); } | ||||
| 	 | ||||
| 	public static Vec3d mutable(double x, double y, double z) { return new Vec3dMutable(x, y, z); } | ||||
| 	 | ||||
| 	public static Vec3d mutable(Vec3d vec) { return mutable(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	 | ||||
| 	public static Vec3d of() { return new Vec3dImmutable(); } | ||||
| 	 | ||||
| 	public static Vec3d of(double value) { return new Vec3dImmutable(value); } | ||||
| 	 | ||||
| 	public static Vec3d of(double x, double y, double z) { return new Vec3dImmutable(x, y, z); } | ||||
| 	 | ||||
| 	public static Vec3d of(Vec3d vec) { return of(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	 | ||||
| 	public double getX(); | ||||
| 	public double getY(); | ||||
| @ -32,98 +37,177 @@ public interface Vec3d extends Vecd | ||||
| 	public Vec3d setX(double x); | ||||
| 	public Vec3d setY(double y); | ||||
| 	public Vec3d setZ(double z); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default double[] asArray(){return new double[]{getX(), getY(), getZ()};} | ||||
| 	public default double[] asArray() { return new double[] {getX(), getY(), getZ()}; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3d copy(); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d abs(){return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()));} | ||||
| 	public default Vec3d abs() { return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d negate(){return set(0D, 0D, 0D);} | ||||
| 	public default Vec3d negate() { return set(0D, 0D, 0D); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d invert(){return set(-getX(), -getY(), -getZ());} | ||||
| 	public default Vec3d normalize() | ||||
| 	{ | ||||
| 	public default Vec3d invert() { return set(-getX(), -getY(), -getZ()); } | ||||
| 	 | ||||
| 	public default Vec3d normalize() { | ||||
| 		double l = length(); | ||||
| 		return l == 0D ? this : multiply(1.0D / l); | ||||
| 	} | ||||
| 	@Override | ||||
| 	public default Vec3d add(double value){return add(value, value, value);}	 | ||||
| 	public default Vec3d add(Vec3d value){return add(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3d add(double x, double y, double z){return set(getX() + x, getY() + y, getZ() + z);} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d sub(double value){return sub(value, value, value);} | ||||
| 	public default Vec3d sub(Vec3d value){return sub(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3d sub(double x, double y, double z){return set(getX() - x, getY() - y, getZ() - z);} | ||||
| 	public default Vec3d add(double value) { return add(value, value, value); } | ||||
| 	 | ||||
| 	public default Vec3d add(Vec3d value) { return add(value.getX(), value.getY(), value.getZ()); } | ||||
| 	 | ||||
| 	public default Vec3d add(double x, double y, double z) { | ||||
| 		return set(getX() + x, getY() + y, getZ() + z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d multiply(double value){return multiply(value, value, value);} | ||||
| 	public default Vec3d multiply(Vec3d value){return multiply(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3d multiply(double x, double y, double z){return set(getX() * x, getY() * y, getZ() * z);} | ||||
| 	public default Vec3d sub(double value) { return sub(value, value, value); } | ||||
| 	 | ||||
| 	public default Vec3d sub(Vec3d value) { return sub(value.getX(), value.getY(), value.getZ()); } | ||||
| 	 | ||||
| 	public default Vec3d sub(double x, double y, double z) { | ||||
| 		return set(getX() - x, getY() - y, getZ() - z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d devide(double value){return devide(value, value, value);} | ||||
| 	public default Vec3d devide(Vec3d value){return devide(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3d devide(double x, double y, double z){return set(getX() / x, getY() / y, getZ() / z);} | ||||
| 	public default Vec3d multiply(double value) { return multiply(value, value, value); } | ||||
| 	 | ||||
| 	public default Vec3d multiply(Vec3d value) { | ||||
| 		return multiply(value.getX(), value.getY(), value.getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d multiply(double x, double y, double z) { | ||||
| 		return set(getX() * x, getY() * y, getZ() * z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d set(double value){return set(value, value, value);} | ||||
| 	public default Vec3d set(Vec3d value){return set(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3d devide(double value) { return devide(value, value, value); } | ||||
| 	 | ||||
| 	public default Vec3d devide(Vec3d value) { | ||||
| 		return devide(value.getX(), value.getY(), value.getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d devide(double x, double y, double z) { | ||||
| 		return set(getX() / x, getY() / y, getZ() / z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d set(double value) { return set(value, value, value); } | ||||
| 	 | ||||
| 	public default Vec3d set(Vec3d value) { return set(value.getX(), value.getY(), value.getZ()); } | ||||
| 	 | ||||
| 	public Vec3d set(double x, double y, double z); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec3d value){return distanceTo(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double distanceTo(double x, double y, double z){return Math.sqrt(distanceToSquared(x, y, z));} | ||||
| 	public default double distanceTo(Vec3d value) { | ||||
| 		return distanceTo(value.getX(), value.getY(), value.getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default double distanceToSquared(Vec3d value){return distanceToSquared(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double distanceToSquared(double x, double y, double z) | ||||
| 	{ | ||||
| 	public default double distanceTo(double x, double y, double z) { | ||||
| 		return Math.sqrt(distanceToSquared(x, y, z)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default double distanceToSquared(Vec3d value) { | ||||
| 		return distanceToSquared(value.getX(), value.getY(), value.getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default double distanceToSquared(double x, double y, double z) { | ||||
| 		double xPos = getX() - x; | ||||
| 		double yPos = getY() - y; | ||||
| 		double zPos = getZ() - z; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default double lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ());} | ||||
| 	public default double lengthSquared() { | ||||
| 		return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default double dotProduct(Vec3d value){return dotProduct(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double dotProduct(double x, double y, double z){return (getX() * x) + (getY() * y) + (getZ() * z);} | ||||
| 	public default double dotProduct(Vec3d value) { | ||||
| 		return dotProduct(value.getX(), value.getY(), value.getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d lerp(Vec3d value, float progress, Vec3d result){return lerp(value.getX(), value.getY(), value.getZ(), progress, result);} | ||||
| 	public default Vec3d lerp(double x, double y, double z, float progress, Vec3d result){return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress), MathUtils.lerp(getZ(), z, progress));} | ||||
| 	public default double dotProduct(double x, double y, double z) { | ||||
| 		return (getX() * x) + (getY() * y) + (getZ() * z); | ||||
| 	} | ||||
| 	 | ||||
| 	public default double angle(Vec3d value){return angle(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double angle(double x, double y, double z){return Math.acos(MathUtils.clamp(-1, 1, angleCos(x, y, z)));} | ||||
| 	public default Vec3d lerp(Vec3d value, float progress, Vec3d result) { | ||||
| 		return lerp(value.getX(), value.getY(), value.getZ(), progress, result); | ||||
| 	} | ||||
| 	 | ||||
| 	public default double angleCos(Vec3d value){return angleCos(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double angleCos(double x, double y, double z) | ||||
| 	{ | ||||
| 	public default Vec3d lerp(double x, double y, double z, float progress, Vec3d result) { | ||||
| 		return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress), MathUtils.lerp(getZ(), z, progress)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default double angle(Vec3d value) { | ||||
| 		return angle(value.getX(), value.getY(), value.getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default double angle(double x, double y, double z) { | ||||
| 		return Math.acos(MathUtils.clamp(-1, 1, angleCos(x, y, z))); | ||||
| 	} | ||||
| 	 | ||||
| 	public default double angleCos(Vec3d value) { | ||||
| 		return angleCos(value.getX(), value.getY(), value.getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default double angleCos(double x, double y, double z) { | ||||
| 		double myLength = (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()); | ||||
| 		double otherLength = (x * x) + (y * y) + (z * z); | ||||
| 		double dot = (getX() * x) + (getY() * y) + (getZ() * z); | ||||
| 		return dot / (Math.sqrt(myLength * otherLength)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d crossProduct(Vec3d value){return crossProduct(value.getX(), value.getY(), value.getZ(), this);} | ||||
| 	public default Vec3d crossProduct(Vec3d value, Vec3d result){return crossProduct(value.getX(), value.getY(), value.getZ(), result);} | ||||
| 	public default Vec3d crossProduct(double x, double y, double z){return crossProduct(x, y, z, this);} | ||||
| 	public default Vec3d crossProduct(double x, double y, double z, Vec3d result){return result.set((getY() * z) - (getZ() * y), (getZ() * x) - (getX() * z), (getX() * y) - (getY() * x));} | ||||
| 	public default Vec3d crossProduct(Vec3d value) { | ||||
| 		return crossProduct(value.getX(), value.getY(), value.getZ(), this); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d reflect(Vec3d value){return reflect(value.getX(), value.getY(), value.getZ(), this);} | ||||
| 	public default Vec3d reflect(Vec3d value, Vec3d result){return reflect(value.getX(), value.getY(), value.getZ(), result);} | ||||
| 	public default Vec3d reflect(double x, double y, double z){return reflect(x, y, z, this);} | ||||
| 	public default Vec3d reflect(double x, double y, double z, Vec3d result) | ||||
| 	{ | ||||
| 	public default Vec3d crossProduct(Vec3d value, Vec3d result) { | ||||
| 		return crossProduct(value.getX(), value.getY(), value.getZ(), result); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d crossProduct(double x, double y, double z) { | ||||
| 		return crossProduct(x, y, z, this); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d crossProduct(double x, double y, double z, Vec3d result) { | ||||
| 		return result.set((getY() * z) - (getZ() * y), (getZ() * x) - (getX() * z), (getX() * y) - (getY() * x)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d reflect(Vec3d value) { | ||||
| 		return reflect(value.getX(), value.getY(), value.getZ(), this); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d reflect(Vec3d value, Vec3d result) { | ||||
| 		return reflect(value.getX(), value.getY(), value.getZ(), result); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d reflect(double x, double y, double z) { return reflect(x, y, z, this); } | ||||
| 	 | ||||
| 	public default Vec3d reflect(double x, double y, double z, Vec3d result) { | ||||
| 		double dot = dotProduct(x, y, z) * 2D; | ||||
| 		return result.set(getX() - dot * x, getY() - dot * y, getZ() - dot * z); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d rotate(double angle, Vec3d axis){return rotate(angle, axis.getX(), axis.getY(), axis.getZ());} | ||||
| 	public default Vec3d rotate(double angle, Vec3d axis, Vec3d result){return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), result);} | ||||
| 	public default Vec3d rotate(double angle, double x, double y, double z){return rotate(angle, x, y, z, this);} | ||||
| 	public default Vec3d rotate(double angle, double x, double y, double z, Vec3d result) | ||||
| 	{ | ||||
| 	public default Vec3d rotate(double angle, Vec3d axis) { | ||||
| 		return rotate(angle, axis.getX(), axis.getY(), axis.getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d rotate(double angle, Vec3d axis, Vec3d result) { | ||||
| 		return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), result); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d rotate(double angle, double x, double y, double z) { | ||||
| 		return rotate(angle, x, y, z, this); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d rotate(double angle, double x, double y, double z, Vec3d result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double dot = dotProduct(x, y, z); | ||||
| @ -132,27 +216,30 @@ public interface Vec3d extends Vecd | ||||
| 		double zPos = z * dot * (1D - cos) + (getZ() * cos) + (-y * getX() + x * getY()) * sin; | ||||
| 		return result.set(xPos, yPos, zPos); | ||||
| 	} | ||||
| 	public default Vec3d rotateX(double angle){return rotateX(angle, this);} | ||||
| 	public default Vec3d rotateX(double angle, Vec3d result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec3d rotateX(double angle) { return rotateX(angle, this); } | ||||
| 	 | ||||
| 	public default Vec3d rotateX(double angle, Vec3d result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double y = getY() * cos + getZ() * sin; | ||||
| 		double z = getZ() * cos - getY() * sin; | ||||
| 		return result.set(getX(), y, z); | ||||
| 	} | ||||
| 	public default Vec3d rotateY(double angle){return rotateY(angle, this);} | ||||
| 	public default Vec3d rotateY(double angle, Vec3d result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec3d rotateY(double angle) { return rotateY(angle, this); } | ||||
| 	 | ||||
| 	public default Vec3d rotateY(double angle, Vec3d result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double x = getX() * cos + getZ() * sin; | ||||
| 		double z = getZ() * cos - getX() * sin; | ||||
| 		return result.set(x, getY(), z); | ||||
| 	} | ||||
| 	public default Vec3d rotateZ(double angle){return rotateZ(angle, this);} | ||||
| 	public default Vec3d rotateZ(double angle, Vec3d result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec3d rotateZ(double angle) { return rotateZ(angle, this); } | ||||
| 	 | ||||
| 	public default Vec3d rotateZ(double angle, Vec3d result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double x = cos * getX() - sin * getY(); | ||||
| @ -160,9 +247,11 @@ public interface Vec3d extends Vecd | ||||
| 		return result.set(x, y, getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d smoothStep(Vec3d value, float progress, Vec3d result){return smoothStep(value.getX(), value.getY(), value.getZ(), progress, result);} | ||||
| 	public default Vec3d smoothStep(double x, double y, double z, float progress, Vec3d result) | ||||
| 	{ | ||||
| 	public default Vec3d smoothStep(Vec3d value, float progress, Vec3d result) { | ||||
| 		return smoothStep(value.getX(), value.getY(), value.getZ(), progress, result); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d smoothStep(double x, double y, double z, float progress, Vec3d result) { | ||||
| 		double t2 = progress * progress; | ||||
| 		double t3 = t2 * progress; | ||||
| 		double xPos = ((getX() + getX() - x - x) * t3 + (3.0D * x - 3.0D * getX()) * t2 + getX() * progress + getX()); | ||||
| @ -171,71 +260,116 @@ public interface Vec3d extends Vecd | ||||
| 		return result.set(xPos, yPos, zPos); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d min(Vec3d other) {return min(other, this);} | ||||
| 	public default Vec3d min(Vec3d other, Vec3d result){return min(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3d min(double x, double y, double z) {return min(x, y, z, this);} | ||||
| 	public default Vec3d min(double x, double y, double z, Vec3d result){return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z));} | ||||
| 	public default Vec3d min(Vec3d other) { return min(other, this); } | ||||
| 	 | ||||
| 	public default Vec3d max(Vec3d other) {return max(other, this);} | ||||
| 	public default Vec3d max(Vec3d other, Vec3d result){return max(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3d max(double x, double y, double z) {return max(x, y, z, this);} | ||||
| 	public default Vec3d max(double x, double y, double z, Vec3d result){return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z));} | ||||
| 	public default Vec3d min(Vec3d other, Vec3d result) { | ||||
| 		return min(other.getX(), other.getY(), other.getZ(), result); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d difference(Vec3d other) {return difference(other, this);} | ||||
| 	public default Vec3d difference(Vec3d other, Vec3d result){return difference(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3d difference(double x, double y, double z) {return difference(x, y, z, this);} | ||||
| 	public default Vec3d difference(double x, double y, double z, Vec3d result){return result.set(getX() - x, getY() - y, getZ() - z);} | ||||
| 	public default Vec3d min(double x, double y, double z) { return min(x, y, z, this); } | ||||
| 	 | ||||
| 	public default Vec3d min(double x, double y, double z, Vec3d result) { | ||||
| 		return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d max(Vec3d other) { return max(other, this); } | ||||
| 	 | ||||
| 	public default Vec3d max(Vec3d other, Vec3d result) { | ||||
| 		return max(other.getX(), other.getY(), other.getZ(), result); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d max(double x, double y, double z) { return max(x, y, z, this); } | ||||
| 	 | ||||
| 	public default Vec3d max(double x, double y, double z, Vec3d result) { | ||||
| 		return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d difference(Vec3d other) { return difference(other, this); } | ||||
| 	 | ||||
| 	public default Vec3d difference(Vec3d other, Vec3d result) { | ||||
| 		return difference(other.getX(), other.getY(), other.getZ(), result); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d difference(double x, double y, double z) { | ||||
| 		return difference(x, y, z, this); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d difference(double x, double y, double z, Vec3d result) { | ||||
| 		return result.set(getX() - x, getY() - y, getZ() - z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d clamp(double min, double max){return clamp(min, max, ALL);} | ||||
| 	public default Vec3d clamp(double min, double max, Vec3d result){return clamp(min, max, result, ALL);} | ||||
| 	@Override | ||||
| 	public default Vec3d clamp(double min, double max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec3d clamp(double min, double max, Vec3d result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()));} | ||||
| 	public default Vec3d clamp(double min, double max) { return clamp(min, max, ALL); } | ||||
| 	 | ||||
| 	public default Vec3d clamp(double min, double max, Vec3d result) { | ||||
| 		return clamp(min, max, result, ALL); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3d clamp(double min, double max, int filter) { | ||||
| 		return clamp(min, max, this, filter); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3d clamp(double min, double max, Vec3d result, int filter) { | ||||
| 		return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ())); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d store(ByteBuffer buffer) { | ||||
| 		buffer.putDouble(getX()).putDouble(getY()).putDouble(getZ()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3d load(ByteBuffer buffer) { | ||||
| 		return set(buffer.getDouble(), buffer.getDouble(), buffer.getDouble()); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d store(DoubleBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3d store(DoubleBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d load(DoubleBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3d load(DoubleBuffer buffer) { | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3b asByte(){return isMutable() ? Vec3b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ())) : Vec3b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ()));} | ||||
| 	@Override | ||||
| 	public default Vec3s asShort(){return isMutable() ? Vec3s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ())) : Vec3s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ()));} | ||||
| 	@Override | ||||
| 	public default Vec3i asInt(){return isMutable() ? Vec3i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())) : Vec3i.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()));} | ||||
| 	@Override | ||||
| 	public default Vec3l asLong() {return isMutable() ? Vec3l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())) : Vec3l.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()));} | ||||
| 	@Override | ||||
| 	public default Vec3f asFloat(){return isMutable() ? Vec3f.mutable((float)getX(), (float)getY(), (float)getZ()) : Vec3f.of((float)getX(), (float)getY(), (float)getZ());} | ||||
| 	public default Vec3b asByte() { | ||||
| 		return isMutable() ? Vec3b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ())) : Vec3b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ())); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec3s asShort() { | ||||
| 		return isMutable() ? Vec3s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ())) : Vec3s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ())); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec3i asInt() { | ||||
| 		return isMutable() ? Vec3i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())) : Vec3i.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec3l asLong() { | ||||
| 		return isMutable() ? Vec3l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())) : Vec3l.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d copyAsImmutable(){return of(this);} | ||||
| 	public default Vec3f asFloat() { | ||||
| 		return isMutable() ? Vec3f.mutable((float)getX(), (float)getY(), (float)getZ()) : Vec3f.of((float)getX(), (float)getY(), (float)getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d copyAsMutable() { return mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3d copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,98 +2,53 @@ package speiger.src.coreengine.math.vector.doubles; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3dImmutable implements Vec3d | ||||
| { | ||||
| public class Vec3dImmutable implements Vec3d { | ||||
| 	final double x; | ||||
| 	final double y; | ||||
| 	final double z; | ||||
| 	 | ||||
| 	public Vec3dImmutable() | ||||
| 	{ | ||||
| 	public Vec3dImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3dImmutable(double value) | ||||
| 	{ | ||||
| 	public Vec3dImmutable(double value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3dImmutable(double x, double y, double z) | ||||
| 	{ | ||||
| 	public Vec3dImmutable(double x, double y, double z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public double getX() { return x; } | ||||
| 	@Override | ||||
| 	public double getY() { return y; } | ||||
| 	@Override | ||||
| 	public double getZ() { return z; } | ||||
| 	@Override | ||||
| 	public Vec3d setX(double x) { return this.x == x ? this : Vec3d.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3d setY(double y) { return this.y == y ? this : Vec3d.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3d setZ(double z) { return this.z == z ? this : Vec3d.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3d copy() { return Vec3d.of(this); } | ||||
| 	@Override | ||||
| 	public Vec3d set(double x, double y, double z) { return this.x == x && this.y == y && this.z == z ? this : Vec3d.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3d setX(double x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec3d.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3d setY(double y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec3d.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3d setZ(double z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec3d.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3d copy() | ||||
| 	{ | ||||
| 		return Vec3d.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3d set(double x, double y, double z) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z ? this : Vec3d.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3d) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3d) { | ||||
| 			Vec3d vec = (Vec3d)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -101,8 +56,5 @@ public class Vec3dImmutable implements Vec3d | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3d[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3d[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,87 +2,61 @@ package speiger.src.coreengine.math.vector.doubles; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3dMutable implements Vec3d | ||||
| { | ||||
| public class Vec3dMutable implements Vec3d { | ||||
| 	double x; | ||||
| 	double y; | ||||
| 	double z; | ||||
| 	 | ||||
| 	public Vec3dMutable() | ||||
| 	{ | ||||
| 	public Vec3dMutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3dMutable(double value) | ||||
| 	{ | ||||
| 	public Vec3dMutable(double value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3dMutable(double x, double y, double z) | ||||
| 	{ | ||||
| 	public Vec3dMutable(double x, double y, double z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public double getX() { return x; } | ||||
| 	@Override | ||||
| 	public double getY() { return y; } | ||||
| 	@Override | ||||
| 	public double getZ() { return z; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3d setX(double x) | ||||
| 	{ | ||||
| 	public Vec3d setX(double x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3d setY(double y) | ||||
| 	{ | ||||
| 	public Vec3d setY(double y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3d setZ(double z) | ||||
| 	{ | ||||
| 	public Vec3d setZ(double z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3d copy() | ||||
| 	{ | ||||
| 		return Vec3d.mutable(this); | ||||
| 	} | ||||
| 	public Vec3d copy() { return Vec3d.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3d set(double x, double y, double z) | ||||
| 	{ | ||||
| 	public Vec3d set(double x, double y, double z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -90,16 +64,11 @@ public class Vec3dMutable implements Vec3d | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3d) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3d) { | ||||
| 			Vec3d vec = (Vec3d)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -107,8 +76,5 @@ public class Vec3dMutable implements Vec3d | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3d[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3d[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -10,21 +10,19 @@ import speiger.src.coreengine.math.vector.ints.Vec4i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec4l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec4s; | ||||
| 
 | ||||
| public interface Vec4d extends Vecd | ||||
| { | ||||
| public interface Vec4d extends Vecd { | ||||
| 	public static final Vec4d ZERO = of(); | ||||
| 	public static final Vec4d MINUS_ONE = of(-1D); | ||||
| 	public static final Vec4d ONE = of(1D); | ||||
| 	 | ||||
| 	public static Vec4d mutable(){return new Vec4dMutable();} | ||||
| 	public static Vec4d mutable(double value){return new Vec4dMutable(value);} | ||||
| 	public static Vec4d mutable(double x, double y, double z, double w){return new Vec4dMutable(x, y, z, w);} | ||||
| 	public static Vec4d mutable(Vec4d vec){return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	 | ||||
| 	public static Vec4d of(){return new Vec4dImmutable();} | ||||
| 	public static Vec4d of(double value){return new Vec4dImmutable(value);} | ||||
| 	public static Vec4d of(double x, double y, double z, double w){return new Vec4dImmutable(x, y, z, w);} | ||||
| 	public static Vec4d of(Vec4d vec){return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	public static Vec4d mutable() { return new Vec4dMutable(); } | ||||
| 	public static Vec4d mutable(double value) { return new Vec4dMutable(value); } | ||||
| 	public static Vec4d mutable(double x, double y, double z, double w) { return new Vec4dMutable(x, y, z, w); } | ||||
| 	public static Vec4d mutable(Vec4d vec) { return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	public static Vec4d of() { return new Vec4dImmutable(); } | ||||
| 	public static Vec4d of(double value) { return new Vec4dImmutable(value); } | ||||
| 	public static Vec4d of(double x, double y, double z, double w) { return new Vec4dImmutable(x, y, z, w); } | ||||
| 	public static Vec4d of(Vec4d vec) { return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	 | ||||
| 	public double getX(); | ||||
| 	public double getY(); | ||||
| @ -34,85 +32,71 @@ public interface Vec4d extends Vecd | ||||
| 	public Vec4d setY(double y); | ||||
| 	public Vec4d setZ(double z); | ||||
| 	public Vec4d setW(double w); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default double[] asArray(){return new double[]{getX(), getY(), getZ(), getW()};} | ||||
| 	public default double[] asArray() { return new double[] {getX(), getY(), getZ(), getW()}; } | ||||
| 	@Override | ||||
| 	public Vec4d copy(); | ||||
| 	@Override | ||||
| 	public default Vec4d abs(){return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()), Math.abs(getW()));} | ||||
| 	public default Vec4d abs() { return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()), Math.abs(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4d negate(){return set(0D, 0D, 0D, 0D);} | ||||
| 	public default Vec4d negate() { return set(0D, 0D, 0D, 0D); } | ||||
| 	@Override | ||||
| 	public default Vec4d invert(){return set(-getX(), -getY(), -getZ(), -getW());} | ||||
| 	public default Vec4d normalize() | ||||
| 	{ | ||||
| 	public default Vec4d invert() { return set(-getX(), -getY(), -getZ(), -getW()); } | ||||
| 	public default Vec4d normalize() { | ||||
| 		double l = length(); | ||||
| 		return l == 0D ? this : multiply(1.0D / l); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec4d normalize3D() | ||||
| 	{ | ||||
| 	public default Vec4d normalize3D() { | ||||
| 		double value = (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()); | ||||
| 		return value == 0D ? this : multiply(1D / value); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4d add(double value){return add(value, value, value, value);}	 | ||||
| 	public default Vec4d add(Vec4d value){return add(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4d add(double x, double y, double z, double w){return set(getX() + x, getY() + y, getZ() + z, getW() + w);} | ||||
| 
 | ||||
| 	public default Vec4d add(double value) { return add(value, value, value, value); } | ||||
| 	public default Vec4d add(Vec4d value) { return add(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4d add(double x, double y, double z, double w) { return set(getX() + x, getY() + y, getZ() + z, getW() + w); } | ||||
| 	@Override | ||||
| 	public default Vec4d sub(double value){return sub(value, value, value, value);} | ||||
| 	public default Vec4d sub(Vec4d value){return sub(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4d sub(double x, double y, double z, double w){return set(getX() - x, getY() - y, getZ() - z, getW() - w);} | ||||
| 	 | ||||
| 	public default Vec4d sub(double value) { return sub(value, value, value, value); } | ||||
| 	public default Vec4d sub(Vec4d value) { return sub(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4d sub(double x, double y, double z, double w) { return set(getX() - x, getY() - y, getZ() - z, getW() - w); } | ||||
| 	@Override | ||||
| 	public default Vec4d multiply(double value){return multiply(value, value, value, value);} | ||||
| 	public default Vec4d multiply(Vec4d value){return multiply(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4d multiply(double x, double y, double z, double w){return set(getX() * x, getY() * y, getZ() * z, getW() * w);} | ||||
| 	 | ||||
| 	public default Vec4d multiply(double value) { return multiply(value, value, value, value); } | ||||
| 	public default Vec4d multiply(Vec4d value) { return multiply(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4d multiply(double x, double y, double z, double w) { return set(getX() * x, getY() * y, getZ() * z, getW() * w); } | ||||
| 	@Override | ||||
| 	public default Vec4d devide(double value){return devide(value, value, value, value);} | ||||
| 	public default Vec4d devide(Vec4d value){return devide(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4d devide(double x, double y, double z, double w){return set(getX() / x, getY() / y, getZ() / z, getW() / w);} | ||||
| 	 | ||||
| 	public default Vec4d devide(double value) { return devide(value, value, value, value); } | ||||
| 	public default Vec4d devide(Vec4d value) { return devide(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4d devide(double x, double y, double z, double w) { return set(getX() / x, getY() / y, getZ() / z, getW() / w); } | ||||
| 	@Override | ||||
| 	public default Vec4d set(double value){return set(value, value, value, value);} | ||||
| 	public default Vec4d set(Vec4d value){return set(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4d set(double value) { return set(value, value, value, value); } | ||||
| 	public default Vec4d set(Vec4d value) { return set(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public Vec4d set(double x, double y, double z, double w); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec4d value){return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double distanceTo(double x, double y, double z, double w){return Math.sqrt(distanceTo(x, y, z, w));} | ||||
| 	 | ||||
| 	public default double distanceToSquared(Vec4d value){return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double distanceToSquared(double x, double y, double z, double w) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec4d value) { return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double distanceTo(double x, double y, double z, double w) { return Math.sqrt(distanceTo(x, y, z, w)); } | ||||
| 	public default double distanceToSquared(Vec4d value) { return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double distanceToSquared(double x, double y, double z, double w) { | ||||
| 		double xPos = getX() - x; | ||||
| 		double yPos = getY() - y; | ||||
| 		double zPos = getZ() - z; | ||||
| 		double wPos = getW() - w; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos) + (wPos * wPos); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default double lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW());} | ||||
| 
 | ||||
| 	public default double dotProduct(Vec4d value){return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double dotProduct(double x, double y, double z, double w){return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w);}; | ||||
| 	 | ||||
| 	public default Vec4d lerp(Vec4d value, float progress, Vec4d result){return lerp(value.getX(), value.getY(), value.getZ(), value.getW(), progress, result);} | ||||
| 	public default Vec4d lerp(double x, double y, double z, double w, float progress, Vec4d result){return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress), MathUtils.lerp(getZ(), z, progress), MathUtils.lerp(getW(), w, progress));} | ||||
| 	 | ||||
| 	public default double angle(Vec4d value){return angle(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double angle(double x, double y, double z, double w){return Math.acos(MathUtils.clamp(-1D, 1D, angleCos(x, y, z, w)));} | ||||
| 	 | ||||
| 	public default double angleCos(Vec4d value){return angleCos(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double angleCos(double x, double y, double z, double w){return dotProduct(x, y, z, w) / Math.sqrt(lengthSquared() * (x * x) + (y * y) + (z * z) + (w * w));} | ||||
| 	 | ||||
| 	public default Vec4d rotate(double angle, Vec4d axis){return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), axis.getW());} | ||||
| 	public default Vec4d rotate(double angle, Vec4d axis, Vec4d result){return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), axis.getW(), result);} | ||||
| 	public default Vec4d rotate(double angle, double x, double y, double z, double w){return rotate(angle, x, y, z, w, this);} | ||||
| 	public default Vec4d rotate(double angle, double x, double y, double z, double w, Vec4d result) | ||||
| 	{ | ||||
| 	public default double lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW()); } | ||||
| 	public default double dotProduct(Vec4d value) { return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double dotProduct(double x, double y, double z, double w) { return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w); }; | ||||
| 	public default Vec4d lerp(Vec4d value, float progress, Vec4d result) { return lerp(value.getX(), value.getY(), value.getZ(), value.getW(), progress, result); } | ||||
| 	public default Vec4d lerp(double x, double y, double z, double w, float progress, Vec4d result) { return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress), MathUtils.lerp(getZ(), z, progress), MathUtils.lerp(getW(), w, progress)); } | ||||
| 	public default double angle(Vec4d value) { return angle(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double angle(double x, double y, double z, double w) { return Math.acos(MathUtils.clamp(-1D, 1D, angleCos(x, y, z, w))); } | ||||
| 	public default double angleCos(Vec4d value) { return angleCos(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double angleCos(double x, double y, double z, double w) { return dotProduct(x, y, z, w) / Math.sqrt(lengthSquared() * (x * x) + (y * y) + (z * z) + (w * w)); } | ||||
| 	public default Vec4d rotate(double angle, Vec4d axis) { return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), axis.getW()); } | ||||
| 	public default Vec4d rotate(double angle, Vec4d axis, Vec4d result) { return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), axis.getW(), result); } | ||||
| 	public default Vec4d rotate(double angle, double x, double y, double z, double w) { return rotate(angle, x, y, z, w, this); } | ||||
| 	public default Vec4d rotate(double angle, double x, double y, double z, double w, Vec4d result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double dot = dotProduct(x, y, z, w); | ||||
| @ -121,27 +105,27 @@ public interface Vec4d extends Vecd | ||||
| 		double zPos = z * dot * (1D - cos) + (getZ() * cos) + (-y * getX() + x * getY()) * sin; | ||||
| 		return result.set(xPos, yPos, zPos, getW()); | ||||
| 	} | ||||
| 	public default Vec4d rotateX(double angle){return rotateX(angle, this);} | ||||
| 	public default Vec4d rotateX(double angle, Vec4d result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec4d rotateX(double angle) { return rotateX(angle, this); } | ||||
| 	public default Vec4d rotateX(double angle, Vec4d result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double y = getY() * cos + getZ() * sin; | ||||
| 		double z = getZ() * cos - getY() * sin; | ||||
| 		return result.set(getX(), y, z, getW()); | ||||
| 	} | ||||
| 	public default Vec4d rotateY(double angle){return rotateY(angle, this);} | ||||
| 	public default Vec4d rotateY(double angle, Vec4d result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec4d rotateY(double angle) { return rotateY(angle, this); } | ||||
| 	public default Vec4d rotateY(double angle, Vec4d result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double x = getX() * cos + getZ() * sin; | ||||
| 		double z = getZ() * cos - getX() * sin; | ||||
| 		return result.set(x, getY(), z, getW()); | ||||
| 	} | ||||
| 	public default Vec4d rotateZ(double angle){return rotateZ(angle, this);} | ||||
| 	public default Vec4d rotateZ(double angle, Vec4d result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec4d rotateZ(double angle) { return rotateZ(angle, this); } | ||||
| 	public default Vec4d rotateZ(double angle, Vec4d result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double x = cos * getX() - sin * getY(); | ||||
| @ -149,9 +133,8 @@ public interface Vec4d extends Vecd | ||||
| 		return result.set(x, y, getZ(), getW()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec4d smoothStep(Vec4d value, float progress, Vec4d result){return smoothStep(value.getX(), value.getY(), value.getZ(), value.getW(), progress, result);} | ||||
| 	public default Vec4d smoothStep(double x, double y, double z, double w, float progress, Vec4d result) | ||||
| 	{ | ||||
| 	public default Vec4d smoothStep(Vec4d value, float progress, Vec4d result) { return smoothStep(value.getX(), value.getY(), value.getZ(), value.getW(), progress, result); } | ||||
| 	public default Vec4d smoothStep(double x, double y, double z, double w, float progress, Vec4d result) { | ||||
| 		double t2 = progress * progress; | ||||
| 		double t3 = t2 * progress; | ||||
| 		double xPos = ((getX() + getX() - x - x) * t3 + (3.0D * x - 3.0D * getX()) * t2 + getX() * progress + getX()); | ||||
| @ -161,71 +144,58 @@ public interface Vec4d extends Vecd | ||||
| 		return result.set(xPos, yPos, zPos, wPos); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec4d min(Vec4d other) {return min(other, this);} | ||||
| 	public default Vec4d min(Vec4d other, Vec4d result){return min(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4d min(double x, double y, double z, double w) {return min(x, y, z, w, this);} | ||||
| 	public default Vec4d min(double x, double y, double z, double w, Vec4d result){return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z), Math.min(getW(), w));} | ||||
| 	 | ||||
| 	public default Vec4d max(Vec4d other) {return max(other, this);} | ||||
| 	public default Vec4d max(Vec4d other, Vec4d result){return max(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4d max(double x, double y, double z, double w) {return max(x, y, z, w, this);} | ||||
| 	public default Vec4d max(double x, double y, double z, double w, Vec4d result){return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z), Math.max(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec4d difference(Vec4d other) {return difference(other, this);} | ||||
| 	public default Vec4d difference(Vec4d other, Vec4d result){return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4d difference(double x, double y, double z, double w) {return difference(x, y, z, w, this);} | ||||
| 	public default Vec4d difference(double x, double y, double z, double w, Vec4d result){return result.set(getX() - x, getY() - y, getZ() - z, getW() - w);} | ||||
| 	public default Vec4d min(Vec4d other) { return min(other, this); } | ||||
| 	public default Vec4d min(Vec4d other, Vec4d result) { return min(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4d min(double x, double y, double z, double w) { return min(x, y, z, w, this); } | ||||
| 	public default Vec4d min(double x, double y, double z, double w, Vec4d result) { return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z), Math.min(getW(), w)); } | ||||
| 	public default Vec4d max(Vec4d other) { return max(other, this); } | ||||
| 	public default Vec4d max(Vec4d other, Vec4d result) { return max(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4d max(double x, double y, double z, double w) { return max(x, y, z, w, this); } | ||||
| 	public default Vec4d max(double x, double y, double z, double w, Vec4d result) { return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z), Math.max(getZ(), z)); } | ||||
| 	public default Vec4d difference(Vec4d other) { return difference(other, this); } | ||||
| 	public default Vec4d difference(Vec4d other, Vec4d result) { return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4d difference(double x, double y, double z, double w) { return difference(x, y, z, w, this); } | ||||
| 	public default Vec4d difference(double x, double y, double z, double w, Vec4d result) { return result.set(getX() - x, getY() - y, getZ() - z, getW() - w); } | ||||
| 	@Override | ||||
| 	public default Vec4d clamp(double min, double max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec4d clamp(double min, double max, Vec4d result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec4d clamp(double min, double max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec4d clamp(double min, double max, Vec4d result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4d clamp(double min, double max){return clamp(min, max, ALL);} | ||||
| 	public default Vec4d clamp(double min, double max, Vec4d result){return clamp(min, max, result, ALL);} | ||||
| 	@Override | ||||
| 	public default Vec4d clamp(double min, double max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec4d clamp(double min, double max, Vec4d result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW()));} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4d store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec4d store(ByteBuffer buffer) { | ||||
| 		buffer.putDouble(getX()).putDouble(getY()).putDouble(getZ()).putDouble(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4d load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getDouble(), buffer.getDouble(), buffer.getDouble(), buffer.getDouble()); | ||||
| 	} | ||||
| 	public default Vec4d load(ByteBuffer buffer) { return set(buffer.getDouble(), buffer.getDouble(), buffer.getDouble(), buffer.getDouble()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4d store(DoubleBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec4d store(DoubleBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()).put(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4d load(DoubleBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec4d load(DoubleBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec4b asByte(){return isMutable() ? Vec4b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ()), (byte)MathUtils.floor(getW())) : Vec4b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ()), (byte)MathUtils.floor(getW()));} | ||||
| 	public default Vec4b asByte() { return isMutable() ? Vec4b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ()), (byte)MathUtils.floor(getW())) : Vec4b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ()), (byte)MathUtils.floor(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4s asShort(){return isMutable() ? Vec4s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ()), (short)MathUtils.floor(getW())) : Vec4s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ()), (short)MathUtils.floor(getW()));} | ||||
| 	public default Vec4s asShort() { return isMutable() ? Vec4s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ()), (short)MathUtils.floor(getW())) : Vec4s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ()), (short)MathUtils.floor(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4i asInt(){return isMutable() ? Vec4i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())) : Vec4i.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW()));} | ||||
| 	public default Vec4i asInt() { return isMutable() ? Vec4i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())) : Vec4i.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4l asLong() {return isMutable() ? Vec4l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())) : Vec4l.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW()));} | ||||
| 	public default Vec4l asLong() { return isMutable() ? Vec4l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())) : Vec4l.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4f asFloat(){return isMutable() ? Vec4f.mutable((float)getX(), (float)getY(), (float)getZ(), (float)getW()) : Vec4f.of((float)getX(), (float)getY(), (float)getZ(), (float)getW());} | ||||
| 	 | ||||
| 	public default Vec4f asFloat() { return isMutable() ? Vec4f.mutable((float)getX(), (float)getY(), (float)getZ(), (float)getW()) : Vec4f.of((float)getX(), (float)getY(), (float)getZ(), (float)getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4d asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec4d asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec4d asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec4d asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec4d copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec4d copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec4d copyAsImmutable(){return of(this);} | ||||
| 	public default Vec4d copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,31 +2,27 @@ package speiger.src.coreengine.math.vector.doubles; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4dImmutable implements Vec4d | ||||
| { | ||||
| public class Vec4dImmutable implements Vec4d { | ||||
| 	final double x; | ||||
| 	final double y; | ||||
| 	final double z; | ||||
| 	final double w; | ||||
| 	 | ||||
| 	public Vec4dImmutable() | ||||
| 	{ | ||||
| 	public Vec4dImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 		w = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4dImmutable(double value) | ||||
| 	{ | ||||
| 	public Vec4dImmutable(double value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4dImmutable(double x, double y, double z, double w) | ||||
| 	{ | ||||
| 	public Vec4dImmutable(double x, double y, double z, double w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -34,82 +30,37 @@ public class Vec4dImmutable implements Vec4d | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public double getX() { return x; } | ||||
| 	@Override | ||||
| 	public double getY() { return y; } | ||||
| 	@Override | ||||
| 	public double getZ() { return z; } | ||||
| 	@Override | ||||
| 	public double getW() { return w; } | ||||
| 	@Override | ||||
| 	public Vec4d setX(double x) { return this.x == x ? this : Vec4d.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4d setY(double y) { return this.y == y ? this : Vec4d.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4d setZ(double z) { return this.z == z ? this : Vec4d.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4d setW(double w) { return this.w == w ? this : Vec4d.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4d copy() { return Vec4d.of(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public double getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public double getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public double getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Vec4d setX(double x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec4d.of(x, y, z, w); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Vec4d setY(double y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec4d.of(x, y, z, w); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Vec4d setZ(double z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec4d.of(x, y, z, w); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Vec4d setW(double w) | ||||
| 	{ | ||||
| 		return this.w == w ? this : Vec4d.of(x, y, z, w); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Vec4d copy() | ||||
| 	{ | ||||
| 		return Vec4d.of(this); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Vec4d set(double x, double y, double z, double w) | ||||
| 	{ | ||||
| 	public Vec4d set(double x, double y, double z, double w) { | ||||
| 		return this.x == x && this.y == y && this.z == z && this.w == w ? this : Vec4d.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4d) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4d) { | ||||
| 			Vec4d vec = (Vec4d)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -117,8 +68,5 @@ public class Vec4dImmutable implements Vec4d | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4d[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4d[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,27 +2,22 @@ package speiger.src.coreengine.math.vector.doubles; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4dMutable implements Vec4d | ||||
| { | ||||
| public class Vec4dMutable implements Vec4d { | ||||
| 	double x; | ||||
| 	double y; | ||||
| 	double z; | ||||
| 	double w; | ||||
| 	 | ||||
| 	public Vec4dMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec4dMutable() {} | ||||
| 	 | ||||
| 	public Vec4dMutable(double value) | ||||
| 	{ | ||||
| 	public Vec4dMutable(double value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4dMutable(double x, double y, double z, double w) | ||||
| 	{ | ||||
| 	public Vec4dMutable(double x, double y, double z, double w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -30,72 +25,45 @@ public class Vec4dMutable implements Vec4d | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public double getX() { return x; } | ||||
| 	@Override | ||||
| 	public double getY() { return y; } | ||||
| 	@Override | ||||
| 	public double getZ() { return z; } | ||||
| 	@Override | ||||
| 	public double getW() { return w; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public double getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4d setX(double x) | ||||
| 	{ | ||||
| 	public Vec4d setX(double x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4d setY(double y) | ||||
| 	{ | ||||
| 	public Vec4d setY(double y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4d setZ(double z) | ||||
| 	{ | ||||
| 	public Vec4d setZ(double z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4d setW(double w) | ||||
| 	{ | ||||
| 	public Vec4d setW(double w) { | ||||
| 		this.w = w; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4d copy() | ||||
| 	{ | ||||
| 		return Vec4d.mutable(this); | ||||
| 	} | ||||
| 	public Vec4d copy() { return Vec4d.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4d set(double x, double y, double z, double w) | ||||
| 	{ | ||||
| 	public Vec4d set(double x, double y, double z, double w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -104,16 +72,11 @@ public class Vec4dMutable implements Vec4d | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4d) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4d) { | ||||
| 			Vec4d vec = (Vec4d)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -121,8 +84,5 @@ public class Vec4dMutable implements Vec4d | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4d[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4d[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
| @ -9,8 +9,7 @@ import speiger.src.coreengine.math.vector.ints.Veci; | ||||
| import speiger.src.coreengine.math.vector.longs.Vecl; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vecs; | ||||
| 
 | ||||
| public interface Vecd extends Vec | ||||
| { | ||||
| public interface Vecd extends Vec { | ||||
| 	public Vecd set(double value); | ||||
| 	public Vecd add(double value); | ||||
| 	public Vecd sub(double value); | ||||
| @ -19,12 +18,10 @@ public interface Vecd extends Vec | ||||
| 	public Vecd clamp(double min, double max); | ||||
| 	public Vecd clamp(double min, double max, int filter); | ||||
| 	public double lengthSquared(); | ||||
| 	public default double length(){return Math.sqrt(lengthSquared());} | ||||
| 	 | ||||
| 	public default double length() { return Math.sqrt(lengthSquared()); } | ||||
| 	public Vecd store(DoubleBuffer buffer); | ||||
| 	public Vecd load(DoubleBuffer buffer); | ||||
| 	public double[] asArray(); | ||||
| 	 | ||||
| 	public Vecb asByte(); | ||||
| 	public Vecs asShort(); | ||||
| 	public Veci asInt(); | ||||
|  | ||||
| @ -10,106 +10,91 @@ import speiger.src.coreengine.math.vector.ints.Vec2i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec2l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec2s; | ||||
| 
 | ||||
| public interface Vec2f extends Vecf | ||||
| { | ||||
| public interface Vec2f extends Vecf { | ||||
| 	public static final Vec2f ZERO = of(); | ||||
| 	public static final Vec2f MINUS_ONE = of(-1F); | ||||
| 	public static final Vec2f ONE = of(1F); | ||||
| 	 | ||||
| 	public static Vec2f mutable(){return new Vec2fMutable();} | ||||
| 	public static Vec2f mutable(float value){return new Vec2fMutable(value);} | ||||
| 	public static Vec2f mutable(float x, float y){return new Vec2fMutable(x, y);} | ||||
| 	public static Vec2f mutable(Vec2f value){return mutable(value.getX(), value.getY());} | ||||
| 	 | ||||
| 	public static Vec2f of(){return new Vec2fImmutable();} | ||||
| 	public static Vec2f of(float value){return new Vec2fImmutable(value);} | ||||
| 	public static Vec2f of(float x, float y){return new Vec2fImmutable(x, y);} | ||||
| 	public static Vec2f of(Vec2f value){return of(value.getX(), value.getY());} | ||||
| 	public static Vec2f mutable() { return new Vec2fMutable(); } | ||||
| 	public static Vec2f mutable(float value) { return new Vec2fMutable(value); } | ||||
| 	public static Vec2f mutable(float x, float y) { return new Vec2fMutable(x, y); } | ||||
| 	public static Vec2f mutable(Vec2f value) { return mutable(value.getX(), value.getY()); } | ||||
| 	public static Vec2f of() { return new Vec2fImmutable(); } | ||||
| 	public static Vec2f of(float value) { return new Vec2fImmutable(value); } | ||||
| 	public static Vec2f of(float x, float y) { return new Vec2fImmutable(x, y); } | ||||
| 	public static Vec2f of(Vec2f value) { return of(value.getX(), value.getY()); } | ||||
| 	 | ||||
| 	public float getX(); | ||||
| 	public float getY(); | ||||
| 	public Vec2f setX(float x); | ||||
| 	public Vec2f setY(float y); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default float[] asArray(){return new float[]{getX(), getY()};} | ||||
| 	public default float[] asArray() { return new float[] {getX(), getY()}; } | ||||
| 	@Override | ||||
| 	public Vec2f copy(); | ||||
| 	@Override | ||||
| 	public default Vec2f abs(){return set(Math.abs(getX()), Math.abs(getY()));} | ||||
| 	public default Vec2f abs() { return set(Math.abs(getX()), Math.abs(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2f negate(){return set(0F, 0F);} | ||||
| 	public default Vec2f negate() { return set(0F, 0F); } | ||||
| 	@Override | ||||
| 	public default Vec2f invert(){return set(-getX(), -getY());}; | ||||
| 	public default Vec2f normalize() | ||||
| 	{ | ||||
| 	public default Vec2f invert() { return set(-getX(), -getY()); }; | ||||
| 	public default Vec2f normalize() { | ||||
| 		float l = length(); | ||||
| 		return l == 0F ? this : multiply(1F / l); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2f add(float value) {return add(value, value);} | ||||
| 	public default Vec2f add(Vec2f value) {return add(value.getX(), value.getY());} | ||||
| 	public default Vec2f add(float x, float y) {return set(x + getX(), y + getY());} | ||||
| 	 | ||||
| 	public default Vec2f add(float value) { return add(value, value); } | ||||
| 	public default Vec2f add(Vec2f value) { return add(value.getX(), value.getY()); } | ||||
| 	public default Vec2f add(float x, float y) { return set(x + getX(), y + getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2f sub(float value){return sub(value, value);} | ||||
| 	public default Vec2f sub(Vec2f value){return sub(value.getX(), value.getY());} | ||||
| 	public default Vec2f sub(float x, float y) {return set(getX() - x, getY() - y);} | ||||
| 	 | ||||
| 	public default Vec2f sub(float value) { return sub(value, value); } | ||||
| 	public default Vec2f sub(Vec2f value) { return sub(value.getX(), value.getY()); } | ||||
| 	public default Vec2f sub(float x, float y) { return set(getX() - x, getY() - y); } | ||||
| 	@Override | ||||
| 	public default Vec2f multiply(float value){return multiply(value, value);} | ||||
| 	public default Vec2f multiply(Vec2f value){return multiply(value.getX(), value.getY());} | ||||
| 	public default Vec2f multiply(float x, float y) {return set(x * getX(), y * getY());} | ||||
| 	 | ||||
| 	public default Vec2f multiply(float value) { return multiply(value, value); } | ||||
| 	public default Vec2f multiply(Vec2f value) { return multiply(value.getX(), value.getY()); } | ||||
| 	public default Vec2f multiply(float x, float y) { return set(x * getX(), y * getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2f devide(float value){return devide(value, value);} | ||||
| 	public default Vec2f devide(Vec2f value){return devide(value.getX(), value.getY());} | ||||
| 	public default Vec2f devide(float x, float y){return set(getX() / x, getY() / y);} | ||||
| 	 | ||||
| 	public default Vec2f devide(float value) { return devide(value, value); } | ||||
| 	public default Vec2f devide(Vec2f value) { return devide(value.getX(), value.getY()); } | ||||
| 	public default Vec2f devide(float x, float y) { return set(getX() / x, getY() / y); } | ||||
| 	@Override | ||||
| 	public default Vec2f set(float value){return set(value, value);}; | ||||
| 	public default Vec2f set(Vec2f value){return set(value.getX(), value.getY());} | ||||
| 	public default Vec2f set(float value) { return set(value, value); }; | ||||
| 	public default Vec2f set(Vec2f value) { return set(value.getX(), value.getY()); } | ||||
| 	public Vec2f set(float x, float y); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec2f value){return distanceTo(value.getX(), value.getY());} | ||||
| 	public default double distanceTo(float x, float y){return Math.sqrt(distanceToSquared(x, y));} | ||||
| 	 | ||||
| 	public default double distanceToSquared(Vec2f value){return distanceToSquared(value.getX(), value.getY());} | ||||
| 	public default double distanceToSquared(float x, float y) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec2f value) { return distanceTo(value.getX(), value.getY()); } | ||||
| 	public default double distanceTo(float x, float y) { return Math.sqrt(distanceToSquared(x, y)); } | ||||
| 	public default double distanceToSquared(Vec2f value) { return distanceToSquared(value.getX(), value.getY()); } | ||||
| 	public default double distanceToSquared(float x, float y) { | ||||
| 		double xPos = getX() - x; | ||||
| 		double yPos = getY() - y; | ||||
| 		return (xPos * xPos) + (yPos * yPos); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default float lengthSquared() {return (getX() * getX()) + (getY() * getY());} | ||||
| 	 | ||||
| 	public default double dotProduct(Vec2f value){return dotProduct(value.getX(), value.getY());} | ||||
| 	public default double dotProduct(float x, float y){return (getX() * x) + (getY() * y);} | ||||
| 	 | ||||
| 	public default Vec2f lerp(Vec2f value, float progress, Vec2f result){return lerp(value.getX(), value.getY(), progress, result);} | ||||
| 	public default Vec2f lerp(float x, float y, float progress, Vec2f result){return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress));}; | ||||
| 	 | ||||
| 	public default float angle(Vec2f value){return angle(value.getX(), value.getY());} | ||||
| 	public default float angle(float x, float y){return (float)Math.atan2((getX() * y) - (getY() * x), (getX() * x) + (getY() * y));} | ||||
| 	 | ||||
| 	public default float directionAngle(Vec2f value){return directionAngle(value.getX(), value.getY());} | ||||
| 	public default float directionAngle(float x, float y){return (float)(-Math.toDegrees(Math.atan2(getX() - x, getY() - y)) % 360D);} | ||||
| 	 | ||||
| 	public default Vec2f reflect(Vec2f value){return reflect(value.getX(), value.getY(), this);} | ||||
| 	public default Vec2f reflect(float x, float y){return reflect(x, y, this);}; | ||||
| 	public default Vec2f reflect(Vec2f value, Vec2f result){return reflect(value.getX(), value.getY(), result);} | ||||
| 	public default Vec2f reflect(float x, float y, Vec2f result) | ||||
| 	{ | ||||
| 	public default float lengthSquared() { return (getX() * getX()) + (getY() * getY()); } | ||||
| 	public default double dotProduct(Vec2f value) { return dotProduct(value.getX(), value.getY()); } | ||||
| 	public default double dotProduct(float x, float y) { return (getX() * x) + (getY() * y); } | ||||
| 	public default Vec2f lerp(Vec2f value, float progress, Vec2f result) { return lerp(value.getX(), value.getY(), progress, result); } | ||||
| 	public default Vec2f lerp(float x, float y, float progress, Vec2f result) { return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress)); }; | ||||
| 	public default float angle(Vec2f value) { return angle(value.getX(), value.getY()); } | ||||
| 	public default float angle(float x, float y) { return (float)Math.atan2((getX() * y) - (getY() * x), (getX() * x) + (getY() * y)); } | ||||
| 	public default float directionAngle(Vec2f value) { return directionAngle(value.getX(), value.getY()); } | ||||
| 	public default float directionAngle(float x, float y) { return (float)(-Math.toDegrees(Math.atan2(getX() - x, getY() - y)) % 360D); } | ||||
| 	public default Vec2f reflect(Vec2f value) { return reflect(value.getX(), value.getY(), this); } | ||||
| 	public default Vec2f reflect(float x, float y) { return reflect(x, y, this); }; | ||||
| 	public default Vec2f reflect(Vec2f value, Vec2f result) { return reflect(value.getX(), value.getY(), result); } | ||||
| 	public default Vec2f reflect(float x, float y, Vec2f result) { | ||||
| 		double dot = dotProduct(x, y); | ||||
| 		float x2 = (float)((dot + dot) * x); | ||||
| 		float y2 = (float)((dot + dot) * y); | ||||
| 		return result.set(getX() - x2, getY() - y2); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2f rotate(float angle, Vec2f center){return rotate(angle, center.getX(), center.getY());} | ||||
| 	public default Vec2f rotate(float angle, float x, float y) | ||||
| 	{ | ||||
| 	public default Vec2f rotate(float angle, Vec2f center) { return rotate(angle, center.getX(), center.getY()); } | ||||
| 	public default Vec2f rotate(float angle, float x, float y) { | ||||
| 		float xPos = getX() - x; | ||||
| 		float yPos = getY() - y; | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| @ -117,71 +102,56 @@ public interface Vec2f extends Vecf | ||||
| 		return set((float)((xPos * cos) + (yPos * sin) + x), (float)(-(xPos * sin) + (yPos * cos) + y)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2f min(Vec2f other) {return min(other, this);} | ||||
| 	public default Vec2f min(Vec2f other, Vec2f result){return min(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2f min(float x, float y) {return min(x, y, this);} | ||||
| 	public default Vec2f min(float x, float y, Vec2f result){return result.set(Math.min(getX(), x), Math.min(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2f max(Vec2f other) {return max(other, this);} | ||||
| 	public default Vec2f max(Vec2f other, Vec2f result){return max(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2f max(float x, float y) {return max(x, y, this);} | ||||
| 	public default Vec2f max(float x, float y, Vec2f result){return result.set(Math.max(getX(), x), Math.max(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2f difference(Vec2f other) {return difference(other, this);} | ||||
| 	public default Vec2f difference(Vec2f other, Vec2f result){return difference(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2f difference(float x, float y) {return difference(x, y, this);} | ||||
| 	public default Vec2f difference(float x, float y, Vec2f result){return result.set(getX() - x, getY() - y);} | ||||
| 	 | ||||
| 	public default Vec2f min(Vec2f other) { return min(other, this); } | ||||
| 	public default Vec2f min(Vec2f other, Vec2f result) { return min(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2f min(float x, float y) { return min(x, y, this); } | ||||
| 	public default Vec2f min(float x, float y, Vec2f result) { return result.set(Math.min(getX(), x), Math.min(getY(), y)); } | ||||
| 	public default Vec2f max(Vec2f other) { return max(other, this); } | ||||
| 	public default Vec2f max(Vec2f other, Vec2f result) { return max(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2f max(float x, float y) { return max(x, y, this); } | ||||
| 	public default Vec2f max(float x, float y, Vec2f result) { return result.set(Math.max(getX(), x), Math.max(getY(), y)); } | ||||
| 	public default Vec2f difference(Vec2f other) { return difference(other, this); } | ||||
| 	public default Vec2f difference(Vec2f other, Vec2f result) { return difference(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2f difference(float x, float y) { return difference(x, y, this); } | ||||
| 	public default Vec2f difference(float x, float y, Vec2f result) { return result.set(getX() - x, getY() - y); } | ||||
| 	@Override | ||||
| 	public default Vec2f clamp(float min, float max){return clamp(min, max, ALL);} | ||||
| 	public default Vec2f clamp(float min, float max, Vec2f result){return clamp(min, max, result, ALL);} | ||||
| 	public default Vec2f clamp(float min, float max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec2f clamp(float min, float max, Vec2f result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec2f clamp(float min, float max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec2f clamp(float min, float max, Vec2f result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()));} | ||||
| 	 | ||||
| 	public default Vec2f clamp(float min, float max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec2f clamp(float min, float max, Vec2f result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2f store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec2f store(ByteBuffer buffer) { | ||||
| 		buffer.putFloat(getX()).putFloat(getY()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2f load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getFloat(), buffer.getFloat()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2f load(ByteBuffer buffer) { return set(buffer.getFloat(), buffer.getFloat()); } | ||||
| 	@Override | ||||
| 	public default Vec2f store(FloatBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec2f store(FloatBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2f load(FloatBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	public default Vec2f load(FloatBuffer buffer) { return set(buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec2b asByte(){return isMutable() ? Vec2b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY())) : Vec2b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()));} | ||||
| 	public default Vec2b asByte() { return isMutable() ? Vec2b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY())) : Vec2b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2s asShort(){return isMutable() ? Vec2s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY())) : Vec2s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()));} | ||||
| 	public default Vec2s asShort() { return isMutable() ? Vec2s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY())) : Vec2s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2i asInt(){return isMutable() ? Vec2i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY())) : Vec2i.of(MathUtils.floor(getX()), MathUtils.floor(getY()));} | ||||
| 	public default Vec2i asInt() { return isMutable() ? Vec2i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY())) : Vec2i.of(MathUtils.floor(getX()), MathUtils.floor(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2l asLong() {return isMutable() ? Vec2l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY())) : Vec2l.of(MathUtils.floor(getX()), MathUtils.floor(getY()));} | ||||
| 	public default Vec2l asLong() { return isMutable() ? Vec2l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY())) : Vec2l.of(MathUtils.floor(getX()), MathUtils.floor(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2d asDouble(){return isMutable() ? Vec2d.mutable(getX(), getY()) : Vec2d.of(getX(), getY());} | ||||
| 
 | ||||
| 	 | ||||
| 	public default Vec2d asDouble() { return isMutable() ? Vec2d.mutable(getX(), getY()) : Vec2d.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2f asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec2f asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec2f asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec2f asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec2f copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec2f copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec2f copyAsImmutable(){return of(this);} | ||||
| 	public default Vec2f copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,82 +2,46 @@ package speiger.src.coreengine.math.vector.floats; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2fImmutable implements Vec2f | ||||
| { | ||||
| public class Vec2fImmutable implements Vec2f { | ||||
| 	final float x; | ||||
| 	final float y; | ||||
| 	 | ||||
| 	public Vec2fImmutable() | ||||
| 	{ | ||||
| 	public Vec2fImmutable() { | ||||
| 		x = 0F; | ||||
| 		y = 0F; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2fImmutable(float value) | ||||
| 	{ | ||||
| 	public Vec2fImmutable(float value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2fImmutable(float x, float y) | ||||
| 	{ | ||||
| 	public Vec2fImmutable(float x, float y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public float getX() { return x; } | ||||
| 	@Override | ||||
| 	public float getY() { return y; } | ||||
| 	@Override | ||||
| 	public Vec2f setX(float x) { return this.x == x ? this : Vec2f.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2f setY(float y) { return this.y == y ? this : Vec2f.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2f copy() { return Vec2f.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2f set(float x, float y) { return this.x == x && this.y == y ? this : Vec2f.of(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2f setX(float x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec2f.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2f setY(float y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec2f.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2f copy() | ||||
| 	{ | ||||
| 		return Vec2f.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2f set(float x, float y) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y ? this : Vec2f.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2f) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2f) { | ||||
| 			Vec2f vec = (Vec2f)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -85,8 +49,5 @@ public class Vec2fImmutable implements Vec2f | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2f[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2f[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,84 +2,57 @@ package speiger.src.coreengine.math.vector.floats; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2fMutable implements Vec2f | ||||
| { | ||||
| public class Vec2fMutable implements Vec2f { | ||||
| 	float x; | ||||
| 	float y; | ||||
| 	 | ||||
| 	public Vec2fMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec2fMutable() {} | ||||
| 	 | ||||
| 	public Vec2fMutable(float value) | ||||
| 	{ | ||||
| 	public Vec2fMutable(float value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2fMutable(float x, float y) | ||||
| 	{ | ||||
| 	public Vec2fMutable(float x, float y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public float getX() { return x; } | ||||
| 	@Override | ||||
| 	public float getY() { return y; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2f setX(float x) | ||||
| 	{ | ||||
| 	public Vec2f setX(float x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2f setY(float y) | ||||
| 	{ | ||||
| 	public Vec2f setY(float y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2f copy() | ||||
| 	{ | ||||
| 		return Vec2f.mutable(this); | ||||
| 	} | ||||
| 	public Vec2f copy() { return Vec2f.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2f set(float x, float y) | ||||
| 	{ | ||||
| 	public Vec2f set(float x, float y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2f) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2f) { | ||||
| 			Vec2f vec = (Vec2f)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -87,8 +60,5 @@ public class Vec2fMutable implements Vec2f | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2f[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2f[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -10,21 +10,19 @@ import speiger.src.coreengine.math.vector.ints.Vec3i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec3l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec3s; | ||||
| 
 | ||||
| public interface Vec3f extends Vecf | ||||
| { | ||||
| public interface Vec3f extends Vecf { | ||||
| 	public static final Vec3f ZERO = of(); | ||||
| 	public static final Vec3f MINUS_ONE = of(-1F); | ||||
| 	public static final Vec3f ONE = of(1F); | ||||
| 	 | ||||
| 	public static Vec3f mutable(){return new Vec3fMutable();} | ||||
| 	public static Vec3f mutable(float value){return new Vec3fMutable(value);} | ||||
| 	public static Vec3f mutable(float x, float y, float z){return new Vec3fMutable(x, y, z);} | ||||
| 	public static Vec3f mutable(Vec3f vec){return mutable(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	 | ||||
| 	public static Vec3f of(){return new Vec3fImmutable();} | ||||
| 	public static Vec3f of(float value){return new Vec3fImmutable(value);} | ||||
| 	public static Vec3f of(float x, float y, float z){return new Vec3fImmutable(x, y, z);} | ||||
| 	public static Vec3f of(Vec3f vec){return of(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	public static Vec3f mutable() { return new Vec3fMutable(); } | ||||
| 	public static Vec3f mutable(float value) { return new Vec3fMutable(value); } | ||||
| 	public static Vec3f mutable(float x, float y, float z) { return new Vec3fMutable(x, y, z); } | ||||
| 	public static Vec3f mutable(Vec3f vec) { return mutable(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	public static Vec3f of() { return new Vec3fImmutable(); } | ||||
| 	public static Vec3f of(float value) { return new Vec3fImmutable(value); } | ||||
| 	public static Vec3f of(float x, float y, float z) { return new Vec3fImmutable(x, y, z); } | ||||
| 	public static Vec3f of(Vec3f vec) { return of(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	 | ||||
| 	public float getX(); | ||||
| 	public float getY(); | ||||
| @ -32,98 +30,84 @@ public interface Vec3f extends Vecf | ||||
| 	public Vec3f setX(float x); | ||||
| 	public Vec3f setY(float y); | ||||
| 	public Vec3f setZ(float z); | ||||
| 	@Override | ||||
| 	public default float[] asArray(){return new float[]{getX(), getY(), getZ()};} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default float[] asArray() { return new float[] {getX(), getY(), getZ()}; } | ||||
| 	@Override | ||||
| 	public Vec3f copy(); | ||||
| 	@Override | ||||
| 	public default Vec3f abs(){return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()));} | ||||
| 	public default Vec3f abs() { return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ())); } | ||||
| 	@Override | ||||
| 	public default Vec3f negate(){return set(0F, 0F, 0F);} | ||||
| 	public default Vec3f negate() { return set(0F, 0F, 0F); } | ||||
| 	@Override | ||||
| 	public default Vec3f invert(){return set(-getX(), -getY(), -getZ());} | ||||
| 	public default Vec3f normalize() | ||||
| 	{ | ||||
| 	public default Vec3f invert() { return set(-getX(), -getY(), -getZ()); } | ||||
| 	public default Vec3f normalize() { | ||||
| 		float l = length(); | ||||
| 		return l == 0F ? this : multiply(1.0F / l); | ||||
| 	} | ||||
| 	@Override | ||||
| 	public default Vec3f add(float value){return add(value, value, value);}	 | ||||
| 	public default Vec3f add(Vec3f value){return add(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3f add(float x, float y, float z){return set(getX() + x, getY() + y, getZ() + z);} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3f sub(float value){return sub(value, value, value);} | ||||
| 	public default Vec3f sub(Vec3f value){return sub(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3f sub(float x, float y, float z){return set(getX() - x, getY() - y, getZ() - z);} | ||||
| 	 | ||||
| 	public default Vec3f add(float value) { return add(value, value, value); } | ||||
| 	public default Vec3f add(Vec3f value) { return add(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3f add(float x, float y, float z) { return set(getX() + x, getY() + y, getZ() + z); } | ||||
| 	@Override | ||||
| 	public default Vec3f multiply(float value){return multiply(value, value, value);} | ||||
| 	public default Vec3f multiply(Vec3f value){return multiply(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3f multiply(float x, float y, float z){return set(getX() * x, getY() * y, getZ() * z);} | ||||
| 
 | ||||
| 	public default Vec3f sub(float value) { return sub(value, value, value); } | ||||
| 	public default Vec3f sub(Vec3f value) { return sub(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3f sub(float x, float y, float z) { return set(getX() - x, getY() - y, getZ() - z); } | ||||
| 	@Override | ||||
| 	public default Vec3f devide(float value){return devide(value, value, value);} | ||||
| 	public default Vec3f devide(Vec3f value){return devide(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3f devide(float x, float y, float z){return set(getX() / x, getY() / y, getZ() / z);} | ||||
| 	 | ||||
| 	public default Vec3f multiply(float value) { return multiply(value, value, value); } | ||||
| 	public default Vec3f multiply(Vec3f value) { return multiply(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3f multiply(float x, float y, float z) { return set(getX() * x, getY() * y, getZ() * z); } | ||||
| 	@Override | ||||
| 	public default Vec3f set(float value){return set(value, value, value);} | ||||
| 	public default Vec3f set(Vec3f value){return set(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3f devide(float value) { return devide(value, value, value); } | ||||
| 	public default Vec3f devide(Vec3f value) { return devide(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3f devide(float x, float y, float z) { return set(getX() / x, getY() / y, getZ() / z); } | ||||
| 	@Override | ||||
| 	public default Vec3f set(float value) { return set(value, value, value); } | ||||
| 	public default Vec3f set(Vec3f value) { return set(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public Vec3f set(float x, float y, float z); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec3f value){return distanceTo(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double distanceTo(float x, float y, float z){return Math.sqrt(distanceToSquared(x, y, z));} | ||||
| 	 | ||||
| 	public default double distanceToSquared(Vec3f value){return distanceToSquared(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double distanceToSquared(float x, float y, float z) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec3f value) { return distanceTo(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default double distanceTo(float x, float y, float z) { return Math.sqrt(distanceToSquared(x, y, z)); } | ||||
| 	public default double distanceToSquared(Vec3f value) { return distanceToSquared(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default double distanceToSquared(float x, float y, float z) { | ||||
| 		double xPos = getX() - x; | ||||
| 		double yPos = getY() - y; | ||||
| 		double zPos = getZ() - z; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default float lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ());} | ||||
| 	 | ||||
| 	public default double dotProduct(Vec3f value){return dotProduct(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double dotProduct(float x, float y, float z){return (getX() * x) + (getY() * y) + (getZ() * z);} | ||||
| 	 | ||||
| 	public default Vec3f lerp(Vec3f value, float progress, Vec3f result){return lerp(value.getX(), value.getY(), value.getZ(), progress, result);} | ||||
| 	public default Vec3f lerp(float x, float y, float z, float progress, Vec3f result){return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress), MathUtils.lerp(getZ(), z, progress));} | ||||
| 	 | ||||
| 	public default float angle(Vec3f value){return angle(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default float angle(float x, float y, float z){return (float)Math.acos(MathUtils.clamp(-1, 1, angleCos(x, y, z)));} | ||||
| 	 | ||||
| 	public default float angleCos(Vec3f value){return angleCos(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default float angleCos(float x, float y, float z) | ||||
| 	{ | ||||
| 	public default float lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()); } | ||||
| 	public default double dotProduct(Vec3f value) { return dotProduct(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default double dotProduct(float x, float y, float z) { return (getX() * x) + (getY() * y) + (getZ() * z); } | ||||
| 	public default Vec3f lerp(Vec3f value, float progress, Vec3f result) { return lerp(value.getX(), value.getY(), value.getZ(), progress, result); } | ||||
| 	public default Vec3f lerp(float x, float y, float z, float progress, Vec3f result) { return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress), MathUtils.lerp(getZ(), z, progress)); } | ||||
| 	public default float angle(Vec3f value) { return angle(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default float angle(float x, float y, float z) { return (float)Math.acos(MathUtils.clamp(-1, 1, angleCos(x, y, z))); } | ||||
| 	public default float angleCos(Vec3f value) { return angleCos(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default float angleCos(float x, float y, float z) { | ||||
| 		double myLength = (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()); | ||||
| 		double otherLength = (x * x) + (y * y) + (z * z); | ||||
| 		float dot = (getX() * x) + (getY() * y) + (getZ() * z); | ||||
| 		return dot / (float)(Math.sqrt(myLength * otherLength)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3f crossProduct(Vec3f value){return crossProduct(value.getX(), value.getY(), value.getZ(), this);} | ||||
| 	public default Vec3f crossProduct(Vec3f value, Vec3f result){return crossProduct(value.getX(), value.getY(), value.getZ(), result);} | ||||
| 	public default Vec3f crossProduct(float x, float y, float z){return crossProduct(x, y, z, this);} | ||||
| 	public default Vec3f crossProduct(float x, float y, float z, Vec3f result){return result.set((getY() * z) - (getZ() * y), (getZ() * x) - (getX() * z), (getX() * y) - (getY() * x));} | ||||
| 	 | ||||
| 	public default Vec3f reflect(Vec3f value){return reflect(value.getX(), value.getY(), value.getZ(), this);} | ||||
| 	public default Vec3f reflect(Vec3f value, Vec3f result){return reflect(value.getX(), value.getY(), value.getZ(), result);} | ||||
| 	public default Vec3f reflect(float x, float y, float z){return reflect(x, y, z, this);} | ||||
| 	public default Vec3f reflect(float x, float y, float z, Vec3f result) | ||||
| 	{ | ||||
| 	public default Vec3f crossProduct(Vec3f value) { return crossProduct(value.getX(), value.getY(), value.getZ(), this); } | ||||
| 	public default Vec3f crossProduct(Vec3f value, Vec3f result) { return crossProduct(value.getX(), value.getY(), value.getZ(), result); } | ||||
| 	public default Vec3f crossProduct(float x, float y, float z) { return crossProduct(x, y, z, this); } | ||||
| 	public default Vec3f crossProduct(float x, float y, float z, Vec3f result) { return result.set((getY() * z) - (getZ() * y), (getZ() * x) - (getX() * z), (getX() * y) - (getY() * x)); } | ||||
| 	public default Vec3f reflect(Vec3f value) { return reflect(value.getX(), value.getY(), value.getZ(), this); } | ||||
| 	public default Vec3f reflect(Vec3f value, Vec3f result) { return reflect(value.getX(), value.getY(), value.getZ(), result); } | ||||
| 	public default Vec3f reflect(float x, float y, float z) { return reflect(x, y, z, this); } | ||||
| 	public default Vec3f reflect(float x, float y, float z, Vec3f result) { | ||||
| 		double dot = dotProduct(x, y, z) * 2D; | ||||
| 		return result.set(getX() - (float)(dot * x), getY() - (float)(dot * y), getZ() - (float)(dot * z)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3f rotate(float angle, Vec3f axis){return rotate(angle, axis.getX(), axis.getY(), axis.getZ());} | ||||
| 	public default Vec3f rotate(float angle, Vec3f axis, Vec3f result){return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), result);} | ||||
| 	public default Vec3f rotate(float angle, float x, float y, float z){return rotate(angle, x, y, z, this);} | ||||
| 	public default Vec3f rotate(float angle, float x, float y, float z, Vec3f result) | ||||
| 	{ | ||||
| 	public default Vec3f rotate(float angle, Vec3f axis) { return rotate(angle, axis.getX(), axis.getY(), axis.getZ()); } | ||||
| 	public default Vec3f rotate(float angle, Vec3f axis, Vec3f result) { return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), result); } | ||||
| 	public default Vec3f rotate(float angle, float x, float y, float z) { return rotate(angle, x, y, z, this); } | ||||
| 	public default Vec3f rotate(float angle, float x, float y, float z, Vec3f result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double dot = dotProduct(x, y, z); | ||||
| @ -132,27 +116,27 @@ public interface Vec3f extends Vecf | ||||
| 		double zPos = z * dot * (1D - cos) + (getZ() * cos) + (-y * getX() + x * getY()) * sin; | ||||
| 		return result.set((float)xPos, (float)yPos, (float)zPos); | ||||
| 	} | ||||
| 	public default Vec3f rotateX(float angle){return rotateX(angle, this);} | ||||
| 	public default Vec3f rotateX(float angle, Vec3f result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec3f rotateX(float angle) { return rotateX(angle, this); } | ||||
| 	public default Vec3f rotateX(float angle, Vec3f result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double y = getY() * cos + getZ() * sin; | ||||
| 		double z = getZ() * cos - getY() * sin; | ||||
| 		return result.set(getX(), (float)y, (float)z); | ||||
| 	} | ||||
| 	public default Vec3f rotateY(float angle){return rotateY(angle, this);} | ||||
| 	public default Vec3f rotateY(float angle, Vec3f result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec3f rotateY(float angle) { return rotateY(angle, this); } | ||||
| 	public default Vec3f rotateY(float angle, Vec3f result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double x = getX() * cos + getZ() * sin; | ||||
| 		double z = getZ() * cos - getX() * sin; | ||||
| 		return result.set((float)x, getY(), (float)z); | ||||
| 	} | ||||
| 	public default Vec3f rotateZ(float angle){return rotateZ(angle, this);} | ||||
| 	public default Vec3f rotateZ(float angle, Vec3f result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec3f rotateZ(float angle) { return rotateZ(angle, this); } | ||||
| 	public default Vec3f rotateZ(float angle, Vec3f result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double x = cos * getX() - sin * getY(); | ||||
| @ -160,9 +144,8 @@ public interface Vec3f extends Vecf | ||||
| 		return result.set((float)x, (float)y, getZ()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3f smoothStep(Vec3f value, float progress, Vec3f result){return smoothStep(value.getX(), value.getY(), value.getZ(), progress, result);} | ||||
| 	public default Vec3f smoothStep(float x, float y, float z, float progress, Vec3f result) | ||||
| 	{ | ||||
| 	public default Vec3f smoothStep(Vec3f value, float progress, Vec3f result) { return smoothStep(value.getX(), value.getY(), value.getZ(), progress, result); } | ||||
| 	public default Vec3f smoothStep(float x, float y, float z, float progress, Vec3f result) { | ||||
| 		float t2 = progress * progress; | ||||
| 		float t3 = t2 * progress; | ||||
| 		float xPos = ((getX() + getX() - x - x) * t3 + (3.0F * x - 3.0F * getX()) * t2 + getX() * progress + getX()); | ||||
| @ -171,72 +154,58 @@ public interface Vec3f extends Vecf | ||||
| 		return result.set(xPos, yPos, zPos); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3f min(Vec3f other) {return min(other, this);} | ||||
| 	public default Vec3f min(Vec3f other, Vec3f result){return min(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3f min(float x, float y, float z) {return min(x, y, z, this);} | ||||
| 	public default Vec3f min(float x, float y, float z, Vec3f result){return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec3f max(Vec3f other) {return max(other, this);} | ||||
| 	public default Vec3f max(Vec3f other, Vec3f result){return max(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3f max(float x, float y, float z) {return max(x, y, z, this);} | ||||
| 	public default Vec3f max(float x, float y, float z, Vec3f result){return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec3f difference(Vec3f other) {return difference(other, this);} | ||||
| 	public default Vec3f difference(Vec3f other, Vec3f result){return difference(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3f difference(float x, float y, float z) {return difference(x, y, z, this);} | ||||
| 	public default Vec3f difference(float x, float y, float z, Vec3f result){return result.set(getX() - x, getY() - y, getZ() - z);} | ||||
| 	public default Vec3f min(Vec3f other) { return min(other, this); } | ||||
| 	public default Vec3f min(Vec3f other, Vec3f result) { return min(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3f min(float x, float y, float z) { return min(x, y, z, this); } | ||||
| 	public default Vec3f min(float x, float y, float z, Vec3f result) { return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z)); } | ||||
| 	public default Vec3f max(Vec3f other) { return max(other, this); } | ||||
| 	public default Vec3f max(Vec3f other, Vec3f result) { return max(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3f max(float x, float y, float z) { return max(x, y, z, this); } | ||||
| 	public default Vec3f max(float x, float y, float z, Vec3f result) { return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z)); } | ||||
| 	public default Vec3f difference(Vec3f other) { return difference(other, this); } | ||||
| 	public default Vec3f difference(Vec3f other, Vec3f result) { return difference(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3f difference(float x, float y, float z) { return difference(x, y, z, this); } | ||||
| 	public default Vec3f difference(float x, float y, float z, Vec3f result) { return result.set(getX() - x, getY() - y, getZ() - z); } | ||||
| 	@Override | ||||
| 	public default Vec3f clamp(float min, float max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec3f clamp(float min, float max, Vec3f result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec3f clamp(float min, float max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec3f clamp(float min, float max, Vec3f result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3f clamp(float min, float max){return clamp(min, max, ALL);} | ||||
| 	public default Vec3f clamp(float min, float max, Vec3f result){return clamp(min, max, result, ALL);} | ||||
| 	@Override | ||||
| 	public default Vec3f clamp(float min, float max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec3f clamp(float min, float max, Vec3f result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()));} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3f store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3f store(ByteBuffer buffer) { | ||||
| 		buffer.putFloat(getX()).putFloat(getY()).putFloat(getZ()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3f load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getFloat(), buffer.getFloat(), buffer.getFloat()); | ||||
| 	} | ||||
| 	public default Vec3f load(ByteBuffer buffer) { return set(buffer.getFloat(), buffer.getFloat(), buffer.getFloat()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3f store(FloatBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3f store(FloatBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3f load(FloatBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3f load(FloatBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec3b asByte(){return isMutable() ? Vec3b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ())) : Vec3b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ()));} | ||||
| 	public default Vec3b asByte() { return isMutable() ? Vec3b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ())) : Vec3b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ())); } | ||||
| 	@Override | ||||
| 	public default Vec3s asShort(){return isMutable() ? Vec3s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ())) : Vec3s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ()));} | ||||
| 	public default Vec3s asShort() { return isMutable() ? Vec3s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ())) : Vec3s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ())); } | ||||
| 	@Override | ||||
| 	public default Vec3i asInt(){return isMutable() ? Vec3i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())) : Vec3i.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()));} | ||||
| 	public default Vec3i asInt() { return isMutable() ? Vec3i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())) : Vec3i.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())); } | ||||
| 	@Override | ||||
| 	public default Vec3l asLong() {return isMutable() ? Vec3l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())) : Vec3l.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()));} | ||||
| 	public default Vec3l asLong() { return isMutable() ? Vec3l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())) : Vec3l.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ())); } | ||||
| 	@Override | ||||
| 	public default Vec3d asDouble(){return isMutable() ? Vec3d.mutable(getX(), getY(), getZ()) : Vec3d.of(getX(), getY(), getZ());} | ||||
| 	 | ||||
| 	 | ||||
| 	public default Vec3d asDouble() { return isMutable() ? Vec3d.mutable(getX(), getY(), getZ()) : Vec3d.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3f asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec3f asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec3f asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec3f asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec3f copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec3f copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec3f copyAsImmutable(){return of(this);} | ||||
| 	public default Vec3f copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,98 +2,54 @@ package speiger.src.coreengine.math.vector.floats; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3fImmutable implements Vec3f | ||||
| { | ||||
| public class Vec3fImmutable implements Vec3f { | ||||
| 	final float x; | ||||
| 	final float y; | ||||
| 	final float z; | ||||
| 	 | ||||
| 	public Vec3fImmutable() | ||||
| 	{ | ||||
| 	public Vec3fImmutable() { | ||||
| 		x = 0F; | ||||
| 		y = 0F; | ||||
| 		z = 0F; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3fImmutable(float value) | ||||
| 	{ | ||||
| 	public Vec3fImmutable(float value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3fImmutable(float x, float y, float z) | ||||
| 	{ | ||||
| 	public Vec3fImmutable(float x, float y, float z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public float getX() { return x; } | ||||
| 	@Override | ||||
| 	public float getY() { return y; } | ||||
| 	@Override | ||||
| 	public float getZ() { return z; } | ||||
| 	@Override | ||||
| 	public Vec3f setX(float x) { return this.x == x ? this : Vec3f.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3f setY(float y) { return this.y == y ? this : Vec3f.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3f setZ(float z) { return this.z == z ? this : Vec3f.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3f copy() { return Vec3f.of(this); } | ||||
| 	@Override | ||||
| 	public Vec3f set(float x, float y, float z) { return this.x == x && this.y == y && this.z == z ? this : Vec3f.of(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3f setX(float x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec3f.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3f setY(float y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec3f.of(x, y, z);	 | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3f setZ(float z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec3f.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3f copy() | ||||
| 	{ | ||||
| 		return Vec3f.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3f set(float x, float y, float z) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z ? this : Vec3f.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3f) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3f) { | ||||
| 			Vec3f vec = (Vec3f)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -101,8 +57,5 @@ public class Vec3fImmutable implements Vec3f | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3f[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3f[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,84 +2,57 @@ package speiger.src.coreengine.math.vector.floats; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3fMutable implements Vec3f | ||||
| { | ||||
| public class Vec3fMutable implements Vec3f { | ||||
| 	float x; | ||||
| 	float y; | ||||
| 	float z; | ||||
| 	 | ||||
| 	public Vec3fMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec3fMutable() {} | ||||
| 	 | ||||
| 	public Vec3fMutable(float value) | ||||
| 	{ | ||||
| 	public Vec3fMutable(float value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3fMutable(float x, float y, float z) | ||||
| 	{ | ||||
| 	public Vec3fMutable(float x, float y, float z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public float getX() { return x; } | ||||
| 	@Override | ||||
| 	public float getY() { return y; } | ||||
| 	@Override | ||||
| 	public float getZ() { return z; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3f setX(float x) | ||||
| 	{ | ||||
| 	public Vec3f setX(float x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3f setY(float y) | ||||
| 	{ | ||||
| 	public Vec3f setY(float y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3f setZ(float z) | ||||
| 	{ | ||||
| 	public Vec3f setZ(float z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3f copy() | ||||
| 	{ | ||||
| 		return Vec3f.mutable(this); | ||||
| 	} | ||||
| 	public Vec3f copy() { return Vec3f.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3f set(float x, float y, float z) | ||||
| 	{ | ||||
| 	public Vec3f set(float x, float y, float z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -87,16 +60,11 @@ public class Vec3fMutable implements Vec3f | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3f) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3f) { | ||||
| 			Vec3f vec = (Vec3f)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -104,8 +72,5 @@ public class Vec3fMutable implements Vec3f | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3f[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3f[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -10,21 +10,19 @@ import speiger.src.coreengine.math.vector.ints.Vec4i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec4l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec4s; | ||||
| 
 | ||||
| public interface Vec4f extends Vecf | ||||
| { | ||||
| public interface Vec4f extends Vecf { | ||||
| 	public static final Vec4f ZERO = of(); | ||||
| 	public static final Vec4f MINUS_ONE = of(-1F); | ||||
| 	public static final Vec4f ONE = of(1F); | ||||
| 	 | ||||
| 	public static Vec4f mutable(){return new Vec4fMutable();} | ||||
| 	public static Vec4f mutable(float value){return new Vec4fMutable(value);} | ||||
| 	public static Vec4f mutable(float x, float y, float z, float w){return new Vec4fMutable(x, y, z, w);} | ||||
| 	public static Vec4f mutable(Vec4f vec){return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	 | ||||
| 	public static Vec4f of(){return new Vec4fImmutable();} | ||||
| 	public static Vec4f of(float value){return new Vec4fImmutable(value);} | ||||
| 	public static Vec4f of(float x, float y, float z, float w){return new Vec4fImmutable(x, y, z, w);} | ||||
| 	public static Vec4f of(Vec4f vec){return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	public static Vec4f mutable() { return new Vec4fMutable(); } | ||||
| 	public static Vec4f mutable(float value) { return new Vec4fMutable(value); } | ||||
| 	public static Vec4f mutable(float x, float y, float z, float w) { return new Vec4fMutable(x, y, z, w); } | ||||
| 	public static Vec4f mutable(Vec4f vec) { return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	public static Vec4f of() { return new Vec4fImmutable(); } | ||||
| 	public static Vec4f of(float value) { return new Vec4fImmutable(value); } | ||||
| 	public static Vec4f of(float x, float y, float z, float w) { return new Vec4fImmutable(x, y, z, w); } | ||||
| 	public static Vec4f of(Vec4f vec) { return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	 | ||||
| 	public float getX(); | ||||
| 	public float getY(); | ||||
| @ -34,85 +32,72 @@ public interface Vec4f extends Vecf | ||||
| 	public Vec4f setY(float y); | ||||
| 	public Vec4f setZ(float z); | ||||
| 	public Vec4f setW(float w); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default float[] asArray(){return new float[]{getX(), getY(), getZ(), getW()};} | ||||
| 	public default float[] asArray() { return new float[] {getX(), getY(), getZ(), getW()}; } | ||||
| 	@Override | ||||
| 	public Vec4f copy(); | ||||
| 	@Override | ||||
| 	public default Vec4f abs(){return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()), Math.abs(getW()));} | ||||
| 	public default Vec4f abs() { return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()), Math.abs(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4f negate(){return set(0F, 0F, 0F, 0F);} | ||||
| 	public default Vec4f negate() { return set(0F, 0F, 0F, 0F); } | ||||
| 	@Override | ||||
| 	public default Vec4f invert(){return set(-getX(), -getY(), -getZ(), -getW());} | ||||
| 	public default Vec4f normalize() | ||||
| 	{ | ||||
| 	public default Vec4f invert() { return set(-getX(), -getY(), -getZ(), -getW()); } | ||||
| 	public default Vec4f normalize() { | ||||
| 		float l = length(); | ||||
| 		return l == 0F ? this : multiply(1.0F / l); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec4f normalize3D() | ||||
| 	{ | ||||
| 	public default Vec4f normalize3D() { | ||||
| 		float value = (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()); | ||||
| 		return value == 0F ? this : multiply(1F / value); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4f add(float value){return add(value, value, value, value);}	 | ||||
| 	public default Vec4f add(Vec4f value){return add(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4f add(float x, float y, float z, float w){return set(getX() + x, getY() + y, getZ() + z, getW() + w);} | ||||
| 
 | ||||
| 	public default Vec4f add(float value) { return add(value, value, value, value); } | ||||
| 	public default Vec4f add(Vec4f value) { return add(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4f add(float x, float y, float z, float w) { return set(getX() + x, getY() + y, getZ() + z, getW() + w); } | ||||
| 	@Override | ||||
| 	public default Vec4f sub(float value){return sub(value, value, value, value);} | ||||
| 	public default Vec4f sub(Vec4f value){return sub(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4f sub(float x, float y, float z, float w){return set(getX() - x, getY() - y, getZ() - z, getW() - w);} | ||||
| 	 | ||||
| 	public default Vec4f sub(float value) { return sub(value, value, value, value); } | ||||
| 	public default Vec4f sub(Vec4f value) { return sub(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4f sub(float x, float y, float z, float w) { return set(getX() - x, getY() - y, getZ() - z, getW() - w); } | ||||
| 	@Override | ||||
| 	public default Vec4f multiply(float value){return multiply(value, value, value, value);} | ||||
| 	public default Vec4f multiply(Vec4f value){return multiply(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4f multiply(float x, float y, float z, float w){return set(getX() * x, getY() * y, getZ() * z, getW() * w);} | ||||
| 	 | ||||
| 	public default Vec4f multiply(float value) { return multiply(value, value, value, value); } | ||||
| 	public default Vec4f multiply(Vec4f value) { return multiply(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4f multiply(float x, float y, float z, float w) { return set(getX() * x, getY() * y, getZ() * z, getW() * w); } | ||||
| 	@Override | ||||
| 	public default Vec4f devide(float value){return devide(value, value, value, value);} | ||||
| 	public default Vec4f devide(Vec4f value){return devide(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4f devide(float x, float y, float z, float w){return set(getX() / x, getY() / y, getZ() / z, getW() / w);} | ||||
| 	 | ||||
| 	public default Vec4f devide(float value) { return devide(value, value, value, value); } | ||||
| 	public default Vec4f devide(Vec4f value) { return devide(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4f devide(float x, float y, float z, float w) { return set(getX() / x, getY() / y, getZ() / z, getW() / w); } | ||||
| 	@Override | ||||
| 	public default Vec4f set(float value){return set(value, value, value, value);} | ||||
| 	public default Vec4f set(Vec4f value){return set(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4f set(float value) { return set(value, value, value, value); } | ||||
| 	public default Vec4f set(Vec4f value) { return set(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public Vec4f set(float x, float y, float z, float w); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec4f value){return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double distanceTo(float x, float y, float z, float w){return Math.sqrt(distanceTo(x, y, z, w));} | ||||
| 	 | ||||
| 	public default double distanceToSquared(Vec4f value){return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double distanceToSquared(float x, float y, float z, float w) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec4f value) { return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double distanceTo(float x, float y, float z, float w) { return Math.sqrt(distanceTo(x, y, z, w)); } | ||||
| 	public default double distanceToSquared(Vec4f value) { return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double distanceToSquared(float x, float y, float z, float w) { | ||||
| 		double xPos = getX() - x; | ||||
| 		double yPos = getY() - y; | ||||
| 		double zPos = getZ() - z; | ||||
| 		double wPos = getW() - w; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos) + (wPos * wPos); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default float lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW());} | ||||
| 
 | ||||
| 	public default double dotProduct(Vec4f value){return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double dotProduct(float x, float y, float z, float w){return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w);}; | ||||
| 	 | ||||
| 	public default Vec4f lerp(Vec4f value, float progress, Vec4f result){return lerp(value.getX(), value.getY(), value.getZ(), value.getW(), progress, result);} | ||||
| 	public default Vec4f lerp(float x, float y, float z, float w, float progress, Vec4f result){return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress), MathUtils.lerp(getZ(), z, progress), MathUtils.lerp(getW(), w, progress));} | ||||
| 	 | ||||
| 	public default float angle(Vec4f value){return angle(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default float angle(float x, float y, float z, float w){return (float)Math.acos(MathUtils.clamp(-1F, 1F, angleCos(x, y, z, w)));} | ||||
| 	 | ||||
| 	public default float angleCos(Vec4f value){return angleCos(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default float angleCos(float x, float y, float z, float w){return (float)(dotProduct(x, y, z, w) / Math.sqrt(lengthSquared() * (x * x) + (y * y) + (z * z) + (w * w)));} | ||||
| 	 | ||||
| 	public default Vec4f rotate(float angle, Vec4f axis){return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), axis.getW());} | ||||
| 	public default Vec4f rotate(float angle, Vec4f axis, Vec4f result){return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), axis.getW(), result);} | ||||
| 	public default Vec4f rotate(float angle, float x, float y, float z, float w){return rotate(angle, x, y, z, w, this);} | ||||
| 	public default Vec4f rotate(float angle, float x, float y, float z, float w, Vec4f result) | ||||
| 	{ | ||||
| 	public default float lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW()); } | ||||
| 	public default double dotProduct(Vec4f value) { return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double dotProduct(float x, float y, float z, float w) { return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w); }; | ||||
| 	public default Vec4f lerp(Vec4f value, float progress, Vec4f result) { return lerp(value.getX(), value.getY(), value.getZ(), value.getW(), progress, result); } | ||||
| 	public default Vec4f lerp(float x, float y, float z, float w, float progress, Vec4f result) { return result.set(MathUtils.lerp(getX(), x, progress), MathUtils.lerp(getY(), y, progress), MathUtils.lerp(getZ(), z, progress), MathUtils.lerp(getW(), w, progress)); } | ||||
| 	public default float angle(Vec4f value) { return angle(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default float angle(float x, float y, float z, float w) { return (float)Math.acos(MathUtils.clamp(-1F, 1F, angleCos(x, y, z, w))); } | ||||
| 	public default float angleCos(Vec4f value) { return angleCos(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default float angleCos(float x, float y, float z, float w) { return (float)(dotProduct(x, y, z, w) / Math.sqrt(lengthSquared() * (x * x) + (y * y) + (z * z) + (w * w))); } | ||||
| 	public default Vec4f rotate(float angle, Vec4f axis) { return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), axis.getW()); } | ||||
| 	public default Vec4f rotate(float angle, Vec4f axis, Vec4f result) { return rotate(angle, axis.getX(), axis.getY(), axis.getZ(), axis.getW(), result); } | ||||
| 	public default Vec4f rotate(float angle, float x, float y, float z, float w) { return rotate(angle, x, y, z, w, this); } | ||||
| 	public default Vec4f rotate(float angle, float x, float y, float z, float w, Vec4f result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double dot = dotProduct(x, y, z, w); | ||||
| @ -121,27 +106,27 @@ public interface Vec4f extends Vecf | ||||
| 		double zPos = z * dot * (1D - cos) + (getZ() * cos) + (-y * getX() + x * getY()) * sin; | ||||
| 		return result.set((float)xPos, (float)yPos, (float)zPos, getW()); | ||||
| 	} | ||||
| 	public default Vec4f rotateX(float angle){return rotateX(angle, this);} | ||||
| 	public default Vec4f rotateX(float angle, Vec4f result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec4f rotateX(float angle) { return rotateX(angle, this); } | ||||
| 	public default Vec4f rotateX(float angle, Vec4f result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double y = getY() * cos + getZ() * sin; | ||||
| 		double z = getZ() * cos - getY() * sin; | ||||
| 		return result.set(getX(), (float)y, (float)z, getW()); | ||||
| 	} | ||||
| 	public default Vec4f rotateY(float angle){return rotateY(angle, this);} | ||||
| 	public default Vec4f rotateY(float angle, Vec4f result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec4f rotateY(float angle) { return rotateY(angle, this); } | ||||
| 	public default Vec4f rotateY(float angle, Vec4f result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double x = getX() * cos + getZ() * sin; | ||||
| 		double z = getZ() * cos - getX() * sin; | ||||
| 		return result.set((float)x, getY(), (float)z, getW()); | ||||
| 	} | ||||
| 	public default Vec4f rotateZ(float angle){return rotateZ(angle, this);} | ||||
| 	public default Vec4f rotateZ(float angle, Vec4f result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec4f rotateZ(float angle) { return rotateZ(angle, this); } | ||||
| 	public default Vec4f rotateZ(float angle, Vec4f result) { | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| 		double sin = MathUtils.sin(angle); | ||||
| 		double x = cos * getX() - sin * getY(); | ||||
| @ -149,9 +134,8 @@ public interface Vec4f extends Vecf | ||||
| 		return result.set((float)x, (float)y, getZ(), getW()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec4f smoothStep(Vec4f value, float progress, Vec4f result){return smoothStep(value.getX(), value.getY(), value.getZ(), value.getW(), progress, result);} | ||||
| 	public default Vec4f smoothStep(float x, float y, float z, float w, float progress, Vec4f result) | ||||
| 	{ | ||||
| 	public default Vec4f smoothStep(Vec4f value, float progress, Vec4f result) { return smoothStep(value.getX(), value.getY(), value.getZ(), value.getW(), progress, result); } | ||||
| 	public default Vec4f smoothStep(float x, float y, float z, float w, float progress, Vec4f result) { | ||||
| 		float t2 = progress * progress; | ||||
| 		float t3 = t2 * progress; | ||||
| 		float xPos = ((getX() + getX() - x - x) * t3 + (3.0F * x - 3.0F * getX()) * t2 + getX() * progress + getX()); | ||||
| @ -161,72 +145,59 @@ public interface Vec4f extends Vecf | ||||
| 		return result.set(xPos, yPos, zPos, wPos); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec4f min(Vec4f other) {return min(other, this);} | ||||
| 	public default Vec4f min(Vec4f other, Vec4f result){return min(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4f min(float x, float y, float z, float w) {return min(x, y, z, w, this);} | ||||
| 	public default Vec4f min(float x, float y, float z, float w, Vec4f result){return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z), Math.min(getW(), w));} | ||||
| 	 | ||||
| 	public default Vec4f max(Vec4f other) {return max(other, this);} | ||||
| 	public default Vec4f max(Vec4f other, Vec4f result){return max(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4f max(float x, float y, float z, float w) {return max(x, y, z, w, this);} | ||||
| 	public default Vec4f max(float x, float y, float z, float w, Vec4f result){return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z), Math.max(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec4f difference(Vec4f other) {return difference(other, this);} | ||||
| 	public default Vec4f difference(Vec4f other, Vec4f result){return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4f difference(float x, float y, float z, float w) {return difference(x, y, z, w, this);} | ||||
| 	public default Vec4f difference(float x, float y, float z, float w, Vec4f result){return result.set(getX() - x, getY() - y, getZ() - z, getW() - w);} | ||||
| 	public default Vec4f min(Vec4f other) { return min(other, this); } | ||||
| 	public default Vec4f min(Vec4f other, Vec4f result) { return min(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4f min(float x, float y, float z, float w) { return min(x, y, z, w, this); } | ||||
| 	public default Vec4f min(float x, float y, float z, float w, Vec4f result) { return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z), Math.min(getW(), w)); } | ||||
| 	public default Vec4f max(Vec4f other) { return max(other, this); } | ||||
| 	public default Vec4f max(Vec4f other, Vec4f result) { return max(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4f max(float x, float y, float z, float w) { return max(x, y, z, w, this); } | ||||
| 	public default Vec4f max(float x, float y, float z, float w, Vec4f result) { return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z), Math.max(getZ(), z)); } | ||||
| 	public default Vec4f difference(Vec4f other) { return difference(other, this); } | ||||
| 	public default Vec4f difference(Vec4f other, Vec4f result) { return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4f difference(float x, float y, float z, float w) { return difference(x, y, z, w, this); } | ||||
| 	public default Vec4f difference(float x, float y, float z, float w, Vec4f result) { return result.set(getX() - x, getY() - y, getZ() - z, getW() - w); } | ||||
| 	@Override | ||||
| 	public default Vec4f clamp(float min, float max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec4f clamp(float min, float max, Vec4f result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec4f clamp(float min, float max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec4f clamp(float min, float max, Vec4f result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4f clamp(float min, float max){return clamp(min, max, ALL);} | ||||
| 	public default Vec4f clamp(float min, float max, Vec4f result){return clamp(min, max, result, ALL);} | ||||
| 	@Override | ||||
| 	public default Vec4f clamp(float min, float max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec4f clamp(float min, float max, Vec4f result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW()));} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4f store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec4f store(ByteBuffer buffer) { | ||||
| 		buffer.putFloat(getX()).putFloat(getY()).putFloat(getZ()).putFloat(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4f load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getFloat(), buffer.getFloat(), buffer.getFloat(), buffer.getFloat()); | ||||
| 	} | ||||
| 	public default Vec4f load(ByteBuffer buffer) { return set(buffer.getFloat(), buffer.getFloat(), buffer.getFloat(), buffer.getFloat()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4f store(FloatBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec4f store(FloatBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()).put(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4f load(FloatBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	public default Vec4f load(FloatBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4b asByte(){return isMutable() ? Vec4b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ()), (byte)MathUtils.floor(getW())) : Vec4b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ()), (byte)MathUtils.floor(getW()));} | ||||
| 	public default Vec4b asByte() { return isMutable() ? Vec4b.mutable((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ()), (byte)MathUtils.floor(getW())) : Vec4b.of((byte)MathUtils.floor(getX()), (byte)MathUtils.floor(getY()), (byte)MathUtils.floor(getZ()), (byte)MathUtils.floor(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4s asShort(){return isMutable() ? Vec4s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ()), (short)MathUtils.floor(getW())) : Vec4s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ()), (short)MathUtils.floor(getW()));} | ||||
| 	public default Vec4s asShort() { return isMutable() ? Vec4s.mutable((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ()), (short)MathUtils.floor(getW())) : Vec4s.of((short)MathUtils.floor(getX()), (short)MathUtils.floor(getY()), (short)MathUtils.floor(getZ()), (short)MathUtils.floor(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4i asInt(){return isMutable() ? Vec4i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())) : Vec4i.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW()));} | ||||
| 	public default Vec4i asInt() { return isMutable() ? Vec4i.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())) : Vec4i.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4l asLong() {return isMutable() ? Vec4l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())) : Vec4l.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW()));} | ||||
| 	public default Vec4l asLong() { return isMutable() ? Vec4l.mutable(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())) : Vec4l.of(MathUtils.floor(getX()), MathUtils.floor(getY()), MathUtils.floor(getZ()), MathUtils.floor(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4d asDouble(){return isMutable() ? Vec4d.mutable(getX(), getY(), getZ(), getW()) : Vec4d.of(getX(), getY(), getZ(), getW());} | ||||
| 
 | ||||
| 	 | ||||
| 	public default Vec4d asDouble() { return isMutable() ? Vec4d.mutable(getX(), getY(), getZ(), getW()) : Vec4d.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4f asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec4f asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec4f asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec4f asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec4f copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec4f copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec4f copyAsImmutable(){return of(this);} | ||||
| 	public default Vec4f copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,31 +2,27 @@ package speiger.src.coreengine.math.vector.floats; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4fImmutable implements Vec4f | ||||
| { | ||||
| public class Vec4fImmutable implements Vec4f { | ||||
| 	final float x; | ||||
| 	final float y; | ||||
| 	final float z; | ||||
| 	final float w; | ||||
| 	 | ||||
| 	public Vec4fImmutable() | ||||
| 	{ | ||||
| 	public Vec4fImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 		w = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4fImmutable(float value) | ||||
| 	{ | ||||
| 	public Vec4fImmutable(float value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4fImmutable(float x, float y, float z, float w) | ||||
| 	{ | ||||
| 	public Vec4fImmutable(float x, float y, float z, float w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -34,82 +30,33 @@ public class Vec4fImmutable implements Vec4f | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public float getX() { return x; } | ||||
| 	@Override | ||||
| 	public float getY() { return y; } | ||||
| 	@Override | ||||
| 	public float getZ() { return z; } | ||||
| 	@Override | ||||
| 	public float getW() { return w; } | ||||
| 	@Override | ||||
| 	public Vec4f setX(float x) { return this.x == x ? this : Vec4f.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4f setY(float y) { return this.y == y ? this : Vec4f.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4f setZ(float z) { return this.z == z ? this : Vec4f.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4f setW(float w) { return this.w == w ? this : Vec4f.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4f copy() { return Vec4f.of(this); } | ||||
| 	@Override | ||||
| 	public Vec4f set(float x, float y, float z, float w) { return this.x == x && this.y == y && this.z == z && this.w == w ? this : Vec4f.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f setX(float x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec4f.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f setY(float y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec4f.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f setZ(float z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec4f.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f setW(float w) | ||||
| 	{ | ||||
| 		return this.w == w ? this : Vec4f.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f copy() | ||||
| 	{ | ||||
| 		return Vec4f.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f set(float x, float y, float z, float w) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z && this.w == w ? this : Vec4f.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4f) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4f) { | ||||
| 			Vec4f vec = (Vec4f)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -117,8 +64,5 @@ public class Vec4fImmutable implements Vec4f | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4f[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4f[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,31 +2,27 @@ package speiger.src.coreengine.math.vector.floats; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4fMutable implements Vec4f | ||||
| { | ||||
| public class Vec4fMutable implements Vec4f { | ||||
| 	float x; | ||||
| 	float y; | ||||
| 	float z; | ||||
| 	float w; | ||||
| 	 | ||||
| 	public Vec4fMutable() | ||||
| 	{ | ||||
| 	public Vec4fMutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 		w = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4fMutable(float value) | ||||
| 	{ | ||||
| 	public Vec4fMutable(float value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4fMutable(float x, float y, float z, float w) | ||||
| 	{ | ||||
| 	public Vec4fMutable(float x, float y, float z, float w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -34,72 +30,45 @@ public class Vec4fMutable implements Vec4f | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public float getX() { return x; } | ||||
| 	@Override | ||||
| 	public float getY() { return y; } | ||||
| 	@Override | ||||
| 	public float getZ() { return z; } | ||||
| 	@Override | ||||
| 	public float getW() { return w; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f setX(float x) | ||||
| 	{ | ||||
| 	public Vec4f setX(float x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f setY(float y) | ||||
| 	{ | ||||
| 	public Vec4f setY(float y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f setZ(float z) | ||||
| 	{ | ||||
| 	public Vec4f setZ(float z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f setW(float w) | ||||
| 	{ | ||||
| 	public Vec4f setW(float w) { | ||||
| 		this.w = w; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f copy() | ||||
| 	{ | ||||
| 		return Vec4f.mutable(this); | ||||
| 	} | ||||
| 	public Vec4f copy() { return Vec4f.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4f set(float x, float y, float z, float w) | ||||
| 	{ | ||||
| 	public Vec4f set(float x, float y, float z, float w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -108,16 +77,11 @@ public class Vec4fMutable implements Vec4f | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4f) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4f) { | ||||
| 			Vec4f vec = (Vec4f)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -125,8 +89,5 @@ public class Vec4fMutable implements Vec4f | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4f[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4f[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -9,8 +9,7 @@ import speiger.src.coreengine.math.vector.ints.Veci; | ||||
| import speiger.src.coreengine.math.vector.longs.Vecl; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vecs; | ||||
| 
 | ||||
| public interface Vecf extends Vec | ||||
| { | ||||
| public interface Vecf extends Vec { | ||||
| 	public Vecf set(float value); | ||||
| 	public Vecf add(float value); | ||||
| 	public Vecf sub(float value); | ||||
| @ -18,14 +17,11 @@ public interface Vecf extends Vec | ||||
| 	public Vecf devide(float value); | ||||
| 	public Vecf clamp(float min, float max); | ||||
| 	public Vecf clamp(float min, float max, int filter); | ||||
| 	 | ||||
| 	public float lengthSquared(); | ||||
| 	public default float length(){return (float)Math.sqrt(lengthSquared());} | ||||
| 	 | ||||
| 	public default float length() { return (float)Math.sqrt(lengthSquared()); } | ||||
| 	public Vecf store(FloatBuffer buffer); | ||||
| 	public Vecf load(FloatBuffer buffer); | ||||
| 	public float[] asArray(); | ||||
| 	 | ||||
| 	public Vecb asByte(); | ||||
| 	public Vecs asShort(); | ||||
| 	public Veci asInt(); | ||||
|  | ||||
| @ -10,81 +10,70 @@ import speiger.src.coreengine.math.vector.floats.Vec2f; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec2l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec2s; | ||||
| 
 | ||||
| public interface Vec2i extends Veci | ||||
| { | ||||
| public interface Vec2i extends Veci { | ||||
| 	public static final Vec2i ZERO = of(); | ||||
| 	public static final Vec2i MINUS_ONE = of(-1); | ||||
| 	public static final Vec2i ONE = of(1); | ||||
| 	 | ||||
| 	public static Vec2i mutable(){return new Vec2iMutable();} | ||||
| 	public static Vec2i mutable(int value){return new Vec2iMutable(value);} | ||||
| 	public static Vec2i mutable(int x, int y){return new Vec2iMutable(x, y);} | ||||
| 	public static Vec2i mutable(Vec2i value){return mutable(value.getX(), value.getY());} | ||||
| 	 | ||||
| 	public static Vec2i of(){return new Vec2iImmutable();} | ||||
| 	public static Vec2i of(int value){return new Vec2iImmutable(value);} | ||||
| 	public static Vec2i of(int x, int y){return new Vec2iImmutable(x, y);} | ||||
| 	public static Vec2i of(Vec2i value){return of(value.getX(), value.getY());} | ||||
| 	public static Vec2i mutable() { return new Vec2iMutable(); } | ||||
| 	public static Vec2i mutable(int value) { return new Vec2iMutable(value); } | ||||
| 	public static Vec2i mutable(int x, int y) { return new Vec2iMutable(x, y); } | ||||
| 	public static Vec2i mutable(Vec2i value) { return mutable(value.getX(), value.getY()); } | ||||
| 	public static Vec2i of() { return new Vec2iImmutable(); } | ||||
| 	public static Vec2i of(int value) { return new Vec2iImmutable(value); } | ||||
| 	public static Vec2i of(int x, int y) { return new Vec2iImmutable(x, y); } | ||||
| 	public static Vec2i of(Vec2i value) { return of(value.getX(), value.getY()); } | ||||
| 	 | ||||
| 	public int getX(); | ||||
| 	public int getY(); | ||||
| 	public Vec2i setX(int x); | ||||
| 	public Vec2i setY(int y); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default int[] asArray(){return new int[]{getX(), getY()};} | ||||
| 	public default int[] asArray() { return new int[] {getX(), getY()}; } | ||||
| 	@Override | ||||
| 	public Vec2i copy(); | ||||
| 	@Override | ||||
| 	public default Vec2i abs(){return set(Math.abs(getX()), Math.abs(getY()));} | ||||
| 	public default Vec2i abs() { return set(Math.abs(getX()), Math.abs(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2i negate(){return set(0, 0);} | ||||
| 	public default Vec2i negate() { return set(0, 0); } | ||||
| 	@Override | ||||
| 	public default Vec2i invert(){return set(-getX(), -getY());}; | ||||
| 	 | ||||
| 	public default Vec2i invert() { return set(-getX(), -getY()); }; | ||||
| 	@Override | ||||
| 	public default Vec2i add(int value) {return add(value, value);} | ||||
| 	public default Vec2i add(Vec2i value) {return add(value.getX(), value.getY());} | ||||
| 	public default Vec2i add(int x, int y) {return set(x + getX(), y + getY());} | ||||
| 	 | ||||
| 	public default Vec2i add(int value) { return add(value, value); } | ||||
| 	public default Vec2i add(Vec2i value) { return add(value.getX(), value.getY()); } | ||||
| 	public default Vec2i add(int x, int y) { return set(x + getX(), y + getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2i sub(int value){return sub(value, value);} | ||||
| 	public default Vec2i sub(Vec2i value){return sub(value.getX(), value.getY());} | ||||
| 	public default Vec2i sub(int x, int y) {return set(getX() - x, getY() - y);} | ||||
| 	 | ||||
| 	public default Vec2i sub(int value) { return sub(value, value); } | ||||
| 	public default Vec2i sub(Vec2i value) { return sub(value.getX(), value.getY()); } | ||||
| 	public default Vec2i sub(int x, int y) { return set(getX() - x, getY() - y); } | ||||
| 	@Override | ||||
| 	public default Vec2i multiply(int value){return multiply(value, value);} | ||||
| 	public default Vec2i multiply(Vec2i value){return multiply(value.getX(), value.getY());} | ||||
| 	public default Vec2i multiply(int x, int y) {return set(x * getX(), y * getY());} | ||||
| 	 | ||||
| 	public default Vec2i multiply(int value) { return multiply(value, value); } | ||||
| 	public default Vec2i multiply(Vec2i value) { return multiply(value.getX(), value.getY()); } | ||||
| 	public default Vec2i multiply(int x, int y) { return set(x * getX(), y * getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2i devide(int value){return devide(value, value);} | ||||
| 	public default Vec2i devide(Vec2i value){return devide(value.getX(), value.getY());} | ||||
| 	public default Vec2i devide(int x, int y){return set(getX() / x, getY() / y);} | ||||
| 	 | ||||
| 	public default Vec2i devide(int value) { return devide(value, value); } | ||||
| 	public default Vec2i devide(Vec2i value) { return devide(value.getX(), value.getY()); } | ||||
| 	public default Vec2i devide(int x, int y) { return set(getX() / x, getY() / y); } | ||||
| 	@Override | ||||
| 	public default Vec2i set(int value){return set(value, value);}; | ||||
| 	public default Vec2i set(Vec2i value){return set(value.getX(), value.getY());} | ||||
| 	public default Vec2i set(int value) { return set(value, value); }; | ||||
| 	public default Vec2i set(Vec2i value) { return set(value.getX(), value.getY()); } | ||||
| 	public Vec2i set(int x, int y); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec2i value){return distanceTo(value.getX(), value.getY());} | ||||
| 	public default double distanceTo(int x, int y){return Math.sqrt(distanceToSquared(x, y));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec2i value){return distanceToSquared(value.getX(), value.getY());} | ||||
| 	public default long distanceToSquared(int x, int y) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec2i value) { return distanceTo(value.getX(), value.getY()); } | ||||
| 	public default double distanceTo(int x, int y) { return Math.sqrt(distanceToSquared(x, y)); } | ||||
| 	public default long distanceToSquared(Vec2i value) { return distanceToSquared(value.getX(), value.getY()); } | ||||
| 	public default long distanceToSquared(int x, int y) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		return (xPos * xPos) + (yPos * yPos); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY());} | ||||
| 	 | ||||
| 	public default long dotProduct(Vec2i value){return dotProduct(value.getX(), value.getY());} | ||||
| 	public default long dotProduct(int x, int y){return (getX() * x) + (getY() * y);} | ||||
| 	 | ||||
| 	public default Vec2i rotate(int angle, Vec2i center){return rotate(angle, center.getX(), center.getY());} | ||||
| 	public default Vec2i rotate(int angle, int x, int y) | ||||
| 	{ | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()); } | ||||
| 	public default long dotProduct(Vec2i value) { return dotProduct(value.getX(), value.getY()); } | ||||
| 	public default long dotProduct(int x, int y) { return (getX() * x) + (getY() * y); } | ||||
| 	public default Vec2i rotate(int angle, Vec2i center) { return rotate(angle, center.getX(), center.getY()); } | ||||
| 	public default Vec2i rotate(int angle, int x, int y) { | ||||
| 		int xPos = getX() - x; | ||||
| 		int yPos = getY() - y; | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| @ -92,72 +81,58 @@ public interface Vec2i extends Veci | ||||
| 		return set((int)((xPos * cos) + (yPos * sin) + x), (int)(-(xPos * sin) + (yPos * cos) + y)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2i min(Vec2i other) {return min(other, this);} | ||||
| 	public default Vec2i min(Vec2i other, Vec2i result){return min(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2i min(int x, int y) {return min(x, y, this);} | ||||
| 	public default Vec2i min(int x, int y, Vec2i result){return result.set(Math.min(getX(), x), Math.min(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2i max(Vec2i other) {return max(other, this);} | ||||
| 	public default Vec2i max(Vec2i other, Vec2i result){return max(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2i max(int x, int y) {return max(x, y, this);} | ||||
| 	public default Vec2i max(int x, int y, Vec2i result){return result.set(Math.max(getX(), x), Math.max(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2i difference(Vec2i other) {return difference(other, this);} | ||||
| 	public default Vec2i difference(Vec2i other, Vec2i result){return difference(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2i difference(int x, int y) {return difference(x, y, this);} | ||||
| 	public default Vec2i difference(int x, int y, Vec2i result){return result.set(getX() - x, getY() - y);} | ||||
| 	public default Vec2i min(Vec2i other) { return min(other, this); } | ||||
| 	public default Vec2i min(Vec2i other, Vec2i result) { return min(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2i min(int x, int y) { return min(x, y, this); } | ||||
| 	public default Vec2i min(int x, int y, Vec2i result) { return result.set(Math.min(getX(), x), Math.min(getY(), y)); } | ||||
| 	public default Vec2i max(Vec2i other) { return max(other, this); } | ||||
| 	public default Vec2i max(Vec2i other, Vec2i result) { return max(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2i max(int x, int y) { return max(x, y, this); } | ||||
| 	public default Vec2i max(int x, int y, Vec2i result) { return result.set(Math.max(getX(), x), Math.max(getY(), y)); } | ||||
| 	public default Vec2i difference(Vec2i other) { return difference(other, this); } | ||||
| 	public default Vec2i difference(Vec2i other, Vec2i result) { return difference(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2i difference(int x, int y) { return difference(x, y, this); } | ||||
| 	public default Vec2i difference(int x, int y, Vec2i result) { return result.set(getX() - x, getY() - y); } | ||||
| 	@Override | ||||
| 	public default Vec2i clamp(int min, int max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec2i clamp(int min, int max, Vec2i result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec2i clamp(int min, int max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec2i clamp(int min, int max, Vec2i result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2i clamp(int min, int max){return clamp(min, max, ALL);} | ||||
| 	public default Vec2i clamp(int min, int max, Vec2i result){return clamp(min, max, result, ALL);} | ||||
| 	@Override | ||||
| 	public default Vec2i clamp(int min, int max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec2i clamp(int min, int max, Vec2i result, int filter){return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()));} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2i store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec2i store(ByteBuffer buffer) { | ||||
| 		buffer.putInt(getX()).putInt(getY()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2i load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getInt(), buffer.getInt()); | ||||
| 	} | ||||
| 	public default Vec2i load(ByteBuffer buffer) { return set(buffer.getInt(), buffer.getInt()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2i store(IntBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec2i store(IntBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2i load(IntBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2i load(IntBuffer buffer) { return set(buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec2b asByte(){return isMutable() ? Vec2b.mutable((byte)getX(), (byte)getY()) : Vec2b.of((byte)getX(), (byte)getY());} | ||||
| 	public default Vec2b asByte() { return isMutable() ? Vec2b.mutable((byte)getX(), (byte)getY()) : Vec2b.of((byte)getX(), (byte)getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2s asShort(){return isMutable() ? Vec2s.mutable((short)getX(), (short)getY()) : Vec2s.of((short)getX(), (short)getY());} | ||||
| 	public default Vec2s asShort() { return isMutable() ? Vec2s.mutable((short)getX(), (short)getY()) : Vec2s.of((short)getX(), (short)getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2l asLong(){return isMutable() ? Vec2l.mutable(getX(), getY()) : Vec2l.of(getX(), getY());} | ||||
| 	public default Vec2l asLong() { return isMutable() ? Vec2l.mutable(getX(), getY()) : Vec2l.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2f asFloat() {return isMutable() ? Vec2f.mutable(getX(), getY()) : Vec2f.of(getX(), getY());} | ||||
| 	public default Vec2f asFloat() { return isMutable() ? Vec2f.mutable(getX(), getY()) : Vec2f.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2d asDouble(){return isMutable() ? Vec2d.mutable(getX(), getY()) : Vec2d.of(getX(), getY());} | ||||
| 
 | ||||
| 	 | ||||
| 	public default Vec2d asDouble() { return isMutable() ? Vec2d.mutable(getX(), getY()) : Vec2d.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2i asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec2i asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec2i asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec2i asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec2i copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec2i copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec2i copyAsImmutable(){return of(this);} | ||||
| 	public default Vec2i copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,82 +2,45 @@ package speiger.src.coreengine.math.vector.ints; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2iImmutable implements Vec2i | ||||
| { | ||||
| public class Vec2iImmutable implements Vec2i { | ||||
| 	final int x; | ||||
| 	final int y; | ||||
| 	 | ||||
| 	public Vec2iImmutable() | ||||
| 	{ | ||||
| 	public Vec2iImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2iImmutable(int value) | ||||
| 	{ | ||||
| 	public Vec2iImmutable(int value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2iImmutable(int x, int y) | ||||
| 	{ | ||||
| 	public Vec2iImmutable(int x, int y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public int getX() { return x; } | ||||
| 	@Override | ||||
| 	public int getY() { return y; } | ||||
| 	@Override | ||||
| 	public Vec2i setX(int x) { return this.x == x ? this : Vec2i.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2i setY(int y) { return this.y == y ? this : Vec2i.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2i copy() { return Vec2i.of(this); } | ||||
| 	@Override | ||||
| 	public Vec2i set(int x, int y) { return this.x == x && this.y == y ? this : Vec2i.of(x, y); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2i setX(int x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec2i.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2i setY(int y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec2i.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2i copy() | ||||
| 	{ | ||||
| 		return Vec2i.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2i set(int x, int y) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y ? this : Vec2i.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2i) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2i) { | ||||
| 			Vec2i vec = (Vec2i)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -85,8 +48,5 @@ public class Vec2iImmutable implements Vec2i | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2i[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2i[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,84 +2,57 @@ package speiger.src.coreengine.math.vector.ints; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2iMutable implements Vec2i | ||||
| { | ||||
| public class Vec2iMutable implements Vec2i { | ||||
| 	int x; | ||||
| 	int y; | ||||
| 	 | ||||
| 	public Vec2iMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec2iMutable() {} | ||||
| 	 | ||||
| 	public Vec2iMutable(int value) | ||||
| 	{ | ||||
| 	public Vec2iMutable(int value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2iMutable(int x, int y) | ||||
| 	{ | ||||
| 	public Vec2iMutable(int x, int y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public int getX() { return x; } | ||||
| 	@Override | ||||
| 	public int getY() { return y; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2i setX(int x) | ||||
| 	{ | ||||
| 	public Vec2i setX(int x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2i setY(int y) | ||||
| 	{ | ||||
| 	public Vec2i setY(int y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2i copy() | ||||
| 	{ | ||||
| 		return Vec2i.mutable(this); | ||||
| 	} | ||||
| 	public Vec2i copy() { return Vec2i.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2i set(int x, int y) | ||||
| 	{ | ||||
| 	public Vec2i set(int x, int y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2i) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2i) { | ||||
| 			Vec2i vec = (Vec2i)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -87,8 +60,5 @@ public class Vec2iMutable implements Vec2i | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2i[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2i[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -10,22 +10,19 @@ import speiger.src.coreengine.math.vector.floats.Vec3f; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec3l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec3s; | ||||
| 
 | ||||
| 
 | ||||
| public interface Vec3i extends Veci | ||||
| { | ||||
| public interface Vec3i extends Veci { | ||||
| 	public static final Vec3i ZERO = of(); | ||||
| 	public static final Vec3i MINUS_ONE = of(-1); | ||||
| 	public static final Vec3i ONE = of(1); | ||||
| 	 | ||||
| 	public static Vec3i mutable(){return new Vec3iMutable();} | ||||
| 	public static Vec3i mutable(int value){return new Vec3iMutable(value);} | ||||
| 	public static Vec3i mutable(int x, int y, int z){return new Vec3iMutable(x, y, z);} | ||||
| 	public static Vec3i mutable(Vec3i vec){return mutable(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	 | ||||
| 	public static Vec3i of(){return new Vec3iImmutable();} | ||||
| 	public static Vec3i of(int value){return new Vec3iImmutable(value);} | ||||
| 	public static Vec3i of(int x, int y, int z){return new Vec3iImmutable(x, y, z);} | ||||
| 	public static Vec3i of(Vec3i vec){return of(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	public static Vec3i mutable() { return new Vec3iMutable(); } | ||||
| 	public static Vec3i mutable(int value) { return new Vec3iMutable(value); } | ||||
| 	public static Vec3i mutable(int x, int y, int z) { return new Vec3iMutable(x, y, z); } | ||||
| 	public static Vec3i mutable(Vec3i vec) { return mutable(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	public static Vec3i of() { return new Vec3iImmutable(); } | ||||
| 	public static Vec3i of(int value) { return new Vec3iImmutable(value); } | ||||
| 	public static Vec3i of(int x, int y, int z) { return new Vec3iImmutable(x, y, z); } | ||||
| 	public static Vec3i of(Vec3i vec) { return of(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	 | ||||
| 	public int getX(); | ||||
| 	public int getY(); | ||||
| @ -33,125 +30,103 @@ public interface Vec3i extends Veci | ||||
| 	public Vec3i setX(int x); | ||||
| 	public Vec3i setY(int y); | ||||
| 	public Vec3i setZ(int z); | ||||
| 	@Override | ||||
| 	public default int[] asArray(){return new int[]{getX(), getY(), getZ()};} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default int[] asArray() { return new int[] {getX(), getY(), getZ()}; } | ||||
| 	@Override | ||||
| 	public Vec3i copy(); | ||||
| 	@Override | ||||
| 	public default Vec3i abs(){return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()));} | ||||
| 	public default Vec3i abs() { return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ())); } | ||||
| 	@Override | ||||
| 	public default Vec3i negate(){return set(0, 0, 0);} | ||||
| 	public default Vec3i negate() { return set(0, 0, 0); } | ||||
| 	@Override | ||||
| 	public default Vec3i invert(){return set(-getX(), -getY(), -getZ());} | ||||
| 	public default Vec3i invert() { return set(-getX(), -getY(), -getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3i add(int value){return add(value, value, value);}	 | ||||
| 	public default Vec3i add(Vec3i value){return add(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3i add(int x, int y, int z){return set(getX() + x, getY() + y, getZ() + z);} | ||||
| 
 | ||||
| 	public default Vec3i add(int value) { return add(value, value, value); } | ||||
| 	public default Vec3i add(Vec3i value) { return add(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3i add(int x, int y, int z) { return set(getX() + x, getY() + y, getZ() + z); } | ||||
| 	@Override | ||||
| 	public default Vec3i sub(int value){return sub(value, value, value);} | ||||
| 	public default Vec3i sub(Vec3i value){return sub(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3i sub(int x, int y, int z){return set(getX() - x, getY() - y, getZ() - z);} | ||||
| 	 | ||||
| 	public default Vec3i sub(int value) { return sub(value, value, value); } | ||||
| 	public default Vec3i sub(Vec3i value) { return sub(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3i sub(int x, int y, int z) { return set(getX() - x, getY() - y, getZ() - z); } | ||||
| 	@Override | ||||
| 	public default Vec3i multiply(int value){return multiply(value, value, value);} | ||||
| 	public default Vec3i multiply(Vec3i value){return multiply(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3i multiply(int x, int y, int z){return set(getX() * x, getY() * y, getZ() * z);} | ||||
| 
 | ||||
| 	public default Vec3i multiply(int value) { return multiply(value, value, value); } | ||||
| 	public default Vec3i multiply(Vec3i value) { return multiply(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3i multiply(int x, int y, int z) { return set(getX() * x, getY() * y, getZ() * z); } | ||||
| 	@Override | ||||
| 	public default Vec3i devide(int value){return devide(value, value, value);} | ||||
| 	public default Vec3i devide(Vec3i value){return devide(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3i devide(int x, int y, int z){return set(getX() / x, getY() / y, getZ() / z);} | ||||
| 	 | ||||
| 	public default Vec3i devide(int value) { return devide(value, value, value); } | ||||
| 	public default Vec3i devide(Vec3i value) { return devide(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3i devide(int x, int y, int z) { return set(getX() / x, getY() / y, getZ() / z); } | ||||
| 	@Override | ||||
| 	public default Vec3i set(int value){return set(value, value, value);} | ||||
| 	public default Vec3i set(Vec3i value){return set(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3i set(int value) { return set(value, value, value); } | ||||
| 	public default Vec3i set(Vec3i value) { return set(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public Vec3i set(int x, int y, int z); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec3i value){return distanceTo(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double distanceTo(int x, int y, int z){return Math.sqrt(distanceToSquared(x, y, z));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec3i value){return distanceToSquared(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default long distanceToSquared(int x, int y, int z) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec3i value) { return distanceTo(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default double distanceTo(int x, int y, int z) { return Math.sqrt(distanceToSquared(x, y, z)); } | ||||
| 	public default long distanceToSquared(Vec3i value) { return distanceToSquared(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default long distanceToSquared(int x, int y, int z) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		long zPos = getZ() - z; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos); | ||||
| 	} | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ());} | ||||
| 	 | ||||
| 	public default long dotProduct(Vec3i value){return dotProduct(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default long dotProduct(int x, int y, int z){return (getX() * x) + (getY() * y) + (getZ() * z);} | ||||
| 	 | ||||
| 	public default Vec3i min(Vec3i other) {return min(other, this);} | ||||
| 	public default Vec3i min(Vec3i other, Vec3i result){return min(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3i min(int x, int y, int z) {return min(x, y, z, this);} | ||||
| 	public default Vec3i min(int x, int y, int z, Vec3i result){return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec3i max(Vec3i other) {return max(other, this);} | ||||
| 	public default Vec3i max(Vec3i other, Vec3i result){return max(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3i max(int x, int y, int z) {return max(x, y, z, this);} | ||||
| 	public default Vec3i max(int x, int y, int z, Vec3i result){return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec3i difference(Vec3i other) {return difference(other, this);} | ||||
| 	public default Vec3i difference(Vec3i other, Vec3i result){return difference(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3i difference(int x, int y, int z) {return difference(x, y, z, this);} | ||||
| 	public default Vec3i difference(int x, int y, int z, Vec3i result){return result.set(getX() - x, getY() - y, getZ() - z);} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3i clamp(int min, int max){return clamp(min, max, ALL);} | ||||
| 	public default Vec3i clamp(int min, int max, Vec3i result){return clamp(min, max, result, ALL);} | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()); } | ||||
| 	public default long dotProduct(Vec3i value) { return dotProduct(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default long dotProduct(int x, int y, int z) { return (getX() * x) + (getY() * y) + (getZ() * z); } | ||||
| 	public default Vec3i min(Vec3i other) { return min(other, this); } | ||||
| 	public default Vec3i min(Vec3i other, Vec3i result) { return min(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3i min(int x, int y, int z) { return min(x, y, z, this); } | ||||
| 	public default Vec3i min(int x, int y, int z, Vec3i result) { return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z)); } | ||||
| 	public default Vec3i max(Vec3i other) { return max(other, this); } | ||||
| 	public default Vec3i max(Vec3i other, Vec3i result) { return max(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3i max(int x, int y, int z) { return max(x, y, z, this); } | ||||
| 	public default Vec3i max(int x, int y, int z, Vec3i result) { return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z)); } | ||||
| 	public default Vec3i difference(Vec3i other) { return difference(other, this); } | ||||
| 	public default Vec3i difference(Vec3i other, Vec3i result) { return difference(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3i difference(int x, int y, int z) { return difference(x, y, z, this); } | ||||
| 	public default Vec3i difference(int x, int y, int z, Vec3i result) { return result.set(getX() - x, getY() - y, getZ() - z); } | ||||
| 	@Override | ||||
| 	public default Vec3i clamp(int min, int max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec3i clamp(int min, int max, Vec3i result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()));} | ||||
| 	public default Vec3i clamp(int min, int max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec3i clamp(int min, int max, Vec3i result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec3i clamp(int min, int max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec3i clamp(int min, int max, Vec3i result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3i store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3i store(ByteBuffer buffer) { | ||||
| 		buffer.putInt(getX()).putInt(getY()).putInt(getZ()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3i load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getInt(), buffer.getInt(), buffer.getInt()); | ||||
| 	} | ||||
| 	public default Vec3i load(ByteBuffer buffer) { return set(buffer.getInt(), buffer.getInt(), buffer.getInt()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3i store(IntBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3i store(IntBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3i load(IntBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3i load(IntBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec3b asByte(){return isMutable() ? Vec3b.mutable((byte)getX(), (byte)getY(), (byte)getZ()) : Vec3b.of((byte)getX(), (byte)getY(), (byte)getZ());} | ||||
| 	public default Vec3b asByte() { return isMutable() ? Vec3b.mutable((byte)getX(), (byte)getY(), (byte)getZ()) : Vec3b.of((byte)getX(), (byte)getY(), (byte)getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3s asShort(){return isMutable() ? Vec3s.mutable((short)getX(), (short)getY(), (short)getZ()) : Vec3s.of((short)getX(), (short)getY(), (short)getZ());} | ||||
| 	public default Vec3s asShort() { return isMutable() ? Vec3s.mutable((short)getX(), (short)getY(), (short)getZ()) : Vec3s.of((short)getX(), (short)getY(), (short)getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3l asLong(){return isMutable() ? Vec3l.mutable(getX(), getY(), getZ()) : Vec3l.of(getX(), getY(), getZ());} | ||||
| 	public default Vec3l asLong() { return isMutable() ? Vec3l.mutable(getX(), getY(), getZ()) : Vec3l.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3f asFloat() {return isMutable() ? Vec3f.mutable(getX(), getY(), getZ()) : Vec3f.of(getX(), getY(), getZ());} | ||||
| 	public default Vec3f asFloat() { return isMutable() ? Vec3f.mutable(getX(), getY(), getZ()) : Vec3f.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3d asDouble(){return isMutable() ? Vec3d.mutable(getX(), getY(), getZ()) : Vec3d.of(getX(), getY(), getZ());} | ||||
| 
 | ||||
| 	 | ||||
| 	public default Vec3d asDouble() { return isMutable() ? Vec3d.mutable(getX(), getY(), getZ()) : Vec3d.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3i asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec3i asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec3i asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec3i asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec3i copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec3i copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec3i copyAsImmutable(){return of(this);} | ||||
| 	public default Vec3i copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,98 +2,53 @@ package speiger.src.coreengine.math.vector.ints; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3iImmutable implements Vec3i | ||||
| { | ||||
| public class Vec3iImmutable implements Vec3i { | ||||
| 	final int x; | ||||
| 	final int y; | ||||
| 	final int z; | ||||
| 	 | ||||
| 	public Vec3iImmutable() | ||||
| 	{ | ||||
| 	public Vec3iImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3iImmutable(int value) | ||||
| 	{ | ||||
| 	public Vec3iImmutable(int value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3iImmutable(int x, int y, int z) | ||||
| 	{ | ||||
| 	public Vec3iImmutable(int x, int y, int z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public int getX() { return x; } | ||||
| 	@Override | ||||
| 	public int getY() { return y; } | ||||
| 	@Override | ||||
| 	public int getZ() { return z; } | ||||
| 	@Override | ||||
| 	public Vec3i setX(int x) { return this.x == x ? this : Vec3i.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3i setY(int y) { return this.y == y ? this : Vec3i.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3i setZ(int z) { return this.z == z ? this : Vec3i.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3i copy() { return Vec3i.of(this); } | ||||
| 	@Override | ||||
| 	public Vec3i set(int x, int y, int z) { return this.x == x && this.y == y && this.z == z ? this : Vec3i.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3i setX(int x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec3i.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3i setY(int y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec3i.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3i setZ(int z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec3i.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3i copy() | ||||
| 	{ | ||||
| 		return Vec3i.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3i set(int x, int y, int z) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z ? this : Vec3i.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3i) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3i) { | ||||
| 			Vec3i vec = (Vec3i)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -101,8 +56,5 @@ public class Vec3iImmutable implements Vec3i | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3i[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3i[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,84 +2,57 @@ package speiger.src.coreengine.math.vector.ints; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3iMutable implements Vec3i | ||||
| { | ||||
| public class Vec3iMutable implements Vec3i { | ||||
| 	int x; | ||||
| 	int y; | ||||
| 	int z; | ||||
| 	 | ||||
| 	public Vec3iMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec3iMutable() {} | ||||
| 	 | ||||
| 	public Vec3iMutable(int value) | ||||
| 	{ | ||||
| 	public Vec3iMutable(int value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3iMutable(int x, int y, int z) | ||||
| 	{ | ||||
| 	public Vec3iMutable(int x, int y, int z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public int getX() { return x; } | ||||
| 	@Override | ||||
| 	public int getY() { return y; } | ||||
| 	@Override | ||||
| 	public int getZ() { return z; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3i setX(int x) | ||||
| 	{ | ||||
| 	public Vec3i setX(int x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3i setY(int y) | ||||
| 	{ | ||||
| 	public Vec3i setY(int y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3i setZ(int z) | ||||
| 	{ | ||||
| 	public Vec3i setZ(int z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3i copy() | ||||
| 	{ | ||||
| 		return Vec3i.mutable(this); | ||||
| 	} | ||||
| 	public Vec3i copy() { return Vec3i.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3i set(int x, int y, int z) | ||||
| 	{ | ||||
| 	public Vec3i set(int x, int y, int z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -87,16 +60,11 @@ public class Vec3iMutable implements Vec3i | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3i) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3i) { | ||||
| 			Vec3i vec = (Vec3i)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -104,8 +72,5 @@ public class Vec3iMutable implements Vec3i | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3i[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3i[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -10,21 +10,19 @@ import speiger.src.coreengine.math.vector.floats.Vec4f; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec4l; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec4s; | ||||
| 
 | ||||
| public interface Vec4i extends Veci | ||||
| { | ||||
| public interface Vec4i extends Veci { | ||||
| 	public static final Vec4i ZERO = of(); | ||||
| 	public static final Vec4i MINUS_ONE = of(-1); | ||||
| 	public static final Vec4i ONE = of(1); | ||||
| 	 | ||||
| 	public static Vec4i mutable(){return new Vec4iMutable();} | ||||
| 	public static Vec4i mutable(int value){return new Vec4iMutable(value);} | ||||
| 	public static Vec4i mutable(int x, int y, int z, int w){return new Vec4iMutable(x, y, z, w);} | ||||
| 	public static Vec4i mutable(Vec4i vec){return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	 | ||||
| 	public static Vec4i of(){return new Vec4iImmutable();} | ||||
| 	public static Vec4i of(int value){return new Vec4iImmutable(value);} | ||||
| 	public static Vec4i of(int x, int y, int z, int w){return new Vec4iImmutable(x, y, z, w);} | ||||
| 	public static Vec4i of(Vec4i vec){return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	public static Vec4i mutable() { return new Vec4iMutable(); } | ||||
| 	public static Vec4i mutable(int value) { return new Vec4iMutable(value); } | ||||
| 	public static Vec4i mutable(int x, int y, int z, int w) { return new Vec4iMutable(x, y, z, w); } | ||||
| 	public static Vec4i mutable(Vec4i vec) { return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	public static Vec4i of() { return new Vec4iImmutable(); } | ||||
| 	public static Vec4i of(int value) { return new Vec4iImmutable(value); } | ||||
| 	public static Vec4i of(int x, int y, int z, int w) { return new Vec4iImmutable(x, y, z, w); } | ||||
| 	public static Vec4i of(Vec4i vec) { return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	 | ||||
| 	public int getX(); | ||||
| 	public int getY(); | ||||
| @ -34,125 +32,104 @@ public interface Vec4i extends Veci | ||||
| 	public Vec4i setY(int y); | ||||
| 	public Vec4i setZ(int z); | ||||
| 	public Vec4i setW(int w); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default int[] asArray(){return new int[]{getX(), getY(), getZ(), getW()};} | ||||
| 	public default int[] asArray() { return new int[] {getX(), getY(), getZ(), getW()}; } | ||||
| 	@Override | ||||
| 	public Vec4i copy(); | ||||
| 	@Override | ||||
| 	public default Vec4i abs(){return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()), Math.abs(getW()));} | ||||
| 	public default Vec4i abs() { return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()), Math.abs(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4i negate(){return set(0, 0, 0, 0);} | ||||
| 	public default Vec4i negate() { return set(0, 0, 0, 0); } | ||||
| 	@Override | ||||
| 	public default Vec4i invert(){return set(-getX(), -getY(), -getZ(), -getW());} | ||||
| 	 | ||||
| 	public default Vec4i invert() { return set(-getX(), -getY(), -getZ(), -getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4i add(int value){return add(value, value, value, value);}	 | ||||
| 	public default Vec4i add(Vec4i value){return add(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4i add(int x, int y, int z, int w){return set(getX() + x, getY() + y, getZ() + z, getW() + w);} | ||||
| 
 | ||||
| 	public default Vec4i add(int value) { return add(value, value, value, value); } | ||||
| 	public default Vec4i add(Vec4i value) { return add(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4i add(int x, int y, int z, int w) { return set(getX() + x, getY() + y, getZ() + z, getW() + w); } | ||||
| 	@Override | ||||
| 	public default Vec4i sub(int value){return sub(value, value, value, value);} | ||||
| 	public default Vec4i sub(Vec4i value){return sub(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4i sub(int x, int y, int z, int w){return set(getX() - x, getY() - y, getZ() - z, getW() - w);} | ||||
| 	 | ||||
| 	public default Vec4i sub(int value) { return sub(value, value, value, value); } | ||||
| 	public default Vec4i sub(Vec4i value) { return sub(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4i sub(int x, int y, int z, int w) { return set(getX() - x, getY() - y, getZ() - z, getW() - w); } | ||||
| 	@Override | ||||
| 	public default Vec4i multiply(int value){return multiply(value, value, value, value);} | ||||
| 	public default Vec4i multiply(Vec4i value){return multiply(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4i multiply(int x, int y, int z, int w){return set(getX() * x, getY() * y, getZ() * z, getW() * w);} | ||||
| 	 | ||||
| 	public default Vec4i multiply(int value) { return multiply(value, value, value, value); } | ||||
| 	public default Vec4i multiply(Vec4i value) { return multiply(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4i multiply(int x, int y, int z, int w) { return set(getX() * x, getY() * y, getZ() * z, getW() * w); } | ||||
| 	@Override | ||||
| 	public default Vec4i devide(int value){return devide(value, value, value, value);} | ||||
| 	public default Vec4i devide(Vec4i value){return devide(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4i devide(int x, int y, int z, int w){return set(getX() / x, getY() / y, getZ() / z, getW() / w);} | ||||
| 	 | ||||
| 	public default Vec4i devide(int value) { return devide(value, value, value, value); } | ||||
| 	public default Vec4i devide(Vec4i value) { return devide(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4i devide(int x, int y, int z, int w) { return set(getX() / x, getY() / y, getZ() / z, getW() / w); } | ||||
| 	@Override | ||||
| 	public default Vec4i set(int value){return set(value, value, value, value);} | ||||
| 	public default Vec4i set(Vec4i value){return set(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4i set(int value) { return set(value, value, value, value); } | ||||
| 	public default Vec4i set(Vec4i value) { return set(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public Vec4i set(int x, int y, int z, int w); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec4i value){return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double distanceTo(int x, int y, int z, int w){return Math.sqrt(distanceTo(x, y, z, w));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec4i value){return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default long distanceToSquared(int x, int y, int z, int w) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec4i value) { return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double distanceTo(int x, int y, int z, int w) { return Math.sqrt(distanceTo(x, y, z, w)); } | ||||
| 	public default long distanceToSquared(Vec4i value) { return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default long distanceToSquared(int x, int y, int z, int w) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		long zPos = getZ() - z; | ||||
| 		long wPos = getW() - w; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos) + (wPos * wPos); | ||||
| 	} | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW());} | ||||
| 
 | ||||
| 	public default long dotProduct(Vec4i value){return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default long dotProduct(int x, int y, int z, int w){return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w);}; | ||||
| 	 | ||||
| 	public default Vec4i min(Vec4i other) {return min(other, this);} | ||||
| 	public default Vec4i min(Vec4i other, Vec4i result){return min(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4i min(int x, int y, int z, int w) {return min(x, y, z, w, this);} | ||||
| 	public default Vec4i min(int x, int y, int z, int w, Vec4i result){return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z), Math.min(getW(), w));} | ||||
| 	 | ||||
| 	public default Vec4i max(Vec4i other) {return max(other, this);} | ||||
| 	public default Vec4i max(Vec4i other, Vec4i result){return max(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4i max(int x, int y, int z, int w) {return max(x, y, z, w, this);} | ||||
| 	public default Vec4i max(int x, int y, int z, int w, Vec4i result){return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z), Math.max(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec4i difference(Vec4i other) {return difference(other, this);} | ||||
| 	public default Vec4i difference(Vec4i other, Vec4i result){return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4i difference(int x, int y, int z, int w) {return difference(x, y, z, w, this);} | ||||
| 	public default Vec4i difference(int x, int y, int z, int w, Vec4i result){return result.set(getX() - x, getY() - y, getZ() - z, getW() - w);} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4i clamp(int min, int max){return clamp(min, max, ALL);} | ||||
| 	public default Vec4i clamp(int min, int max, Vec4i result){return clamp(min, max, result, ALL);} | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW()); } | ||||
| 	public default long dotProduct(Vec4i value) { return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default long dotProduct(int x, int y, int z, int w) { return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w); }; | ||||
| 	public default Vec4i min(Vec4i other) { return min(other, this); } | ||||
| 	public default Vec4i min(Vec4i other, Vec4i result) { return min(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4i min(int x, int y, int z, int w) { return min(x, y, z, w, this); } | ||||
| 	public default Vec4i min(int x, int y, int z, int w, Vec4i result) { return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z), Math.min(getW(), w)); } | ||||
| 	public default Vec4i max(Vec4i other) { return max(other, this); } | ||||
| 	public default Vec4i max(Vec4i other, Vec4i result) { return max(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4i max(int x, int y, int z, int w) { return max(x, y, z, w, this); } | ||||
| 	public default Vec4i max(int x, int y, int z, int w, Vec4i result) { return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z), Math.max(getZ(), z)); } | ||||
| 	public default Vec4i difference(Vec4i other) { return difference(other, this); } | ||||
| 	public default Vec4i difference(Vec4i other, Vec4i result) { return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4i difference(int x, int y, int z, int w) { return difference(x, y, z, w, this); } | ||||
| 	public default Vec4i difference(int x, int y, int z, int w, Vec4i result) { return result.set(getX() - x, getY() - y, getZ() - z, getW() - w); } | ||||
| 	@Override | ||||
| 	public default Vec4i clamp(int min, int max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec4i clamp(int min, int max, Vec4i result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW()));} | ||||
| 	public default Vec4i clamp(int min, int max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec4i clamp(int min, int max, Vec4i result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec4i clamp(int min, int max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec4i clamp(int min, int max, Vec4i result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4i store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec4i store(ByteBuffer buffer) { | ||||
| 		buffer.putInt(getX()).putInt(getY()).putInt(getZ()).putInt(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4i load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getInt(), buffer.getInt(), buffer.getInt(), buffer.getInt()); | ||||
| 	} | ||||
| 	public default Vec4i load(ByteBuffer buffer) { return set(buffer.getInt(), buffer.getInt(), buffer.getInt(), buffer.getInt()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4i store(IntBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec4i store(IntBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()).put(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4i load(IntBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec4i load(IntBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec4b asByte(){return isMutable() ? Vec4b.mutable((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW()) : Vec4b.of((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW());} | ||||
| 	public default Vec4b asByte() { return isMutable() ? Vec4b.mutable((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW()) : Vec4b.of((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4s asShort(){return isMutable() ? Vec4s.mutable((short)getX(), (short)getY(), (short)getZ(), (short)getW()) : Vec4s.of((short)getX(), (short)getY(), (short)getZ(), (short)getW());} | ||||
| 	public default Vec4s asShort() { return isMutable() ? Vec4s.mutable((short)getX(), (short)getY(), (short)getZ(), (short)getW()) : Vec4s.of((short)getX(), (short)getY(), (short)getZ(), (short)getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4l asLong(){return isMutable() ? Vec4l.mutable(getX(), getY(), getZ(), getW()) : Vec4l.of(getX(), getY(), getZ(), getW());} | ||||
| 	public default Vec4l asLong() { return isMutable() ? Vec4l.mutable(getX(), getY(), getZ(), getW()) : Vec4l.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4f asFloat() {return isMutable() ? Vec4f.mutable(getX(), getY(), getZ(), getW()) : Vec4f.of(getX(), getY(), getZ(), getW());} | ||||
| 	public default Vec4f asFloat() { return isMutable() ? Vec4f.mutable(getX(), getY(), getZ(), getW()) : Vec4f.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4d asDouble(){return isMutable() ? Vec4d.mutable(getX(), getY(), getZ(), getW()) : Vec4d.of(getX(), getY(), getZ(), getW());} | ||||
| 	 | ||||
| 	public default Vec4d asDouble() { return isMutable() ? Vec4d.mutable(getX(), getY(), getZ(), getW()) : Vec4d.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4i asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec4i asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec4i asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec4i asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec4i copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec4i copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec4i copyAsImmutable(){return of(this);} | ||||
| 	public default Vec4i copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,31 +2,27 @@ package speiger.src.coreengine.math.vector.ints; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4iImmutable implements Vec4i | ||||
| { | ||||
| public class Vec4iImmutable implements Vec4i { | ||||
| 	final int x; | ||||
| 	final int y; | ||||
| 	final int z; | ||||
| 	final int w; | ||||
| 	 | ||||
| 	public Vec4iImmutable() | ||||
| 	{ | ||||
| 	public Vec4iImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 		w = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4iImmutable(int value) | ||||
| 	{ | ||||
| 	public Vec4iImmutable(int value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4iImmutable(int x, int y, int z, int w) | ||||
| 	{ | ||||
| 	public Vec4iImmutable(int x, int y, int z, int w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -34,82 +30,33 @@ public class Vec4iImmutable implements Vec4i | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public int getX() { return x; } | ||||
| 	@Override | ||||
| 	public int getY() { return y; } | ||||
| 	@Override | ||||
| 	public int getZ() { return z; } | ||||
| 	@Override | ||||
| 	public int getW() { return w; } | ||||
| 	@Override | ||||
| 	public Vec4i setX(int x) { return this.x == x ? this : Vec4i.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4i setY(int y) { return this.y == y ? this : Vec4i.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4i setZ(int z) { return this.z == z ? this : Vec4i.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4i setW(int w) { return this.w == w ? this : Vec4i.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4i copy() { return Vec4i.of(this); } | ||||
| 	@Override | ||||
| 	public Vec4i set(int x, int y, int z, int w) { return this.x == x && this.y == y && this.z == z && this.w == w ? this : Vec4i.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i setX(int x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec4i.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i setY(int y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec4i.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i setZ(int z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec4i.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i setW(int w) | ||||
| 	{ | ||||
| 		return this.w == w ? this : Vec4i.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i copy() | ||||
| 	{ | ||||
| 		return Vec4i.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i set(int x, int y, int z, int w) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z && this.w == w ? this : Vec4i.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4i) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4i) { | ||||
| 			Vec4i vec = (Vec4i)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -117,8 +64,5 @@ public class Vec4iImmutable implements Vec4i | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4i[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4i[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,27 +2,22 @@ package speiger.src.coreengine.math.vector.ints; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4iMutable implements Vec4i | ||||
| { | ||||
| public class Vec4iMutable implements Vec4i { | ||||
| 	int x; | ||||
| 	int y; | ||||
| 	int z; | ||||
| 	int w; | ||||
| 	 | ||||
| 	public Vec4iMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec4iMutable() {} | ||||
| 	 | ||||
| 	public Vec4iMutable(int value) | ||||
| 	{ | ||||
| 	public Vec4iMutable(int value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4iMutable(int x, int y, int z, int w) | ||||
| 	{ | ||||
| 	public Vec4iMutable(int x, int y, int z, int w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -30,72 +25,45 @@ public class Vec4iMutable implements Vec4i | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public int getX() { return x; } | ||||
| 	@Override | ||||
| 	public int getY() { return y; } | ||||
| 	@Override | ||||
| 	public int getZ() { return z; } | ||||
| 	@Override | ||||
| 	public int getW() { return w; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i setX(int x) | ||||
| 	{ | ||||
| 	public Vec4i setX(int x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i setY(int y) | ||||
| 	{ | ||||
| 	public Vec4i setY(int y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i setZ(int z) | ||||
| 	{ | ||||
| 	public Vec4i setZ(int z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i setW(int w) | ||||
| 	{ | ||||
| 	public Vec4i setW(int w) { | ||||
| 		this.w = w; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i copy() | ||||
| 	{ | ||||
| 		return Vec4i.mutable(this); | ||||
| 	} | ||||
| 	public Vec4i copy() { return Vec4i.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4i set(int x, int y, int z, int w) | ||||
| 	{ | ||||
| 	public Vec4i set(int x, int y, int z, int w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -104,16 +72,11 @@ public class Vec4iMutable implements Vec4i | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4i) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4i) { | ||||
| 			Vec4i vec = (Vec4i)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -121,8 +84,5 @@ public class Vec4iMutable implements Vec4i | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4i[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4i[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -9,8 +9,7 @@ import speiger.src.coreengine.math.vector.floats.Vecf; | ||||
| import speiger.src.coreengine.math.vector.longs.Vecl; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vecs; | ||||
| 
 | ||||
| public interface Veci extends Vec | ||||
| { | ||||
| public interface Veci extends Vec { | ||||
| 	public Veci set(int value); | ||||
| 	public Veci add(int value); | ||||
| 	public Veci sub(int value); | ||||
| @ -18,14 +17,11 @@ public interface Veci extends Vec | ||||
| 	public Veci devide(int value); | ||||
| 	public Veci clamp(int min, int max); | ||||
| 	public Veci clamp(int min, int max, int filter); | ||||
| 	 | ||||
| 	public long lengthSquared(); | ||||
| 	public default double length(){return Math.sqrt(lengthSquared());} | ||||
| 	 | ||||
| 	public default double length() { return Math.sqrt(lengthSquared()); } | ||||
| 	public Veci store(IntBuffer buffer); | ||||
| 	public Veci load(IntBuffer buffer); | ||||
| 	public int[] asArray(); | ||||
| 	 | ||||
| 	public Vecb asByte(); | ||||
| 	public Vecs asShort(); | ||||
| 	public Vecl asLong(); | ||||
|  | ||||
| @ -10,81 +10,70 @@ import speiger.src.coreengine.math.vector.floats.Vec2f; | ||||
| import speiger.src.coreengine.math.vector.ints.Vec2i; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec2s; | ||||
| 
 | ||||
| public interface Vec2l extends Vecl | ||||
| { | ||||
| public interface Vec2l extends Vecl { | ||||
| 	public static final Vec2l ZERO = of(); | ||||
| 	public static final Vec2l MINUS_ONE = of(-1L); | ||||
| 	public static final Vec2l ONE = of(1L); | ||||
| 	 | ||||
| 	public static Vec2l mutable(){return new Vec2lMutable();} | ||||
| 	public static Vec2l mutable(long value){return new Vec2lMutable(value);} | ||||
| 	public static Vec2l mutable(long x, long y){return new Vec2lMutable(x, y);} | ||||
| 	public static Vec2l mutable(Vec2l value){return mutable(value.getX(), value.getY());} | ||||
| 	 | ||||
| 	public static Vec2l of(){return new Vec2lImmutable();} | ||||
| 	public static Vec2l of(long value){return new Vec2lImmutable(value);} | ||||
| 	public static Vec2l of(long x, long y){return new Vec2lImmutable(x, y);} | ||||
| 	public static Vec2l of(Vec2l value){return of(value.getX(), value.getY());} | ||||
| 	public static Vec2l mutable() { return new Vec2lMutable(); } | ||||
| 	public static Vec2l mutable(long value) { return new Vec2lMutable(value); } | ||||
| 	public static Vec2l mutable(long x, long y) { return new Vec2lMutable(x, y); } | ||||
| 	public static Vec2l mutable(Vec2l value) { return mutable(value.getX(), value.getY()); } | ||||
| 	public static Vec2l of() { return new Vec2lImmutable(); } | ||||
| 	public static Vec2l of(long value) { return new Vec2lImmutable(value); } | ||||
| 	public static Vec2l of(long x, long y) { return new Vec2lImmutable(x, y); } | ||||
| 	public static Vec2l of(Vec2l value) { return of(value.getX(), value.getY()); } | ||||
| 	 | ||||
| 	public long getX(); | ||||
| 	public long getY(); | ||||
| 	public Vec2l setX(long x); | ||||
| 	public Vec2l setY(long y); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default long[] asArray(){return new long[]{getX(), getY()};} | ||||
| 	public default long[] asArray() { return new long[] {getX(), getY()}; } | ||||
| 	@Override | ||||
| 	public Vec2l copy(); | ||||
| 	@Override | ||||
| 	public default Vec2l abs(){return set(Math.abs(getX()), Math.abs(getY()));} | ||||
| 	public default Vec2l abs() { return set(Math.abs(getX()), Math.abs(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2l negate(){return set(0L, 0L);} | ||||
| 	public default Vec2l negate() { return set(0L, 0L); } | ||||
| 	@Override | ||||
| 	public default Vec2l invert(){return set(-getX(), -getY());}; | ||||
| 	 | ||||
| 	public default Vec2l invert() { return set(-getX(), -getY()); }; | ||||
| 	@Override | ||||
| 	public default Vec2l add(long value) {return add(value, value);} | ||||
| 	public default Vec2l add(Vec2l value) {return add(value.getX(), value.getY());} | ||||
| 	public default Vec2l add(long x, long y) {return set(x + getX(), y + getY());} | ||||
| 	 | ||||
| 	public default Vec2l add(long value) { return add(value, value); } | ||||
| 	public default Vec2l add(Vec2l value) { return add(value.getX(), value.getY()); } | ||||
| 	public default Vec2l add(long x, long y) { return set(x + getX(), y + getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2l sub(long value){return sub(value, value);} | ||||
| 	public default Vec2l sub(Vec2l value){return sub(value.getX(), value.getY());} | ||||
| 	public default Vec2l sub(long x, long y) {return set(getX() - x, getY() - y);} | ||||
| 	 | ||||
| 	public default Vec2l sub(long value) { return sub(value, value); } | ||||
| 	public default Vec2l sub(Vec2l value) { return sub(value.getX(), value.getY()); } | ||||
| 	public default Vec2l sub(long x, long y) { return set(getX() - x, getY() - y); } | ||||
| 	@Override | ||||
| 	public default Vec2l multiply(long value){return multiply(value, value);} | ||||
| 	public default Vec2l multiply(Vec2l value){return multiply(value.getX(), value.getY());} | ||||
| 	public default Vec2l multiply(long x, long y) {return set(x * getX(), y * getY());} | ||||
| 	 | ||||
| 	public default Vec2l multiply(long value) { return multiply(value, value); } | ||||
| 	public default Vec2l multiply(Vec2l value) { return multiply(value.getX(), value.getY()); } | ||||
| 	public default Vec2l multiply(long x, long y) { return set(x * getX(), y * getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2l devide(long value){return devide(value, value);} | ||||
| 	public default Vec2l devide(Vec2l value){return devide(value.getX(), value.getY());} | ||||
| 	public default Vec2l devide(long x, long y){return set(getX() / x, getY() / y);} | ||||
| 	 | ||||
| 	public default Vec2l devide(long value) { return devide(value, value); } | ||||
| 	public default Vec2l devide(Vec2l value) { return devide(value.getX(), value.getY()); } | ||||
| 	public default Vec2l devide(long x, long y) { return set(getX() / x, getY() / y); } | ||||
| 	@Override | ||||
| 	public default Vec2l set(long value){return set(value, value);}; | ||||
| 	public default Vec2l set(Vec2l value){return set(value.getX(), value.getY());} | ||||
| 	public default Vec2l set(long value) { return set(value, value); }; | ||||
| 	public default Vec2l set(Vec2l value) { return set(value.getX(), value.getY()); } | ||||
| 	public Vec2l set(long x, long y); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec2l value){return distanceTo(value.getX(), value.getY());} | ||||
| 	public default double distanceTo(long x, long y){return Math.sqrt(distanceToSquared(x, y));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec2l value){return distanceToSquared(value.getX(), value.getY());} | ||||
| 	public default long distanceToSquared(long x, long y) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec2l value) { return distanceTo(value.getX(), value.getY()); } | ||||
| 	public default double distanceTo(long x, long y) { return Math.sqrt(distanceToSquared(x, y)); } | ||||
| 	public default long distanceToSquared(Vec2l value) { return distanceToSquared(value.getX(), value.getY()); } | ||||
| 	public default long distanceToSquared(long x, long y) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		return (xPos * xPos) + (yPos * yPos); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY());} | ||||
| 	 | ||||
| 	public default long dotProduct(Vec2l value){return dotProduct(value.getX(), value.getY());} | ||||
| 	public default long dotProduct(long x, long y){return (getX() * x) + (getY() * y);} | ||||
| 	 | ||||
| 	public default Vec2l rotate(long angle, Vec2l center){return rotate(angle, center.getX(), center.getY());} | ||||
| 	public default Vec2l rotate(long angle, long x, long y) | ||||
| 	{ | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()); } | ||||
| 	public default long dotProduct(Vec2l value) { return dotProduct(value.getX(), value.getY()); } | ||||
| 	public default long dotProduct(long x, long y) { return (getX() * x) + (getY() * y); } | ||||
| 	public default Vec2l rotate(long angle, Vec2l center) { return rotate(angle, center.getX(), center.getY()); } | ||||
| 	public default Vec2l rotate(long angle, long x, long y) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| @ -92,72 +81,58 @@ public interface Vec2l extends Vecl | ||||
| 		return set((long)((xPos * cos) + (yPos * sin) + x), (long)(-(xPos * sin) + (yPos * cos) + y)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2l min(Vec2l other) {return min(other, this);} | ||||
| 	public default Vec2l min(Vec2l other, Vec2l result){return min(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2l min(long x, long y) {return min(x, y, this);} | ||||
| 	public default Vec2l min(long x, long y, Vec2l result){return result.set(Math.min(getX(), x), Math.min(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2l max(Vec2l other) {return max(other, this);} | ||||
| 	public default Vec2l max(Vec2l other, Vec2l result){return max(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2l max(long x, long y) {return max(x, y, this);} | ||||
| 	public default Vec2l max(long x, long y, Vec2l result){return result.set(Math.max(getX(), x), Math.max(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2l difference(Vec2l other) {return difference(other, this);} | ||||
| 	public default Vec2l difference(Vec2l other, Vec2l result){return difference(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2l difference(long x, long y) {return difference(x, y, this);} | ||||
| 	public default Vec2l difference(long x, long y, Vec2l result){return result.set(getX() - x, getY() - y);} | ||||
| 	public default Vec2l min(Vec2l other) { return min(other, this); } | ||||
| 	public default Vec2l min(Vec2l other, Vec2l result) { return min(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2l min(long x, long y) { return min(x, y, this); } | ||||
| 	public default Vec2l min(long x, long y, Vec2l result) { return result.set(Math.min(getX(), x), Math.min(getY(), y)); } | ||||
| 	public default Vec2l max(Vec2l other) { return max(other, this); } | ||||
| 	public default Vec2l max(Vec2l other, Vec2l result) { return max(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2l max(long x, long y) { return max(x, y, this); } | ||||
| 	public default Vec2l max(long x, long y, Vec2l result) { return result.set(Math.max(getX(), x), Math.max(getY(), y)); } | ||||
| 	public default Vec2l difference(Vec2l other) { return difference(other, this); } | ||||
| 	public default Vec2l difference(Vec2l other, Vec2l result) { return difference(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2l difference(long x, long y) { return difference(x, y, this); } | ||||
| 	public default Vec2l difference(long x, long y, Vec2l result) { return result.set(getX() - x, getY() - y); } | ||||
| 	@Override | ||||
| 	public default Vec2l clamp(long min, long max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec2l clamp(long min, long max, Vec2l result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec2l clamp(long min, long max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec2l clamp(long min, long max, Vec2l result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2l clamp(long min, long max){return clamp(min, max, ALL);} | ||||
| 	public default Vec2l clamp(long min, long max, Vec2l result){return clamp(min, max, result, ALL);} | ||||
| 	@Override | ||||
| 	public default Vec2l clamp(long min, long max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec2l clamp(long min, long max, Vec2l result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()));} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2l store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec2l store(ByteBuffer buffer) { | ||||
| 		buffer.putLong(getX()).putLong(getY()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2l load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getLong(), buffer.getLong()); | ||||
| 	} | ||||
| 	public default Vec2l load(ByteBuffer buffer) { return set(buffer.getLong(), buffer.getLong()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2l store(LongBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec2l store(LongBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2l load(LongBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2l load(LongBuffer buffer) { return set(buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec2b asByte(){return isMutable() ? Vec2b.mutable((byte)getX(), (byte)getY()) : Vec2b.of((byte)getX(), (byte)getY());} | ||||
| 	public default Vec2b asByte() { return isMutable() ? Vec2b.mutable((byte)getX(), (byte)getY()) : Vec2b.of((byte)getX(), (byte)getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2s asShort(){return isMutable() ? Vec2s.mutable((short)getX(), (short)getY()) : Vec2s.of((short)getX(), (short)getY());} | ||||
| 	public default Vec2s asShort() { return isMutable() ? Vec2s.mutable((short)getX(), (short)getY()) : Vec2s.of((short)getX(), (short)getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2i asInt(){return isMutable() ? Vec2i.mutable((int)getX(), (int)getY()) : Vec2i.of((int)getX(), (int)getY());} | ||||
| 	public default Vec2i asInt() { return isMutable() ? Vec2i.mutable((int)getX(), (int)getY()) : Vec2i.of((int)getX(), (int)getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2f asFloat() {return isMutable() ? Vec2f.mutable(getX(), getY()) : Vec2f.of(getX(), getY());} | ||||
| 	public default Vec2f asFloat() { return isMutable() ? Vec2f.mutable(getX(), getY()) : Vec2f.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2d asDouble(){return isMutable() ? Vec2d.mutable(getX(), getY()) : Vec2d.of(getX(), getY());} | ||||
| 
 | ||||
| 	 | ||||
| 	public default Vec2d asDouble() { return isMutable() ? Vec2d.mutable(getX(), getY()) : Vec2d.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2l asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec2l asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec2l asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec2l asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec2l copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec2l copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec2l copyAsImmutable(){return of(this);} | ||||
| 	public default Vec2l copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,82 +2,45 @@ package speiger.src.coreengine.math.vector.longs; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2lImmutable implements Vec2l | ||||
| { | ||||
| public class Vec2lImmutable implements Vec2l { | ||||
| 	final long x; | ||||
| 	final long y; | ||||
| 	 | ||||
| 	public Vec2lImmutable() | ||||
| 	{ | ||||
| 	public Vec2lImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2lImmutable(long value) | ||||
| 	{ | ||||
| 	public Vec2lImmutable(long value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2lImmutable(long x, long y) | ||||
| 	{ | ||||
| 	public Vec2lImmutable(long x, long y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public long getX() { return x; } | ||||
| 	@Override | ||||
| 	public long getY() { return y; } | ||||
| 	@Override | ||||
| 	public Vec2l setX(long x) { return this.x == x ? this : Vec2l.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2l setY(long y) { return this.y == y ? this : Vec2l.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2l copy() { return Vec2l.of(this); } | ||||
| 	@Override | ||||
| 	public Vec2l set(long x, long y) { return this.x == x && this.y == y ? this : Vec2l.of(x, y); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2l setX(long x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec2l.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2l setY(long y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec2l.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2l copy() | ||||
| 	{ | ||||
| 		return Vec2l.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2l set(long x, long y) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y ? this : Vec2l.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2l) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2l) { | ||||
| 			Vec2l vec = (Vec2l)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -85,8 +48,5 @@ public class Vec2lImmutable implements Vec2l | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2l[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2l[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,84 +2,57 @@ package speiger.src.coreengine.math.vector.longs; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2lMutable implements Vec2l | ||||
| { | ||||
| public class Vec2lMutable implements Vec2l { | ||||
| 	long x; | ||||
| 	long y; | ||||
| 	 | ||||
| 	public Vec2lMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec2lMutable() {} | ||||
| 	 | ||||
| 	public Vec2lMutable(long value) | ||||
| 	{ | ||||
| 	public Vec2lMutable(long value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2lMutable(long x, long y) | ||||
| 	{ | ||||
| 	public Vec2lMutable(long x, long y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public long getX() { return x; } | ||||
| 	@Override | ||||
| 	public long getY() { return y; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2l setX(long x) | ||||
| 	{ | ||||
| 	public Vec2l setX(long x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2l setY(long y) | ||||
| 	{ | ||||
| 	public Vec2l setY(long y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2l copy() | ||||
| 	{ | ||||
| 		return Vec2l.mutable(this); | ||||
| 	} | ||||
| 	public Vec2l copy() { return Vec2l.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2l set(long x, long y) | ||||
| 	{ | ||||
| 	public Vec2l set(long x, long y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2l) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2l) { | ||||
| 			Vec2l vec = (Vec2l)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -87,8 +60,5 @@ public class Vec2lMutable implements Vec2l | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2l[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2l[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -10,22 +10,19 @@ import speiger.src.coreengine.math.vector.floats.Vec3f; | ||||
| import speiger.src.coreengine.math.vector.ints.Vec3i; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec3s; | ||||
| 
 | ||||
| 
 | ||||
| public interface Vec3l extends Vecl | ||||
| { | ||||
| public interface Vec3l extends Vecl { | ||||
| 	public static final Vec3l ZERO = of(); | ||||
| 	public static final Vec3l MINUS_ONE = of(-1L); | ||||
| 	public static final Vec3l ONE = of(1L); | ||||
| 	 | ||||
| 	public static Vec3l mutable(){return new Vec3lMutable();} | ||||
| 	public static Vec3l mutable(long value){return new Vec3lMutable(value);} | ||||
| 	public static Vec3l mutable(long x, long y, long z){return new Vec3lMutable(x, y, z);} | ||||
| 	public static Vec3l mutable(Vec3l vec){return mutable(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	 | ||||
| 	public static Vec3l of(){return new Vec3lImmutable();} | ||||
| 	public static Vec3l of(long value){return new Vec3lImmutable(value);} | ||||
| 	public static Vec3l of(long x, long y, long z){return new Vec3lImmutable(x, y, z);} | ||||
| 	public static Vec3l of(Vec3l vec){return of(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	public static Vec3l mutable() { return new Vec3lMutable(); } | ||||
| 	public static Vec3l mutable(long value) { return new Vec3lMutable(value); } | ||||
| 	public static Vec3l mutable(long x, long y, long z) { return new Vec3lMutable(x, y, z); } | ||||
| 	public static Vec3l mutable(Vec3l vec) { return mutable(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	public static Vec3l of() { return new Vec3lImmutable(); } | ||||
| 	public static Vec3l of(long value) { return new Vec3lImmutable(value); } | ||||
| 	public static Vec3l of(long x, long y, long z) { return new Vec3lImmutable(x, y, z); } | ||||
| 	public static Vec3l of(Vec3l vec) { return of(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	 | ||||
| 	public long getX(); | ||||
| 	public long getY(); | ||||
| @ -33,124 +30,103 @@ public interface Vec3l extends Vecl | ||||
| 	public Vec3l setX(long x); | ||||
| 	public Vec3l setY(long y); | ||||
| 	public Vec3l setZ(long z); | ||||
| 	@Override | ||||
| 	public default long[] asArray(){return new long[]{getX(), getY(), getZ()};} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default long[] asArray() { return new long[] {getX(), getY(), getZ()}; } | ||||
| 	@Override | ||||
| 	public Vec3l copy(); | ||||
| 	@Override | ||||
| 	public default Vec3l abs(){return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()));} | ||||
| 	public default Vec3l abs() { return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ())); } | ||||
| 	@Override | ||||
| 	public default Vec3l negate(){return set(0L, 0L, 0L);} | ||||
| 	public default Vec3l negate() { return set(0L, 0L, 0L); } | ||||
| 	@Override | ||||
| 	public default Vec3l invert(){return set(-getX(), -getY(), -getZ());} | ||||
| 	public default Vec3l invert() { return set(-getX(), -getY(), -getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3l add(long value){return add(value, value, value);}	 | ||||
| 	public default Vec3l add(Vec3l value){return add(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3l add(long x, long y, long z){return set(getX() + x, getY() + y, getZ() + z);} | ||||
| 
 | ||||
| 	public default Vec3l add(long value) { return add(value, value, value); } | ||||
| 	public default Vec3l add(Vec3l value) { return add(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3l add(long x, long y, long z) { return set(getX() + x, getY() + y, getZ() + z); } | ||||
| 	@Override | ||||
| 	public default Vec3l sub(long value){return sub(value, value, value);} | ||||
| 	public default Vec3l sub(Vec3l value){return sub(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3l sub(long x, long y, long z){return set(getX() - x, getY() - y, getZ() - z);} | ||||
| 	 | ||||
| 	public default Vec3l sub(long value) { return sub(value, value, value); } | ||||
| 	public default Vec3l sub(Vec3l value) { return sub(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3l sub(long x, long y, long z) { return set(getX() - x, getY() - y, getZ() - z); } | ||||
| 	@Override | ||||
| 	public default Vec3l multiply(long value){return multiply(value, value, value);} | ||||
| 	public default Vec3l multiply(Vec3l value){return multiply(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3l multiply(long x, long y, long z){return set(getX() * x, getY() * y, getZ() * z);} | ||||
| 
 | ||||
| 	public default Vec3l multiply(long value) { return multiply(value, value, value); } | ||||
| 	public default Vec3l multiply(Vec3l value) { return multiply(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3l multiply(long x, long y, long z) { return set(getX() * x, getY() * y, getZ() * z); } | ||||
| 	@Override | ||||
| 	public default Vec3l devide(long value){return devide(value, value, value);} | ||||
| 	public default Vec3l devide(Vec3l value){return devide(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3l devide(long x, long y, long z){return set(getX() / x, getY() / y, getZ() / z);} | ||||
| 	 | ||||
| 	public default Vec3l devide(long value) { return devide(value, value, value); } | ||||
| 	public default Vec3l devide(Vec3l value) { return devide(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3l devide(long x, long y, long z) { return set(getX() / x, getY() / y, getZ() / z); } | ||||
| 	@Override | ||||
| 	public default Vec3l set(long value){return set(value, value, value);} | ||||
| 	public default Vec3l set(Vec3l value){return set(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3l set(long value) { return set(value, value, value); } | ||||
| 	public default Vec3l set(Vec3l value) { return set(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public Vec3l set(long x, long y, long z); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec3l value){return distanceTo(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double distanceTo(long x, long y, long z){return Math.sqrt(distanceToSquared(x, y, z));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec3l value){return distanceToSquared(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default long distanceToSquared(long x, long y, long z) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec3l value) { return distanceTo(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default double distanceTo(long x, long y, long z) { return Math.sqrt(distanceToSquared(x, y, z)); } | ||||
| 	public default long distanceToSquared(Vec3l value) { return distanceToSquared(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default long distanceToSquared(long x, long y, long z) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		long zPos = getZ() - z; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos); | ||||
| 	} | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ());} | ||||
| 	 | ||||
| 	public default long dotProduct(Vec3l value){return dotProduct(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default long dotProduct(long x, long y, long z){return (getX() * x) + (getY() * y) + (getZ() * z);} | ||||
| 	 | ||||
| 	public default Vec3l min(Vec3l other) {return min(other, this);} | ||||
| 	public default Vec3l min(Vec3l other, Vec3l result){return min(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3l min(long x, long y, long z) {return min(x, y, z, this);} | ||||
| 	public default Vec3l min(long x, long y, long z, Vec3l result){return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec3l max(Vec3l other) {return max(other, this);} | ||||
| 	public default Vec3l max(Vec3l other, Vec3l result){return max(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3l max(long x, long y, long z) {return max(x, y, z, this);} | ||||
| 	public default Vec3l max(long x, long y, long z, Vec3l result){return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec3l difference(Vec3l other) {return difference(other, this);} | ||||
| 	public default Vec3l difference(Vec3l other, Vec3l result){return difference(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3l difference(long x, long y, long z) {return difference(x, y, z, this);} | ||||
| 	public default Vec3l difference(long x, long y, long z, Vec3l result){return result.set(getX() - x, getY() - y, getZ() - z);} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3l clamp(long min, long max){return clamp(min, max, ALL);} | ||||
| 	public default Vec3l clamp(long min, long max, Vec3l result){return clamp(min, max, result, ALL);} | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()); } | ||||
| 	public default long dotProduct(Vec3l value) { return dotProduct(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default long dotProduct(long x, long y, long z) { return (getX() * x) + (getY() * y) + (getZ() * z); } | ||||
| 	public default Vec3l min(Vec3l other) { return min(other, this); } | ||||
| 	public default Vec3l min(Vec3l other, Vec3l result) { return min(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3l min(long x, long y, long z) { return min(x, y, z, this); } | ||||
| 	public default Vec3l min(long x, long y, long z, Vec3l result) { return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z)); } | ||||
| 	public default Vec3l max(Vec3l other) { return max(other, this); } | ||||
| 	public default Vec3l max(Vec3l other, Vec3l result) { return max(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3l max(long x, long y, long z) { return max(x, y, z, this); } | ||||
| 	public default Vec3l max(long x, long y, long z, Vec3l result) { return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z)); } | ||||
| 	public default Vec3l difference(Vec3l other) { return difference(other, this); } | ||||
| 	public default Vec3l difference(Vec3l other, Vec3l result) { return difference(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3l difference(long x, long y, long z) { return difference(x, y, z, this); } | ||||
| 	public default Vec3l difference(long x, long y, long z, Vec3l result) { return result.set(getX() - x, getY() - y, getZ() - z); } | ||||
| 	@Override | ||||
| 	public default Vec3l clamp(long min, long max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec3l clamp(long min, long max, Vec3l result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()));} | ||||
| 	public default Vec3l clamp(long min, long max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec3l clamp(long min, long max, Vec3l result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec3l clamp(long min, long max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec3l clamp(long min, long max, Vec3l result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3l store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3l store(ByteBuffer buffer) { | ||||
| 		buffer.putLong(getX()).putLong(getY()).putLong(getZ()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3l load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getLong(), buffer.getLong(), buffer.getLong()); | ||||
| 	} | ||||
| 	public default Vec3l load(ByteBuffer buffer) { return set(buffer.getLong(), buffer.getLong(), buffer.getLong()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3l store(LongBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3l store(LongBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3l load(LongBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3l load(LongBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec3b asByte(){return isMutable() ? Vec3b.mutable((byte)getX(), (byte)getY(), (byte)getZ()) : Vec3b.of((byte)getX(), (byte)getY(), (byte)getZ());} | ||||
| 	public default Vec3b asByte() { return isMutable() ? Vec3b.mutable((byte)getX(), (byte)getY(), (byte)getZ()) : Vec3b.of((byte)getX(), (byte)getY(), (byte)getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3s asShort(){return isMutable() ? Vec3s.mutable((short)getX(), (short)getY(), (short)getZ()) : Vec3s.of((short)getX(), (short)getY(), (short)getZ());} | ||||
| 	public default Vec3s asShort() { return isMutable() ? Vec3s.mutable((short)getX(), (short)getY(), (short)getZ()) : Vec3s.of((short)getX(), (short)getY(), (short)getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3i asInt(){return isMutable() ? Vec3i.mutable((int)getX(), (int)getY(), (int)getZ()) : Vec3i.of((int)getX(), (int)getY(), (int)getZ());} | ||||
| 	public default Vec3i asInt() { return isMutable() ? Vec3i.mutable((int)getX(), (int)getY(), (int)getZ()) : Vec3i.of((int)getX(), (int)getY(), (int)getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3f asFloat() {return isMutable() ? Vec3f.mutable(getX(), getY(), getZ()) : Vec3f.of(getX(), getY(), getZ());} | ||||
| 	public default Vec3f asFloat() { return isMutable() ? Vec3f.mutable(getX(), getY(), getZ()) : Vec3f.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3d asDouble(){return isMutable() ? Vec3d.mutable(getX(), getY(), getZ()) : Vec3d.of(getX(), getY(), getZ());} | ||||
| 	 | ||||
| 	public default Vec3d asDouble() { return isMutable() ? Vec3d.mutable(getX(), getY(), getZ()) : Vec3d.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3l asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec3l asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec3l asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec3l asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec3l copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec3l copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec3l copyAsImmutable(){return of(this);} | ||||
| 	public default Vec3l copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,98 +2,53 @@ package speiger.src.coreengine.math.vector.longs; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3lImmutable implements Vec3l | ||||
| { | ||||
| public class Vec3lImmutable implements Vec3l { | ||||
| 	final long x; | ||||
| 	final long y; | ||||
| 	final long z; | ||||
| 	 | ||||
| 	public Vec3lImmutable() | ||||
| 	{ | ||||
| 	public Vec3lImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3lImmutable(long value) | ||||
| 	{ | ||||
| 	public Vec3lImmutable(long value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3lImmutable(long x, long y, long z) | ||||
| 	{ | ||||
| 	public Vec3lImmutable(long x, long y, long z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public long getX() { return x; } | ||||
| 	@Override | ||||
| 	public long getY() { return y; } | ||||
| 	@Override | ||||
| 	public long getZ() { return z; } | ||||
| 	@Override | ||||
| 	public Vec3l setX(long x) { return this.x == x ? this : Vec3l.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3l setY(long y) { return this.y == y ? this : Vec3l.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3l setZ(long z) { return this.z == z ? this : Vec3l.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3l copy() { return Vec3l.of(this); } | ||||
| 	@Override | ||||
| 	public Vec3l set(long x, long y, long z) { return this.x == x && this.y == y && this.z == z ? this : Vec3l.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3l setX(long x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec3l.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3l setY(long y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec3l.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3l setZ(long z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec3l.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3l copy() | ||||
| 	{ | ||||
| 		return Vec3l.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3l set(long x, long y, long z) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z ? this : Vec3l.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3l) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3l) { | ||||
| 			Vec3l vec = (Vec3l)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -101,8 +56,5 @@ public class Vec3lImmutable implements Vec3l | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3l[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3l[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,84 +2,57 @@ package speiger.src.coreengine.math.vector.longs; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3lMutable implements Vec3l | ||||
| { | ||||
| public class Vec3lMutable implements Vec3l { | ||||
| 	long x; | ||||
| 	long y; | ||||
| 	long z; | ||||
| 	 | ||||
| 	public Vec3lMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec3lMutable() {} | ||||
| 	 | ||||
| 	public Vec3lMutable(long value) | ||||
| 	{ | ||||
| 	public Vec3lMutable(long value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3lMutable(long x, long y, long z) | ||||
| 	{ | ||||
| 	public Vec3lMutable(long x, long y, long z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public long getX() { return x; } | ||||
| 	@Override | ||||
| 	public long getY() { return y; } | ||||
| 	@Override | ||||
| 	public long getZ() { return z; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3l setX(long x) | ||||
| 	{ | ||||
| 	public Vec3l setX(long x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3l setY(long y) | ||||
| 	{ | ||||
| 	public Vec3l setY(long y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3l setZ(long z) | ||||
| 	{ | ||||
| 	public Vec3l setZ(long z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3l copy() | ||||
| 	{ | ||||
| 		return Vec3l.mutable(this); | ||||
| 	} | ||||
| 	public Vec3l copy() { return Vec3l.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3l set(long x, long y, long z) | ||||
| 	{ | ||||
| 	public Vec3l set(long x, long y, long z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -87,16 +60,11 @@ public class Vec3lMutable implements Vec3l | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3l) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3l) { | ||||
| 			Vec3l vec = (Vec3l)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -104,8 +72,5 @@ public class Vec3lMutable implements Vec3l | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3l[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3l[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -10,21 +10,19 @@ import speiger.src.coreengine.math.vector.floats.Vec4f; | ||||
| import speiger.src.coreengine.math.vector.ints.Vec4i; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vec4s; | ||||
| 
 | ||||
| public interface Vec4l extends Vecl | ||||
| { | ||||
| public interface Vec4l extends Vecl { | ||||
| 	public static final Vec4l ZERO = of(); | ||||
| 	public static final Vec4l MINUS_ONE = of(-1L); | ||||
| 	public static final Vec4l ONE = of(1L); | ||||
| 	 | ||||
| 	public static Vec4l mutable(){return new Vec4lMutable();} | ||||
| 	public static Vec4l mutable(long value){return new Vec4lMutable(value);} | ||||
| 	public static Vec4l mutable(long x, long y, long z, long w){return new Vec4lMutable(x, y, z, w);} | ||||
| 	public static Vec4l mutable(Vec4l vec){return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	 | ||||
| 	public static Vec4l of(){return new Vec4lImmutable();} | ||||
| 	public static Vec4l of(long value){return new Vec4lImmutable(value);} | ||||
| 	public static Vec4l of(long x, long y, long z, long w){return new Vec4lImmutable(x, y, z, w);} | ||||
| 	public static Vec4l of(Vec4l vec){return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	public static Vec4l mutable() { return new Vec4lMutable(); } | ||||
| 	public static Vec4l mutable(long value) { return new Vec4lMutable(value); } | ||||
| 	public static Vec4l mutable(long x, long y, long z, long w) { return new Vec4lMutable(x, y, z, w); } | ||||
| 	public static Vec4l mutable(Vec4l vec) { return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	public static Vec4l of() { return new Vec4lImmutable(); } | ||||
| 	public static Vec4l of(long value) { return new Vec4lImmutable(value); } | ||||
| 	public static Vec4l of(long x, long y, long z, long w) { return new Vec4lImmutable(x, y, z, w); } | ||||
| 	public static Vec4l of(Vec4l vec) { return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	 | ||||
| 	public long getX(); | ||||
| 	public long getY(); | ||||
| @ -34,125 +32,104 @@ public interface Vec4l extends Vecl | ||||
| 	public Vec4l setY(long y); | ||||
| 	public Vec4l setZ(long z); | ||||
| 	public Vec4l setW(long w); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default long[] asArray(){return new long[]{getX(), getY(), getZ(), getW()};} | ||||
| 	public default long[] asArray() { return new long[] {getX(), getY(), getZ(), getW()}; } | ||||
| 	@Override | ||||
| 	public Vec4l copy(); | ||||
| 	@Override | ||||
| 	public default Vec4l abs(){return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()), Math.abs(getW()));} | ||||
| 	public default Vec4l abs() { return set(Math.abs(getX()), Math.abs(getY()), Math.abs(getZ()), Math.abs(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4l negate(){return set(0L, 0L, 0L, 0L);} | ||||
| 	public default Vec4l negate() { return set(0L, 0L, 0L, 0L); } | ||||
| 	@Override | ||||
| 	public default Vec4l invert(){return set(-getX(), -getY(), -getZ(), -getW());} | ||||
| 	 | ||||
| 	public default Vec4l invert() { return set(-getX(), -getY(), -getZ(), -getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4l add(long value){return add(value, value, value, value);}	 | ||||
| 	public default Vec4l add(Vec4l value){return add(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4l add(long x, long y, long z, long w){return set(getX() + x, getY() + y, getZ() + z, getW() + w);} | ||||
| 
 | ||||
| 	public default Vec4l add(long value) { return add(value, value, value, value); } | ||||
| 	public default Vec4l add(Vec4l value) { return add(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4l add(long x, long y, long z, long w) { return set(getX() + x, getY() + y, getZ() + z, getW() + w); } | ||||
| 	@Override | ||||
| 	public default Vec4l sub(long value){return sub(value, value, value, value);} | ||||
| 	public default Vec4l sub(Vec4l value){return sub(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4l sub(long x, long y, long z, long w){return set(getX() - x, getY() - y, getZ() - z, getW() - w);} | ||||
| 	 | ||||
| 	public default Vec4l sub(long value) { return sub(value, value, value, value); } | ||||
| 	public default Vec4l sub(Vec4l value) { return sub(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4l sub(long x, long y, long z, long w) { return set(getX() - x, getY() - y, getZ() - z, getW() - w); } | ||||
| 	@Override | ||||
| 	public default Vec4l multiply(long value){return multiply(value, value, value, value);} | ||||
| 	public default Vec4l multiply(Vec4l value){return multiply(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4l multiply(long x, long y, long z, long w){return set(getX() * x, getY() * y, getZ() * z, getW() * w);} | ||||
| 	 | ||||
| 	public default Vec4l multiply(long value) { return multiply(value, value, value, value); } | ||||
| 	public default Vec4l multiply(Vec4l value) { return multiply(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4l multiply(long x, long y, long z, long w) { return set(getX() * x, getY() * y, getZ() * z, getW() * w); } | ||||
| 	@Override | ||||
| 	public default Vec4l devide(long value){return devide(value, value, value, value);} | ||||
| 	public default Vec4l devide(Vec4l value){return devide(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4l devide(long x, long y, long z, long w){return set(getX() / x, getY() / y, getZ() / z, getW() / w);} | ||||
| 	 | ||||
| 	public default Vec4l devide(long value) { return devide(value, value, value, value); } | ||||
| 	public default Vec4l devide(Vec4l value) { return devide(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4l devide(long x, long y, long z, long w) { return set(getX() / x, getY() / y, getZ() / z, getW() / w); } | ||||
| 	@Override | ||||
| 	public default Vec4l set(long value){return set(value, value, value, value);} | ||||
| 	public default Vec4l set(Vec4l value){return set(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4l set(long value) { return set(value, value, value, value); } | ||||
| 	public default Vec4l set(Vec4l value) { return set(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public Vec4l set(long x, long y, long z, long w); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec4l value){return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double distanceTo(long x, long y, long z, long w){return Math.sqrt(distanceTo(x, y, z, w));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec4l value){return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default long distanceToSquared(long x, long y, long z, long w) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec4l value) { return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double distanceTo(long x, long y, long z, long w) { return Math.sqrt(distanceTo(x, y, z, w)); } | ||||
| 	public default long distanceToSquared(Vec4l value) { return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default long distanceToSquared(long x, long y, long z, long w) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		long zPos = getZ() - z; | ||||
| 		long wPos = getW() - w; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos) + (wPos * wPos); | ||||
| 	} | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW());} | ||||
| 
 | ||||
| 	public default long dotProduct(Vec4l value){return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default long dotProduct(long x, long y, long z, long w){return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w);}; | ||||
| 	 | ||||
| 	public default Vec4l min(Vec4l other) {return min(other, this);} | ||||
| 	public default Vec4l min(Vec4l other, Vec4l result){return min(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4l min(long x, long y, long z, long w) {return min(x, y, z, w, this);} | ||||
| 	public default Vec4l min(long x, long y, long z, long w, Vec4l result){return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z), Math.min(getW(), w));} | ||||
| 	 | ||||
| 	public default Vec4l max(Vec4l other) {return max(other, this);} | ||||
| 	public default Vec4l max(Vec4l other, Vec4l result){return max(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4l max(long x, long y, long z, long w) {return max(x, y, z, w, this);} | ||||
| 	public default Vec4l max(long x, long y, long z, long w, Vec4l result){return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z), Math.max(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec4l difference(Vec4l other) {return difference(other, this);} | ||||
| 	public default Vec4l difference(Vec4l other, Vec4l result){return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4l difference(long x, long y, long z, long w) {return difference(x, y, z, w, this);} | ||||
| 	public default Vec4l difference(long x, long y, long z, long w, Vec4l result){return result.set(getX() - x, getY() - y, getZ() - z, getW() - w);} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4l clamp(long min, long max){return clamp(min, max, ALL);} | ||||
| 	public default Vec4l clamp(long min, long max, Vec4l result){return clamp(min, max, result, ALL);} | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW()); } | ||||
| 	public default long dotProduct(Vec4l value) { return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default long dotProduct(long x, long y, long z, long w) { return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w); }; | ||||
| 	public default Vec4l min(Vec4l other) { return min(other, this); } | ||||
| 	public default Vec4l min(Vec4l other, Vec4l result) { return min(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4l min(long x, long y, long z, long w) { return min(x, y, z, w, this); } | ||||
| 	public default Vec4l min(long x, long y, long z, long w, Vec4l result) { return result.set(Math.min(getX(), x), Math.min(getY(), y), Math.min(getZ(), z), Math.min(getW(), w)); } | ||||
| 	public default Vec4l max(Vec4l other) { return max(other, this); } | ||||
| 	public default Vec4l max(Vec4l other, Vec4l result) { return max(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4l max(long x, long y, long z, long w) { return max(x, y, z, w, this); } | ||||
| 	public default Vec4l max(long x, long y, long z, long w, Vec4l result) { return result.set(Math.max(getX(), x), Math.max(getY(), y), Math.max(getZ(), z), Math.max(getZ(), z)); } | ||||
| 	public default Vec4l difference(Vec4l other) { return difference(other, this); } | ||||
| 	public default Vec4l difference(Vec4l other, Vec4l result) { return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4l difference(long x, long y, long z, long w) { return difference(x, y, z, w, this); } | ||||
| 	public default Vec4l difference(long x, long y, long z, long w, Vec4l result) { return result.set(getX() - x, getY() - y, getZ() - z, getW() - w); } | ||||
| 	@Override | ||||
| 	public default Vec4l clamp(long min, long max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec4l clamp(long min, long max, Vec4l result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW()));} | ||||
| 	public default Vec4l clamp(long min, long max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec4l clamp(long min, long max, Vec4l result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec4l clamp(long min, long max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec4l clamp(long min, long max, Vec4l result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4l store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec4l store(ByteBuffer buffer) { | ||||
| 		buffer.putLong(getX()).putLong(getY()).putLong(getZ()).putLong(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4l load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getLong(), buffer.getLong(), buffer.getLong(), buffer.getLong()); | ||||
| 	} | ||||
| 	public default Vec4l load(ByteBuffer buffer) { return set(buffer.getLong(), buffer.getLong(), buffer.getLong(), buffer.getLong()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4l store(LongBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec4l store(LongBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()).put(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4l load(LongBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec4l load(LongBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec4b asByte(){return isMutable() ? Vec4b.mutable((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW()) : Vec4b.of((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW());} | ||||
| 	public default Vec4b asByte() { return isMutable() ? Vec4b.mutable((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW()) : Vec4b.of((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4s asShort(){return isMutable() ? Vec4s.mutable((short)getX(), (short)getY(), (short)getZ(), (short)getW()) : Vec4s.of((short)getX(), (short)getY(), (short)getZ(), (short)getW());} | ||||
| 	public default Vec4s asShort() { return isMutable() ? Vec4s.mutable((short)getX(), (short)getY(), (short)getZ(), (short)getW()) : Vec4s.of((short)getX(), (short)getY(), (short)getZ(), (short)getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4i asInt(){return isMutable() ? Vec4i.mutable((int)getX(), (int)getY(), (int)getZ(), (int)getW()) : Vec4i.of((int)getX(), (int)getY(), (int)getZ(), (int)getW());} | ||||
| 	public default Vec4i asInt() { return isMutable() ? Vec4i.mutable((int)getX(), (int)getY(), (int)getZ(), (int)getW()) : Vec4i.of((int)getX(), (int)getY(), (int)getZ(), (int)getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4f asFloat() {return isMutable() ? Vec4f.mutable(getX(), getY(), getZ(), getW()) : Vec4f.of(getX(), getY(), getZ(), getW());} | ||||
| 	public default Vec4f asFloat() { return isMutable() ? Vec4f.mutable(getX(), getY(), getZ(), getW()) : Vec4f.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4d asDouble(){return isMutable() ? Vec4d.mutable(getX(), getY(), getZ(), getW()) : Vec4d.of(getX(), getY(), getZ(), getW());} | ||||
| 	 | ||||
| 	public default Vec4d asDouble() { return isMutable() ? Vec4d.mutable(getX(), getY(), getZ(), getW()) : Vec4d.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4l asMutable(){return isMutable() ? this : mutable(this);} | ||||
| 	public default Vec4l asMutable() { return isMutable() ? this : mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec4l asImmutable(){return isMutable() ? of(this) : this;} | ||||
| 	public default Vec4l asImmutable() { return isMutable() ? of(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec4l copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec4l copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec4l copyAsImmutable(){return of(this);} | ||||
| 	public default Vec4l copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,31 +2,27 @@ package speiger.src.coreengine.math.vector.longs; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4lImmutable implements Vec4l | ||||
| { | ||||
| public class Vec4lImmutable implements Vec4l { | ||||
| 	final long x; | ||||
| 	final long y; | ||||
| 	final long z; | ||||
| 	final long w; | ||||
| 	 | ||||
| 	public Vec4lImmutable() | ||||
| 	{ | ||||
| 	public Vec4lImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 		w = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4lImmutable(long value) | ||||
| 	{ | ||||
| 	public Vec4lImmutable(long value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4lImmutable(long x, long y, long z, long w) | ||||
| 	{ | ||||
| 	public Vec4lImmutable(long x, long y, long z, long w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -34,82 +30,33 @@ public class Vec4lImmutable implements Vec4l | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public long getX() { return x; } | ||||
| 	@Override | ||||
| 	public long getY() { return y; } | ||||
| 	@Override | ||||
| 	public long getZ() { return z; } | ||||
| 	@Override | ||||
| 	public long getW() { return w; } | ||||
| 	@Override | ||||
| 	public Vec4l setX(long x) { return this.x == x ? this : Vec4l.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4l setY(long y) { return this.y == y ? this : Vec4l.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4l setZ(long z) { return this.z == z ? this : Vec4l.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4l setW(long w) { return this.w == w ? this : Vec4l.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4l copy() { return Vec4l.of(this); } | ||||
| 	@Override | ||||
| 	public Vec4l set(long x, long y, long z, long w) { return this.x == x && this.y == y && this.z == z && this.w == w ? this : Vec4l.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l setX(long x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec4l.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l setY(long y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec4l.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l setZ(long z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec4l.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l setW(long w) | ||||
| 	{ | ||||
| 		return this.w == w ? this : Vec4l.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l copy() | ||||
| 	{ | ||||
| 		return Vec4l.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l set(long x, long y, long z, long w) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z && this.w == w ? this : Vec4l.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4l) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4l) { | ||||
| 			Vec4l vec = (Vec4l)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -117,8 +64,5 @@ public class Vec4lImmutable implements Vec4l | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4l[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4l[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,27 +2,22 @@ package speiger.src.coreengine.math.vector.longs; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4lMutable implements Vec4l | ||||
| { | ||||
| public class Vec4lMutable implements Vec4l { | ||||
| 	long x; | ||||
| 	long y; | ||||
| 	long z; | ||||
| 	long w; | ||||
| 	 | ||||
| 	public Vec4lMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec4lMutable() {} | ||||
| 	 | ||||
| 	public Vec4lMutable(long value) | ||||
| 	{ | ||||
| 	public Vec4lMutable(long value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4lMutable(long x, long y, long z, long w) | ||||
| 	{ | ||||
| 	public Vec4lMutable(long x, long y, long z, long w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -30,72 +25,45 @@ public class Vec4lMutable implements Vec4l | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public long getX() { return x; } | ||||
| 	@Override | ||||
| 	public long getY() { return y; } | ||||
| 	@Override | ||||
| 	public long getZ() { return z; } | ||||
| 	@Override | ||||
| 	public long getW() { return w; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public long getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l setX(long x) | ||||
| 	{ | ||||
| 	public Vec4l setX(long x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l setY(long y) | ||||
| 	{ | ||||
| 	public Vec4l setY(long y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l setZ(long z) | ||||
| 	{ | ||||
| 	public Vec4l setZ(long z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l setW(long w) | ||||
| 	{ | ||||
| 	public Vec4l setW(long w) { | ||||
| 		this.w = w; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l copy() | ||||
| 	{ | ||||
| 		return Vec4l.mutable(this); | ||||
| 	} | ||||
| 	public Vec4l copy() { return Vec4l.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4l set(long x, long y, long z, long w) | ||||
| 	{ | ||||
| 	public Vec4l set(long x, long y, long z, long w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -104,16 +72,11 @@ public class Vec4lMutable implements Vec4l | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4l) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4l) { | ||||
| 			Vec4l vec = (Vec4l)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -121,8 +84,5 @@ public class Vec4lMutable implements Vec4l | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4l[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4l[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -9,8 +9,7 @@ import speiger.src.coreengine.math.vector.floats.Vecf; | ||||
| import speiger.src.coreengine.math.vector.ints.Veci; | ||||
| import speiger.src.coreengine.math.vector.shorts.Vecs; | ||||
| 
 | ||||
| public interface Vecl extends Vec | ||||
| { | ||||
| public interface Vecl extends Vec { | ||||
| 	public Vecl set(long value); | ||||
| 	public Vecl add(long value); | ||||
| 	public Vecl sub(long value); | ||||
| @ -18,14 +17,11 @@ public interface Vecl extends Vec | ||||
| 	public Vecl devide(long value); | ||||
| 	public Vecl clamp(long min, long max); | ||||
| 	public Vecl clamp(long min, long max, int filter); | ||||
| 	 | ||||
| 	public long lengthSquared(); | ||||
| 	public default double length(){return Math.sqrt(lengthSquared());} | ||||
| 	 | ||||
| 	public default double length() { return Math.sqrt(lengthSquared()); } | ||||
| 	public Vecl store(LongBuffer buffer); | ||||
| 	public Vecl load(LongBuffer buffer); | ||||
| 	public long[] asArray(); | ||||
| 	 | ||||
| 	public Vecb asByte(); | ||||
| 	public Vecs asShort(); | ||||
| 	public Veci asInt(); | ||||
|  | ||||
| @ -5,80 +5,55 @@ import java.nio.FloatBuffer; | ||||
| import java.util.Arrays; | ||||
| 
 | ||||
| import speiger.src.coreengine.math.MathUtils; | ||||
| import speiger.src.coreengine.math.vector.VectorUtil; | ||||
| import speiger.src.coreengine.math.vector.floats.Vec2f; | ||||
| import speiger.src.coreengine.math.vector.floats.Vec3f; | ||||
| import speiger.src.coreengine.math.vector.floats.Vec4f; | ||||
| import speiger.src.coreengine.math.vector.quaternion.Quaternion; | ||||
| 
 | ||||
| public class Matrix4f | ||||
| { | ||||
| public class Matrix4f { | ||||
| 	static final Vec3f X_ROTATION = Vec3f.of(1F, 0F, 0F); | ||||
| 	static final Vec3f Y_ROTATION = Vec3f.of(0F, 1F, 0F); | ||||
| 	static final Vec3f Z_ROTATION = Vec3f.of(0F, 0F, 1F); | ||||
| 	 | ||||
| 	float[] data = new float[16]; | ||||
| 	 | ||||
| 	public Matrix4f() | ||||
| 	{ | ||||
| 		setIdentity(); | ||||
| 	} | ||||
| 	public Matrix4f() { setIdentity(); } | ||||
| 	 | ||||
| 	public Matrix4f(float[] data) | ||||
| 	{ | ||||
| 		System.arraycopy(data, 0, this.data, 0, 16); | ||||
| 	} | ||||
| 	public Matrix4f(float[] data) { System.arraycopy(data, 0, this.data, 0, 16); } | ||||
| 	 | ||||
| 	public Matrix4f(Matrix4f other) | ||||
| 	{ | ||||
| 		this(other.data); | ||||
| 	} | ||||
| 	public Matrix4f(Matrix4f other) { this(other.data); } | ||||
| 	 | ||||
| 	public Matrix4f store(FloatBuffer buffer) | ||||
| 	{ | ||||
| 	public Matrix4f store(FloatBuffer buffer) { | ||||
| 		buffer.put(data); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		for(int i = 0;i < 16;i++) | ||||
| 		{ | ||||
| 			buffer.putFloat(data[i]); | ||||
| 		} | ||||
| 	public Matrix4f store(ByteBuffer buffer) { | ||||
| 		for(int i = 0;i < 16;i++) { buffer.putFloat(data[i]); } | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f store(Matrix4f other) | ||||
| 	{ | ||||
| 	public Matrix4f store(Matrix4f other) { | ||||
| 		System.arraycopy(data, 0, other.data, 0, 16); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f load(FloatBuffer buffer) | ||||
| 	{ | ||||
| 	public Matrix4f load(FloatBuffer buffer) { | ||||
| 		buffer.get(data); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		for(int i = 0;i < 16;i++) | ||||
| 		{ | ||||
| 			data[i] = buffer.getFloat(); | ||||
| 		} | ||||
| 	public Matrix4f load(ByteBuffer buffer) { | ||||
| 		for(int i = 0;i < 16;i++) { data[i] = buffer.getFloat(); } | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f load(Matrix4f other) | ||||
| 	{ | ||||
| 	public Matrix4f load(Matrix4f other) { | ||||
| 		System.arraycopy(other.data, 0, data, 0, 16); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 	public String toString() { | ||||
| 		StringBuilder buf = new StringBuilder().append("\n"); | ||||
| 		buf.append("x0=").append(data[0]).append(' ').append("y0=").append(data[4]).append(' ').append("z0=").append(data[8]).append(' ').append("w0=").append(data[12]).append('\n'); | ||||
| 		buf.append("x1=").append(data[1]).append(' ').append("y1=").append(data[5]).append(' ').append("z1=").append(data[9]).append(' ').append("w1=").append(data[13]).append('\n'); | ||||
| @ -88,44 +63,28 @@ public class Matrix4f | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Matrix4f) | ||||
| 		{ | ||||
| 			return Arrays.equals(data, ((Matrix4f)obj).data); | ||||
| 		} | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Matrix4f) { return Arrays.equals(data, ((Matrix4f)obj).data); } | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public float[] getData() | ||||
| 	{ | ||||
| 		return data; | ||||
| 	} | ||||
| 	public float[] getData() { return data; } | ||||
| 	 | ||||
| 	public float get(int index) | ||||
| 	{ | ||||
| 		return data[index]; | ||||
| 	} | ||||
| 	public float get(int index) { return data[index]; } | ||||
| 	 | ||||
| 	public float get(int column, int row) | ||||
| 	{ | ||||
| 		return data[(column * 4) + row]; | ||||
| 	} | ||||
| 	public float get(int column, int row) { return data[(column * 4) + row]; } | ||||
| 	 | ||||
| 	public Matrix4f set(int column, int row, float value) | ||||
| 	{ | ||||
| 	public Matrix4f set(int column, int row, float value) { | ||||
| 		data[(column * 4) + row] = value; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f set(int index, float value) | ||||
| 	{ | ||||
| 	public Matrix4f set(int index, float value) { | ||||
| 		data[index] = value; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setIdentity() | ||||
| 	{ | ||||
| 	public Matrix4f setIdentity() { | ||||
| 		Arrays.fill(data, 0F); | ||||
| 		data[0] = 1F; | ||||
| 		data[5] = 1F; | ||||
| @ -134,11 +93,9 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f invert() | ||||
| 	{ | ||||
| 	public Matrix4f invert() { | ||||
| 		float determinant = determinant(); | ||||
| 		if(determinant != 0F) | ||||
| 		{ | ||||
| 		if(determinant != 0F) { | ||||
| 			float determinant_inv = 1F / determinant; | ||||
| 			float t00 = determinant3x3(data[5], data[6], data[7], data[9], data[10], data[11], data[13], data[14], data[15]); | ||||
| 			float t01 = -determinant3x3(data[4], data[6], data[7], data[8], data[10], data[11], data[12], data[14], data[15]); | ||||
| @ -177,8 +134,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f flip() | ||||
| 	{ | ||||
| 	public Matrix4f flip() { | ||||
| 		data[0] = -data[0]; | ||||
| 		data[1] = -data[1]; | ||||
| 		data[2] = -data[2]; | ||||
| @ -198,14 +154,12 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f negate() | ||||
| 	{ | ||||
| 	public Matrix4f negate() { | ||||
| 		Arrays.fill(data, 0F); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f add(Matrix4f other) | ||||
| 	{ | ||||
| 	public Matrix4f add(Matrix4f other) { | ||||
| 		data[0] += other.data[0]; | ||||
| 		data[1] += other.data[1]; | ||||
| 		data[2] += other.data[2]; | ||||
| @ -225,8 +179,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f sub(Matrix4f other) | ||||
| 	{ | ||||
| 	public Matrix4f sub(Matrix4f other) { | ||||
| 		data[0] -= other.data[0]; | ||||
| 		data[1] -= other.data[1]; | ||||
| 		data[2] -= other.data[2]; | ||||
| @ -246,8 +199,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f multiply(Matrix4f other) | ||||
| 	{ | ||||
| 	public Matrix4f multiply(Matrix4f other) { | ||||
| 		float data0 = data[0] * other.data[0] + data[4] * other.data[1] + data[8] * other.data[2] + data[12] * other.data[3]; | ||||
| 		float data1 = data[1] * other.data[0] + data[5] * other.data[1] + data[9] * other.data[2] + data[13] * other.data[3]; | ||||
| 		float data2 = data[2] * other.data[0] + data[6] * other.data[1] + data[10] * other.data[2] + data[14] * other.data[3]; | ||||
| @ -283,8 +235,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f transpose() | ||||
| 	{ | ||||
| 	public Matrix4f transpose() { | ||||
| 		float data0 = data[0]; | ||||
| 		float data1 = data[4]; | ||||
| 		float data2 = data[8]; | ||||
| @ -321,8 +272,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f transpose3x3() | ||||
| 	{ | ||||
| 	public Matrix4f transpose3x3() { | ||||
| 		float nm00 = data[0]; | ||||
| 		float nm01 = data[4]; | ||||
| 		float nm02 = data[8]; | ||||
| @ -344,29 +294,23 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f decompose(Vec3f position, Quaternion rotation, Vec3f scale) | ||||
| 	{ | ||||
| 	public Matrix4f decompose(Vec3f position, Quaternion rotation, Vec3f scale) { | ||||
| 		position.set(get(3, 0), get(3, 1), get(3, 2)); | ||||
| 		rotation.set(this); | ||||
| 		scale.set(get(0, 0), get(1, 1), get(2, 2)); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setTranslation(Vec3f vec) | ||||
| 	{ | ||||
| 	public Matrix4f setTranslation(Vec3f vec) { | ||||
| 		data[12] = vec.getX(); | ||||
| 		data[13] = vec.getY(); | ||||
| 		data[14] = vec.getZ(); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f translate(Vec2f vec) | ||||
| 	{ | ||||
| 		return translate(vec.getX(), vec.getY()); | ||||
| 	} | ||||
| 	public Matrix4f translate(Vec2f vec) { return translate(vec.getX(), vec.getY()); } | ||||
| 	 | ||||
| 	public Matrix4f translate(float x, float y) | ||||
| 	{ | ||||
| 	public Matrix4f translate(float x, float y) { | ||||
| 		data[12] += data[0] * x + data[4] * y; | ||||
| 		data[13] += data[1] * x + data[5] * y; | ||||
| 		data[14] += data[2] * x + data[6] * y; | ||||
| @ -374,8 +318,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f translate(Vec3f vec) | ||||
| 	{ | ||||
| 	public Matrix4f translate(Vec3f vec) { | ||||
| 		data[12] += data[0] * vec.getX() + data[4] * vec.getY() + data[8] * vec.getZ(); | ||||
| 		data[13] += data[1] * vec.getX() + data[5] * vec.getY() + data[9] * vec.getZ(); | ||||
| 		data[14] += data[2] * vec.getX() + data[6] * vec.getY() + data[10] * vec.getZ(); | ||||
| @ -383,8 +326,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f translate(float x, float y, float z) | ||||
| 	{ | ||||
| 	public Matrix4f translate(float x, float y, float z) { | ||||
| 		data[12] += data[0] * x + data[4] * y + data[8] * z; | ||||
| 		data[13] += data[1] * x + data[5] * y + data[9] * z; | ||||
| 		data[14] += data[2] * x + data[6] * y + data[10] * z; | ||||
| @ -392,38 +334,19 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f rotateX(float angle) | ||||
| 	{ | ||||
| 		return rotate((float)Math.toRadians(angle), X_ROTATION); | ||||
| 	} | ||||
| 	public Matrix4f rotateX(float angle) { return rotate((float)Math.toRadians(angle), X_ROTATION); } | ||||
| 	 | ||||
| 	public Matrix4f rotateY(float angle) | ||||
| 	{ | ||||
| 		return rotate((float)Math.toRadians(angle), Y_ROTATION); | ||||
| 	} | ||||
| 	public Matrix4f rotateY(float angle) { return rotate((float)Math.toRadians(angle), Y_ROTATION); } | ||||
| 	 | ||||
| 	public Matrix4f rotateZ(float angle) | ||||
| 	{ | ||||
| 		return rotate((float)Math.toRadians(angle), Z_ROTATION); | ||||
| 	} | ||||
| 	public Matrix4f rotateZ(float angle) { return rotate((float)Math.toRadians(angle), Z_ROTATION); } | ||||
| 	 | ||||
| 	public Matrix4f rotateRadX(float angle) | ||||
| 	{ | ||||
| 		return rotate(angle, X_ROTATION); | ||||
| 	} | ||||
| 	public Matrix4f rotateRadX(float angle) { return rotate(angle, X_ROTATION); } | ||||
| 	 | ||||
| 	public Matrix4f rotateRadY(float angle) | ||||
| 	{ | ||||
| 		return rotate(angle, Y_ROTATION); | ||||
| 	} | ||||
| 	public Matrix4f rotateRadY(float angle) { return rotate(angle, Y_ROTATION); } | ||||
| 	 | ||||
| 	public Matrix4f rotateRadZ(float angle) | ||||
| 	{ | ||||
| 		return rotate(angle, Z_ROTATION); | ||||
| 	} | ||||
| 	public Matrix4f rotateRadZ(float angle) { return rotate(angle, Z_ROTATION); } | ||||
| 	 | ||||
| 	public Matrix4f rotate(float angle, Vec3f axis) | ||||
| 	{ | ||||
| 	public Matrix4f rotate(float angle, Vec3f axis) { | ||||
| 		float c = MathUtils.cos(angle); | ||||
| 		float s = MathUtils.sin(angle); | ||||
| 		float oneminusc = 1.0f - c; | ||||
| @ -469,8 +392,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f rotate(Quaternion rotation) | ||||
| 	{ | ||||
| 	public Matrix4f rotate(Quaternion rotation) { | ||||
| 		float w2 = rotation.getW() * rotation.getW(); | ||||
| 		float x2 = rotation.getX() * rotation.getX(); | ||||
| 		float y2 = rotation.getY() * rotation.getY(); | ||||
| @ -519,8 +441,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setRotation(Matrix4f source) | ||||
| 	{ | ||||
| 	public Matrix4f setRotation(Matrix4f source) { | ||||
| 		data[0] = source.data[0]; | ||||
| 		data[1] = source.data[1]; | ||||
| 		data[2] = source.data[2]; | ||||
| @ -533,8 +454,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setBillboard(Matrix4f source) | ||||
| 	{ | ||||
| 	public Matrix4f setBillboard(Matrix4f source) { | ||||
| 		data[0] = source.data[0]; | ||||
| 		data[1] = source.data[4]; | ||||
| 		data[2] = source.data[8]; | ||||
| @ -547,18 +467,11 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f scale(Vec3f vec) | ||||
| 	{ | ||||
| 		return scale(vec.getX(), vec.getY(), vec.getZ()); | ||||
| 	} | ||||
| 	public Matrix4f scale(Vec3f vec) { return scale(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	 | ||||
| 	public Matrix4f scale(float value) | ||||
| 	{ | ||||
| 		return scale(value, value, value); | ||||
| 	} | ||||
| 	public Matrix4f scale(float value) { return scale(value, value, value); } | ||||
| 	 | ||||
| 	public Matrix4f scale(float x, float y, float z) | ||||
| 	{ | ||||
| 	public Matrix4f scale(float x, float y, float z) { | ||||
| 		data[0] *= x; | ||||
| 		data[1] *= x; | ||||
| 		data[2] *= x; | ||||
| @ -574,18 +487,11 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f unscale(Vec3f vec) | ||||
| 	{ | ||||
| 		return unscale(vec.getX(), vec.getY(), vec.getZ()); | ||||
| 	} | ||||
| 	public Matrix4f unscale(Vec3f vec) { return unscale(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	 | ||||
| 	public Matrix4f unscale(float scale) | ||||
| 	{ | ||||
| 		return unscale(scale, scale, scale); | ||||
| 	} | ||||
| 	public Matrix4f unscale(float scale) { return unscale(scale, scale, scale); } | ||||
| 	 | ||||
| 	public Matrix4f unscale(float x, float y, float z) | ||||
| 	{ | ||||
| 	public Matrix4f unscale(float x, float y, float z) { | ||||
| 		data[0] /= x; | ||||
| 		data[1] /= x; | ||||
| 		data[2] /= x; | ||||
| @ -601,50 +507,40 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setPerspective(float fovy, float aspect, float zNear, float zFar) | ||||
| 	{ | ||||
| 	public Matrix4f setPerspective(float fovy, float aspect, float zNear, float zFar) { | ||||
| 		float h = (float)Math.tan(fovy * 0.5f); | ||||
| 		set(0, 0, 1F / (h * aspect)).set(1, 1, 1F / h); | ||||
| 		boolean farInf = zFar > 0 && Float.isInfinite(zFar); | ||||
| 		boolean nearInf = zNear > 0 && Float.isInfinite(zNear); | ||||
| 		if(farInf) | ||||
| 		{ | ||||
| 		if(farInf) { | ||||
| 			float e = 1E-6f; | ||||
| 			set(2, 2, e - 1F).set(3, 2, (e - 2F) * zNear); | ||||
| 		} | ||||
| 		else if(nearInf) | ||||
| 		{ | ||||
| 		else if(nearInf) { | ||||
| 			float e = 1E-6f; | ||||
| 			set(2, 2, 1F - e).set(3, 2, (2F - e) * zFar); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 		else { | ||||
| 			set(2, 2, (zFar + zNear) / (zNear - zFar)).set(3, 2, (zFar + zFar) * zNear / (zNear - zFar)); | ||||
| 		} | ||||
| 		return set(2, 3, -1.0f); | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f getTranslation(Vec3f vec) | ||||
| 	{ | ||||
| 	public Matrix4f getTranslation(Vec3f vec) { | ||||
| 		vec.set(data[12], data[13], data[14]); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f getScale(Vec3f vec) | ||||
| 	{ | ||||
| 	public Matrix4f getScale(Vec3f vec) { | ||||
| 		vec.setX((float)Math.sqrt(data[0] * data[0] + data[1] * data[1] + data[2] * data[2])); | ||||
| 		vec.setY((float)Math.sqrt(data[4] * data[4] + data[5] * data[5] + data[6] * data[6])); | ||||
| 		vec.setZ((float)Math.sqrt(data[8] * data[8] + data[9] * data[9] + data[10] * data[10])); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4f transform(Vec4f input) | ||||
| 	{ | ||||
| 		return transform(input, input); | ||||
| 	} | ||||
| 	public Vec4f transform(Vec4f input) { return transform(input, input); } | ||||
| 	 | ||||
| 	public Vec4f transform(Vec4f input, Vec4f output) | ||||
| 	{ | ||||
| 	public Vec4f transform(Vec4f input, Vec4f output) { | ||||
| 		float x = data[0] * input.getX() + data[4] * input.getY() + data[8] * input.getZ() + data[12] * input.getW(); | ||||
| 		float y = data[1] * input.getX() + data[5] * input.getY() + data[9] * input.getZ() + data[13] * input.getW(); | ||||
| 		float z = data[2] * input.getX() + data[6] * input.getY() + data[10] * input.getZ() + data[14] * input.getW(); | ||||
| @ -652,35 +548,28 @@ public class Matrix4f | ||||
| 		return output.set(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	public void transform(Vec4f input, FloatBuffer buffer) | ||||
| 	{ | ||||
| 	public void transform(Vec4f input, FloatBuffer buffer) { | ||||
| 		buffer.put(data[0] * input.getX() + data[4] * input.getY() + data[8] * input.getZ() + data[12] * input.getW()); | ||||
| 		buffer.put(data[1] * input.getX() + data[5] * input.getY() + data[9] * input.getZ() + data[13] * input.getW()); | ||||
| 		buffer.put(data[2] * input.getX() + data[6] * input.getY() + data[10] * input.getZ() + data[14] * input.getW()); | ||||
| 		buffer.put(data[3] * input.getX() + data[7] * input.getY() + data[11] * input.getZ() + data[15] * input.getW()); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3f transform(Vec3f input, boolean position) | ||||
| 	{ | ||||
| 		return transform(input, input, position); | ||||
| 	} | ||||
| 	public Vec3f transform(Vec3f input, boolean position) { return transform(input, input, position); } | ||||
| 	 | ||||
| 	public Vec3f transform(Vec3f input, Vec3f output, boolean position) | ||||
| 	{ | ||||
| 	public Vec3f transform(Vec3f input, Vec3f output, boolean position) { | ||||
| 		float pos = position ? 1F : 0F; | ||||
| 		return output.set(data[0] * input.getX() + data[4] * input.getY() + data[8] * input.getZ() + data[12] * pos, data[1] * input.getX() + data[5] * input.getY() + data[9] * input.getZ() + data[13] * pos, data[2] * input.getX() + data[6] * input.getY() + data[10] * input.getZ() + data[14] * pos); | ||||
| 	} | ||||
| 	 | ||||
| 	public void transform(Vec3f input, FloatBuffer buffer, boolean position) | ||||
| 	{ | ||||
| 	public void transform(Vec3f input, FloatBuffer buffer, boolean position) { | ||||
| 		float pos = position ? 1F : 0F; | ||||
| 		buffer.put(data[0] * input.getX() + data[4] * input.getY() + data[8] * input.getZ() + data[12] * pos); | ||||
| 		buffer.put(data[1] * input.getX() + data[5] * input.getY() + data[9] * input.getZ() + data[13] * pos); | ||||
| 		buffer.put(data[2] * input.getX() + data[6] * input.getY() + data[10] * input.getZ() + data[14] * pos); | ||||
| 	} | ||||
| 	 | ||||
| 	public float determinant() | ||||
| 	{ | ||||
| 	public float determinant() { | ||||
| 		float f = data[0] * ((data[5] * data[10] * data[15] + data[6] * data[11] * data[13] + data[7] * data[9] * data[14]) - data[7] * data[10] * data[13] - data[5] * data[11] * data[14] - data[6] * data[9] * data[15]); | ||||
| 		f -= data[1] * ((data[4] * data[10] * data[15] + data[6] * data[11] * data[12] + data[7] * data[8] * data[14]) - data[7] * data[10] * data[12] - data[4] * data[11] * data[14] - data[6] * data[8] * data[15]); | ||||
| 		f += data[2] * ((data[4] * data[9] * data[15] + data[5] * data[11] * data[12] + data[7] * data[8] * data[13]) - data[7] * data[9] * data[12] - data[4] * data[11] * data[13] - data[5] * data[8] * data[15]); | ||||
| @ -688,13 +577,9 @@ public class Matrix4f | ||||
| 		return f; | ||||
| 	} | ||||
| 	 | ||||
| 	public float determinant3x3(float t00, float t01, float t02, float t10, float t11, float t12, float t20, float t21, float t22) | ||||
| 	{ | ||||
| 		return t00 * (t11 * t22 - t12 * t21) + t01 * (t12 * t20 - t10 * t22) + t02 * (t10 * t21 - t11 * t20); | ||||
| 	} | ||||
| 	public float determinant3x3(float t00, float t01, float t02, float t10, float t11, float t12, float t20, float t21, float t22) { return t00 * (t11 * t22 - t12 * t21) + t01 * (t12 * t20 - t10 * t22) + t02 * (t10 * t21 - t11 * t20); } | ||||
| 	 | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f rotation, float scale) | ||||
| 	{ | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f rotation, float scale) { | ||||
| 		setIdentity(); | ||||
| 		translate(position); | ||||
| 		rotate((float)Math.toRadians(rotation.getX()), X_ROTATION); | ||||
| @ -704,8 +589,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f rotation, Vec3f scale) | ||||
| 	{ | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f rotation, Vec3f scale) { | ||||
| 		setIdentity(); | ||||
| 		translate(position); | ||||
| 		rotate((float)Math.toRadians(rotation.getX()), X_ROTATION); | ||||
| @ -715,8 +599,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f offset, Vec3f rotation, float scale) | ||||
| 	{ | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f offset, Vec3f rotation, float scale) { | ||||
| 		setIdentity(); | ||||
| 		translate(position); | ||||
| 		translate(offset); | ||||
| @ -727,8 +610,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f offset, Vec3f rotation, Vec3f scale) | ||||
| 	{ | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f offset, Vec3f rotation, Vec3f scale) { | ||||
| 		setIdentity(); | ||||
| 		translate(position); | ||||
| 		translate(offset); | ||||
| @ -739,8 +621,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setTransform(Vec3f position, Quaternion rotation, float scale) | ||||
| 	{ | ||||
| 	public Matrix4f setTransform(Vec3f position, Quaternion rotation, float scale) { | ||||
| 		setIdentity(); | ||||
| 		translate(position); | ||||
| 		rotate(rotation); | ||||
| @ -748,8 +629,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setTransform(Vec3f position, Quaternion rotation, Vec3f scale) | ||||
| 	{ | ||||
| 	public Matrix4f setTransform(Vec3f position, Quaternion rotation, Vec3f scale) { | ||||
| 		setIdentity(); | ||||
| 		translate(position); | ||||
| 		rotate(rotation); | ||||
| @ -757,8 +637,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f offset, Quaternion rotation, float scale) | ||||
| 	{ | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f offset, Quaternion rotation, float scale) { | ||||
| 		setIdentity(); | ||||
| 		translate(position); | ||||
| 		translate(offset); | ||||
| @ -767,8 +646,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f offset, Quaternion rotation, Vec3f scale) | ||||
| 	{ | ||||
| 	public Matrix4f setTransform(Vec3f position, Vec3f offset, Quaternion rotation, Vec3f scale) { | ||||
| 		setIdentity(); | ||||
| 		translate(position); | ||||
| 		translate(offset); | ||||
| @ -777,8 +655,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setTransform(Vec3f position, Matrix4f billRotation, float scale) | ||||
| 	{ | ||||
| 	public Matrix4f setTransform(Vec3f position, Matrix4f billRotation, float scale) { | ||||
| 		setIdentity(); | ||||
| 		translate(position); | ||||
| 		setBillboard(billRotation); | ||||
| @ -786,8 +663,7 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f setTransform(Vec3f position, Matrix4f billRotation, Vec3f scale) | ||||
| 	{ | ||||
| 	public Matrix4f setTransform(Vec3f position, Matrix4f billRotation, Vec3f scale) { | ||||
| 		setIdentity(); | ||||
| 		translate(position); | ||||
| 		setBillboard(billRotation); | ||||
| @ -796,13 +672,12 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3f project(float x, float y, float z, int[] viewport, Vec3f winCoordsDest) | ||||
| 	{ | ||||
| 		float invW = 1F / VectorUtil.fma(data[3], x, VectorUtil.fma(data[7], y, VectorUtil.fma(data[11], z, data[15]))); | ||||
| 		float nx = VectorUtil.fma(data[0], x, VectorUtil.fma(data[4], y, VectorUtil.fma(data[8], z, data[12]))) * invW; | ||||
| 		float ny = VectorUtil.fma(data[1], x, VectorUtil.fma(data[5], y, VectorUtil.fma(data[9], z, data[13]))) * invW; | ||||
| 		float nz = VectorUtil.fma(data[2], x, VectorUtil.fma(data[6], y, VectorUtil.fma(data[10], z, data[14]))) * invW; | ||||
| 		return winCoordsDest.set(VectorUtil.fma(VectorUtil.fma(nx, 0.5F, 0.5F), viewport[2], viewport[0]), VectorUtil.fma(VectorUtil.fma(ny, 0.5F, 0.5F), viewport[3], viewport[1]), VectorUtil.fma(0.5F, nz, 0.5F)); | ||||
| 	public Vec3f project(float x, float y, float z, int[] viewport, Vec3f winCoordsDest) { | ||||
| 		float invW = 1F / Math.fma(data[3], x,  Math.fma(data[7], y, Math.fma(data[11], z, data[15]))); | ||||
| 		float nx = Math.fma(data[0], x, Math.fma(data[4], y, Math.fma(data[8], z, data[12]))) * invW; | ||||
| 		float ny = Math.fma(data[1], x, Math.fma(data[5], y, Math.fma(data[9], z, data[13]))) * invW; | ||||
| 		float nz = Math.fma(data[2], x, Math.fma(data[6], y, Math.fma(data[10], z, data[14]))) * invW; | ||||
| 		return winCoordsDest.set( Math.fma(Math.fma(nx, 0.5F, 0.5F), viewport[2], viewport[0]), Math.fma( Math.fma(ny, 0.5F, 0.5F), viewport[3], viewport[1]), Math.fma(0.5F, nz, 0.5F)); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3f unproject(float winX, float winY, float winZ, int[] viewport, Vec3f dest) { | ||||
| @ -820,36 +695,32 @@ public class Matrix4f | ||||
| 		float l = data[10] * data[15] - data[11] * data[14]; | ||||
| 		float det = a * l - b * k + c * j + d * i - e * h + f * g; | ||||
| 		det = 1.0f / det; | ||||
|         float im00 = ( data[5] * l - data[6] * k + data[7] * j) * det; | ||||
| 		float im00 = (data[5] * l - data[6] * k + data[7] * j) * det; | ||||
| 		float im01 = (-data[1] * l + data[2] * k - data[3] * j) * det; | ||||
|         float im02 = ( data[13] * f - data[14] * e + data[15] * d) * det; | ||||
| 		float im02 = (data[13] * f - data[14] * e + data[15] * d) * det; | ||||
| 		float im03 = (-data[9] * f + data[10] * e - data[11] * d) * det; | ||||
| 		float im10 = (-data[4] * l + data[6] * i - data[7] * h) * det; | ||||
|         float im11 = ( data[0] * l - data[2] * i + data[3] * h) * det; | ||||
| 		float im11 = (data[0] * l - data[2] * i + data[3] * h) * det; | ||||
| 		float im12 = (-data[12] * f + data[14] * c - data[15] * b) * det; | ||||
|         float im13 = ( data[8] * f - data[10] * c + data[11] * b) * det; | ||||
|         float im20 = ( data[4] * k - data[5] * i + data[7] * g) * det; | ||||
| 		float im13 = (data[8] * f - data[10] * c + data[11] * b) * det; | ||||
| 		float im20 = (data[4] * k - data[5] * i + data[7] * g) * det; | ||||
| 		float im21 = (-data[0] * k + data[1] * i - data[3] * g) * det; | ||||
|         float im22 = ( data[12] * e - data[13] * c + data[15] * a) * det; | ||||
| 		float im22 = (data[12] * e - data[13] * c + data[15] * a) * det; | ||||
| 		float im23 = (-data[8] * e + data[9] * c - data[11] * a) * det; | ||||
| 		float im30 = (-data[4] * j + data[5] * h - data[6] * g) * det; | ||||
|         float im31 = ( data[0] * j - data[1] * h + data[2] * g) * det; | ||||
| 		float im31 = (data[0] * j - data[1] * h + data[2] * g) * det; | ||||
| 		float im32 = (-data[12] * d + data[13] * b - data[14] * a) * det; | ||||
|         float im33 = ( data[8] * d - data[9] * b + data[10] * a) * det; | ||||
|         float ndcX = (winX-viewport[0])/viewport[2]*2.0f-1.0f; | ||||
|         float ndcY = (winY-viewport[1])/viewport[3]*2.0f-1.0f; | ||||
|         float ndcZ = winZ+winZ-1.0f; | ||||
| 		float im33 = (data[8] * d - data[9] * b + data[10] * a) * det; | ||||
| 		float ndcX = (winX - viewport[0]) / viewport[2] * 2.0f - 1.0f; | ||||
| 		float ndcY = (winY - viewport[1]) / viewport[3] * 2.0f - 1.0f; | ||||
| 		float ndcZ = winZ + winZ - 1.0f; | ||||
| 		float invW = 1.0f / (im03 * ndcX + im13 * ndcY + im23 * ndcZ + im33); | ||||
| 		return dest.set((im00 * ndcX + im10 * ndcY + im20 * ndcZ + im30) * invW, (im01 * ndcX + im11 * ndcY + im21 * ndcZ + im31) * invW, (im02 * ndcX + im12 * ndcY + im22 * ndcZ + im32) * invW); | ||||
| 	} | ||||
| 	 | ||||
|     public Matrix4f ortho(float x, float y, float width, float height, float zNear, float zFar) | ||||
|     { | ||||
|     	return ortho(x, x+width, y+height, y, zNear, zFar, false); | ||||
|     } | ||||
| 	public Matrix4f ortho(float x, float y, float width, float height, float zNear, float zFar) { return ortho(x, x + width, y + height, y, zNear, zFar, false); } | ||||
| 	 | ||||
| 	public Matrix4f ortho(float left, float right, float bottom, float top, float zNear, float zFar, boolean zZeroToOne) | ||||
| 	{ | ||||
| 	public Matrix4f ortho(float left, float right, float bottom, float top, float zNear, float zFar, boolean zZeroToOne) { | ||||
| 		float rm00 = 2F / (right - left); | ||||
| 		float rm11 = 2F / (top - bottom); | ||||
| 		float rm22 = (zZeroToOne ? 1F : 2F) / (zFar - zNear); | ||||
| @ -876,10 +747,8 @@ public class Matrix4f | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4f storeFrustrumPlane(int plane, Vec4f toStore) | ||||
| 	{ | ||||
| 		switch(plane) | ||||
| 		{ | ||||
| 	public Vec4f storeFrustrumPlane(int plane, Vec4f toStore) { | ||||
| 		switch(plane) { | ||||
| 			case 0: | ||||
| 				return toStore.set(data[3] + data[0], data[7] + data[4], data[11] + data[8], data[15] + data[12]).normalize3D(); | ||||
| 			case 1: | ||||
|  | ||||
| @ -7,24 +7,21 @@ import speiger.src.coreengine.math.MathUtils; | ||||
| import speiger.src.coreengine.math.vector.floats.Vec4f; | ||||
| import speiger.src.coreengine.math.vector.matrix.Matrix4f; | ||||
| 
 | ||||
| public interface Quaternion | ||||
| { | ||||
| public interface Quaternion { | ||||
| 	public static final Quaternion ZERO = of(0F, 0F, 0F, 0F); | ||||
| 	public static final Quaternion IDENTITY = of(); | ||||
| 	 | ||||
| 	public static Quaternion mutable(){return new QuaternionMutable();} | ||||
| 	public static Quaternion mutable(Quaternion source){return mutable(source.getX(), source.getY(), source.getZ(), source.getW());} | ||||
| 	public static Quaternion mutable(float x, float y, float z, float w){return new QuaternionMutable(x, y, z, w);} | ||||
| 	public static Quaternion mutableRad(float x, float y, float z, float angle){return mutable().setAxisRad(x, y, z, angle);} | ||||
| 	public static Quaternion mutableDeg(float x, float y, float z, float angle){return mutable().setAxisDeg(x, y, z, angle);} | ||||
| 	 | ||||
| 	public static Quaternion of(){return new QuaternionImmutable();} | ||||
| 	public static Quaternion of(Quaternion source){return of(source.getX(), source.getY(), source.getZ(), source.getW());} | ||||
| 	public static Quaternion of(float x, float y, float z, float w){return new QuaternionImmutable(x, y, z, w);} | ||||
| 	public static Quaternion ofRad(float x, float y, float z, float angle){return ZERO.setAxisRad(x, y, z, angle);} | ||||
| 	public static Quaternion ofDeg(float x, float y, float z, float angle){return ZERO.setAxisDeg(x, y, z, angle);} | ||||
| 	 | ||||
| 	public static double acos(double v){return v < -1D ? 3.141592653589793D : (v > 1D ? 0D : Math.acos(v));} | ||||
| 	public static Quaternion mutable() { return new QuaternionMutable(); } | ||||
| 	public static Quaternion mutable(Quaternion source) { return mutable(source.getX(), source.getY(), source.getZ(), source.getW()); } | ||||
| 	public static Quaternion mutable(float x, float y, float z, float w) { return new QuaternionMutable(x, y, z, w); } | ||||
| 	public static Quaternion mutableRad(float x, float y, float z, float angle) { return mutable().setAxisRad(x, y, z, angle); } | ||||
| 	public static Quaternion mutableDeg(float x, float y, float z, float angle) { return mutable().setAxisDeg(x, y, z, angle); } | ||||
| 	public static Quaternion of() { return new QuaternionImmutable(); } | ||||
| 	public static Quaternion of(Quaternion source) { return of(source.getX(), source.getY(), source.getZ(), source.getW()); } | ||||
| 	public static Quaternion of(float x, float y, float z, float w) { return new QuaternionImmutable(x, y, z, w); } | ||||
| 	public static Quaternion ofRad(float x, float y, float z, float angle) { return ZERO.setAxisRad(x, y, z, angle); } | ||||
| 	public static Quaternion ofDeg(float x, float y, float z, float angle) { return ZERO.setAxisDeg(x, y, z, angle); } | ||||
| 	public static double acos(double v) { return v < -1D ? 3.141592653589793D : (v > 1D ? 0D : Math.acos(v)); } | ||||
| 	 | ||||
| 	public Quaternion setX(float x); | ||||
| 	public Quaternion setY(float y); | ||||
| @ -34,46 +31,42 @@ public interface Quaternion | ||||
| 	public float getY(); | ||||
| 	public float getZ(); | ||||
| 	public float getW(); | ||||
| 	public default float[] asArray(){return new float[]{getX(), getY(), getZ(), getW()};} | ||||
| 	 | ||||
| 	public default Quaternion negate(){return set(0F, 0F, 0F, 0F);} | ||||
| 	public default Quaternion invert(){return set(-getX(), -getY(), -getZ(), -getW());} | ||||
| 	public default Quaternion normalize(){return scale(1.0F / length());} | ||||
| 	public default Quaternion conjugate(){return set(-getX(), -getY(), -getZ(), getW());} | ||||
| 	public default Quaternion setIdentity(){return set(0F, 0F, 0F, 1F);} | ||||
| 	 | ||||
| 	public default Quaternion multiply(Quaternion other){return set(getX() * other.getW() + getW() * other.getX() + getY() * other.getZ() - getZ() * other.getY(), getY() * other.getW() + getW() * other.getY() + getZ() * other.getX() - getX() * other.getZ(), getZ() * other.getW() + getW() * other.getZ() + getX() * other.getY() - getY() * other.getX(), getW() * other.getW() - getX() * other.getX() - getY() * other.getY() - getZ() * other.getZ());} | ||||
| 	public default Quaternion scale(float scale){return set(getX() * scale, getY() * scale, getZ() * scale, getW() * scale);} | ||||
| 	public default Quaternion rotateX(float angle) | ||||
| 	{ | ||||
| 	public default float[] asArray() { return new float[] {getX(), getY(), getZ(), getW()}; } | ||||
| 	public default Quaternion negate() { return set(0F, 0F, 0F, 0F); } | ||||
| 	public default Quaternion invert() { return set(-getX(), -getY(), -getZ(), -getW()); } | ||||
| 	public default Quaternion normalize() { return scale(1.0F / length()); } | ||||
| 	public default Quaternion conjugate() { return set(-getX(), -getY(), -getZ(), getW()); } | ||||
| 	public default Quaternion setIdentity() { return set(0F, 0F, 0F, 1F); } | ||||
| 	public default Quaternion multiply(Quaternion other) { return set(getX() * other.getW() + getW() * other.getX() + getY() * other.getZ() - getZ() * other.getY(), getY() * other.getW() + getW() * other.getY() + getZ() * other.getX() - getX() * other.getZ(), getZ() * other.getW() + getW() * other.getZ() + getX() * other.getY() - getY() * other.getX(), getW() * other.getW() - getX() * other.getX() - getY() * other.getY() - getZ() * other.getZ()); } | ||||
| 	public default Quaternion scale(float scale) { return set(getX() * scale, getY() * scale, getZ() * scale, getW() * scale); } | ||||
| 	public default Quaternion rotateX(float angle) { | ||||
| 		angle = (float)Math.toRadians(angle); | ||||
| 		float sin = MathUtils.sin(angle * 0.5D); | ||||
| 		float cos = MathUtils.cos(angle * 0.5D); | ||||
| 		return set(getW() * sin + getX() * cos, getY() * cos + getZ() * sin, getZ() * cos - getY() * sin, getW() * cos - getX() * sin); | ||||
| 	} | ||||
| 	public default Quaternion rotateY(float angle) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Quaternion rotateY(float angle) { | ||||
| 		angle = (float)Math.toRadians(angle); | ||||
| 		float sin = MathUtils.sin(angle * 0.5D); | ||||
| 		float cos = MathUtils.cos(angle * 0.5D); | ||||
| 		return set(getX() * cos - getZ() * sin, getW() * sin + getY() * cos, getX() * sin + getZ() * cos, getW() * cos - getY() * sin); | ||||
| 	} | ||||
| 	public default Quaternion rotateZ(float angle) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Quaternion rotateZ(float angle) { | ||||
| 		angle = (float)Math.toRadians(angle); | ||||
| 		float sin = MathUtils.sin(angle * 0.5D); | ||||
| 		float cos = MathUtils.cos(angle * 0.5D); | ||||
| 		return set(getX() * cos + getY() * sin, getY() * cos - getX() * sin, getW() * sin + getZ() * cos, getW() * cos - getZ() * sin); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Quaternion set(Vec4f value){return set(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Quaternion set(Quaternion value){return set(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Quaternion set(Vec4f value) { return set(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Quaternion set(Quaternion value) { return set(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	 | ||||
| 	public default Quaternion set(Matrix4f matrix) | ||||
| 	{ | ||||
| 	public default Quaternion set(Matrix4f matrix) { | ||||
| 		float tr = matrix.get(0, 0) + matrix.get(1, 1) + matrix.get(2, 2); | ||||
| 		if(tr >= 0.0D) | ||||
| 		{ | ||||
| 		if(tr >= 0.0D) { | ||||
| 			float s = (float)Math.sqrt(tr + 1.0D); | ||||
| 			float w = s * 0.5F; | ||||
| 			s = 0.5F / s; | ||||
| @ -82,11 +75,9 @@ public interface Quaternion | ||||
| 			float z = (matrix.get(1, 0) - matrix.get(0, 1)) * s; | ||||
| 			return set(x, y, z, w); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 		else { | ||||
| 			float max = Math.max(Math.max(matrix.get(0, 0), matrix.get(1, 1)), matrix.get(2, 2)); | ||||
| 			if(max == matrix.get(0, 0)) | ||||
| 			{ | ||||
| 			if(max == matrix.get(0, 0)) { | ||||
| 				float s = (float)Math.sqrt(matrix.get(0, 0) - (matrix.get(1, 1) + matrix.get(2, 2)) + 1.0D); | ||||
| 				float x = s * 0.5F; | ||||
| 				s = 0.5F / s; | ||||
| @ -95,8 +86,7 @@ public interface Quaternion | ||||
| 				float w = (matrix.get(2, 1) - matrix.get(1, 2)) * s; | ||||
| 				return set(x, y, z, w); | ||||
| 			} | ||||
| 			else if(max == matrix.get(1, 1)) | ||||
| 			{ | ||||
| 			else if(max == matrix.get(1, 1)) { | ||||
| 				float s = (float)Math.sqrt(matrix.get(1, 1) - (matrix.get(2, 2) + matrix.get(0, 0)) + 1.0D); | ||||
| 				float y = s * 0.5F; | ||||
| 				s = 0.5F / s; | ||||
| @ -105,8 +95,7 @@ public interface Quaternion | ||||
| 				float w = (matrix.get(0, 2) - matrix.get(2, 0)) * s; | ||||
| 				return set(x, y, z, w); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 			else { | ||||
| 				float s = (float)Math.sqrt(matrix.get(2, 2) - (matrix.get(0, 0) + matrix.get(1, 1)) + 1.0D); | ||||
| 				float z = s * 0.5F; | ||||
| 				s = 0.5F / s; | ||||
| @ -118,25 +107,23 @@ public interface Quaternion | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public default Quaternion setAxisRad(float x, float y, float z, float angle) | ||||
| 	{ | ||||
| 	public default Quaternion setAxisRad(float x, float y, float z, float angle) { | ||||
| 		float sin = MathUtils.sin(angle * 0.5D); | ||||
| 		float cos = MathUtils.cos(angle * 0.5D); | ||||
| 		return set(x * sin, y * sin, z * sin, cos); | ||||
| 	} | ||||
| 	public default Quaternion setAxisDeg(float x, float y, float z, float angle) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Quaternion setAxisDeg(float x, float y, float z, float angle) { | ||||
| 		angle = (float)Math.toRadians(angle); | ||||
| 		float sin = MathUtils.sin(angle * 0.5D); | ||||
| 		float cos = MathUtils.cos(angle * 0.5D); | ||||
| 		return set(x * sin, y * sin, z * sin, cos); | ||||
| 	} | ||||
| 	public Quaternion set(float x, float y, float z, float w); | ||||
| 	 | ||||
| 	public default float dot(Quaternion other){return getX() * other.getX() + getY() * other.getY() + getZ() * other.getZ() + getW() * other.getW();} | ||||
| 	public default Quaternion difference(Quaternion other){return difference(other, this);}	 | ||||
| 	public default Quaternion difference(Quaternion other, Quaternion result) | ||||
| 	{ | ||||
| 	public Quaternion set(float x, float y, float z, float w); | ||||
| 	public default float dot(Quaternion other) { return getX() * other.getX() + getY() * other.getY() + getZ() * other.getZ() + getW() * other.getW(); } | ||||
| 	public default Quaternion difference(Quaternion other) { return difference(other, this); } | ||||
| 	public default Quaternion difference(Quaternion other, Quaternion result) { | ||||
| 		float invNorm = 1.0F / (getX() * getX() + getY() * getY() + getZ() * getZ() + getW() * getW()); | ||||
| 		float x = -getX() * invNorm; | ||||
| 		float y = -getY() * invNorm; | ||||
| @ -144,23 +131,21 @@ public interface Quaternion | ||||
| 		float w = getW() * invNorm; | ||||
| 		return set(w * other.getX() + x * other.getW() + y * other.getZ() - z * other.getY(), w * other.getY() - x * other.getZ() + y * other.getW() + z * other.getX(), w * other.getZ() + x * other.getY() - y * other.getX() + z * other.getW(), w * other.getW() - x * other.getX() - y * other.getY() - z * other.getZ()); | ||||
| 	} | ||||
| 	public default Quaternion lerp(Quaternion other, float progress){return lerp(other, progress, this);} | ||||
| 	public default Quaternion lerp(Quaternion other, float progress, Quaternion result) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Quaternion lerp(Quaternion other, float progress) { return lerp(other, progress, this); } | ||||
| 	public default Quaternion lerp(Quaternion other, float progress, Quaternion result) { | ||||
| 		float cosom = getX() * other.getX() + getY() * other.getY() + getZ() * other.getZ() + getW() * other.getW(); | ||||
| 		float absCosom = Math.abs(cosom); | ||||
| 		float scale1; | ||||
| 		float scale0; | ||||
| 		if(1.0F - absCosom > 1.0E-006F) | ||||
| 		{ | ||||
| 		if(1.0F - absCosom > 1.0E-006F) { | ||||
| 			float sinSqr = 1.0F - absCosom * absCosom; | ||||
| 			float sinom = (float)(1.0D / Math.sqrt(sinSqr)); | ||||
| 			float omega = (float)Math.atan2(sinSqr * sinom, absCosom); | ||||
| 			scale0 = MathUtils.sin((1.0D - progress) * omega) * sinom; | ||||
| 			scale1 = MathUtils.sin(progress * omega) * sinom; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 		else { | ||||
| 			scale0 = 1.0F - progress; | ||||
| 			scale1 = progress; | ||||
| 		} | ||||
| @ -168,49 +153,39 @@ public interface Quaternion | ||||
| 		return result.set(scale0 * getX() + scale1 * other.getX(), scale0 * getY() + scale1 * other.getY(), scale0 * getZ() + scale1 * other.getZ(), scale0 * getW() + scale1 * other.getW()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default float length(){return (float)Math.sqrt(lengthSquared());} | ||||
| 	public default double lengthSquared(){return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW());} | ||||
| 	 | ||||
| 	public default Matrix4f asRotationMatrix(){return new Matrix4f().rotate(this);} | ||||
| 	public default Vec4f toAxisDegreeRotation() {return toAxisDegreeRotation(Vec4f.mutable());} | ||||
| 	public default Vec4f toAxisDegreeRotation(Vec4f input) | ||||
| 	{ | ||||
| 	public default float length() { return (float)Math.sqrt(lengthSquared()); } | ||||
| 	public default double lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW()); } | ||||
| 	public default Matrix4f asRotationMatrix() { return new Matrix4f().rotate(this); } | ||||
| 	public default Vec4f toAxisDegreeRotation() { return toAxisDegreeRotation(Vec4f.mutable()); } | ||||
| 	public default Vec4f toAxisDegreeRotation(Vec4f input) { | ||||
| 		double invSqrt = 1.0D / Math.sqrt(1.0D - getW() * getW()); | ||||
| 		return input.set((float)(getX() * invSqrt), (float)(getY() * invSqrt), (float)(getZ() * invSqrt), (float)Math.toDegrees(acos(getW()) * 2F)); | ||||
| 	} | ||||
| 	public default Vec4f toAxisRotation() {return toAxisRotation(Vec4f.mutable());} | ||||
| 	public default Vec4f toAxisRotation(Vec4f input) | ||||
| 	{ | ||||
| 	 | ||||
| 	public default Vec4f toAxisRotation() { return toAxisRotation(Vec4f.mutable()); } | ||||
| 	public default Vec4f toAxisRotation(Vec4f input) { | ||||
| 		double invSqrt = 1.0D / Math.sqrt(1.0D - getW() * getW()); | ||||
| 		return input.set((float)(getX() * invSqrt), (float)(getY() * invSqrt), (float)(getZ() * invSqrt), (float)acos(getW()) * 2F); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Quaternion store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Quaternion store(ByteBuffer buffer) { | ||||
| 		buffer.putFloat(getX()).putFloat(getY()).putFloat(getZ()).putFloat(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public default Quaternion load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getFloat(), buffer.getFloat(), buffer.getFloat(), buffer.getFloat()); | ||||
| 	} | ||||
| 	public default Quaternion load(ByteBuffer buffer) { return set(buffer.getFloat(), buffer.getFloat(), buffer.getFloat(), buffer.getFloat()); } | ||||
| 	 | ||||
| 	public default Quaternion store(FloatBuffer buffer) | ||||
| 	{ | ||||
| 	public default Quaternion store(FloatBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()).put(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public default Quaternion load(FloatBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	public default Quaternion load(FloatBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	 | ||||
| 	public Quaternion copy(); | ||||
| 	public boolean isMutable(); | ||||
| 	public default Quaternion asMutable(){return isMutable() ? this : of(this);} | ||||
| 	public default Quaternion asImmutable(){return isMutable() ? mutable(this) : this;} | ||||
| 	public default Quaternion copyAsMutable(){return mutable(this);} | ||||
| 	public default Quaternion copyAsImmutable(){return of(this);} | ||||
| 	public default Quaternion asMutable() { return isMutable() ? this : of(this); } | ||||
| 	public default Quaternion asImmutable() { return isMutable() ? mutable(this) : this; } | ||||
| 	public default Quaternion copyAsMutable() { return mutable(this); } | ||||
| 	public default Quaternion copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,23 +2,20 @@ package speiger.src.coreengine.math.vector.quaternion; | ||||
| 
 | ||||
| import java.util.Arrays; | ||||
| 
 | ||||
| public class QuaternionImmutable implements Quaternion | ||||
| { | ||||
| public class QuaternionImmutable implements Quaternion { | ||||
| 	final float x; | ||||
| 	final float y; | ||||
| 	final float z; | ||||
| 	final float w; | ||||
| 	 | ||||
| 	public QuaternionImmutable() | ||||
| 	{ | ||||
| 	public QuaternionImmutable() { | ||||
| 		x = 0F; | ||||
| 		y = 0F; | ||||
| 		z = 0F; | ||||
| 		w = 1F; | ||||
| 	} | ||||
| 	 | ||||
| 	public QuaternionImmutable(float x, float y, float z, float w) | ||||
| 	{ | ||||
| 	public QuaternionImmutable(float x, float y, float z, float w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -26,82 +23,33 @@ public class QuaternionImmutable implements Quaternion | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion setX(float x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : set(x, y, z, w); | ||||
| 	} | ||||
| 	public Quaternion setX(float x) { return this.x == x ? this : set(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Quaternion setY(float y) { return this.y == y ? this : set(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Quaternion setZ(float z) { return this.z == z ? this : set(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Quaternion setW(float w) { return this.w == w ? this : set(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public float getX() { return x; } | ||||
| 	@Override | ||||
| 	public float getY() { return y; } | ||||
| 	@Override | ||||
| 	public float getZ() { return z; } | ||||
| 	@Override | ||||
| 	public float getW() { return w; } | ||||
| 	@Override | ||||
| 	public Quaternion set(float x, float y, float z, float w) { return this.x == x && this.y == y && this.z == z && this.w == w ? this : Quaternion.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Quaternion copy() { return Quaternion.of(this); } | ||||
| 	@Override | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Arrays.hashCode(new float[] {x, y, z, w}); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion setY(float y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : set(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion setZ(float z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : set(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion setW(float w) | ||||
| 	{ | ||||
| 		return this.w == w ? this : set(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion set(float x, float y, float z, float w) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z && this.w == w ? this : Quaternion.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion copy() | ||||
| 	{ | ||||
| 		return Quaternion.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Arrays.hashCode(new float[]{x,y,z,w}); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Quaternion) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Quaternion) { | ||||
| 			Quaternion other = (Quaternion)obj; | ||||
| 			return other.getX() == x && other.getY() == y && other.getZ() == z && other.getW() == w; | ||||
| 		} | ||||
| @ -109,8 +57,5 @@ public class QuaternionImmutable implements Quaternion | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Quaternion[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Quaternion[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,23 +2,20 @@ package speiger.src.coreengine.math.vector.quaternion; | ||||
| 
 | ||||
| import java.util.Arrays; | ||||
| 
 | ||||
| public class QuaternionMutable implements Quaternion | ||||
| { | ||||
| public class QuaternionMutable implements Quaternion { | ||||
| 	float x; | ||||
| 	float y; | ||||
| 	float z; | ||||
| 	float w; | ||||
| 	 | ||||
| 	public QuaternionMutable() | ||||
| 	{ | ||||
| 	public QuaternionMutable() { | ||||
| 		x = 0F; | ||||
| 		y = 0F; | ||||
| 		z = 0F; | ||||
| 		w = 1F; | ||||
| 	} | ||||
| 	 | ||||
| 	public QuaternionMutable(float x, float y, float z, float w) | ||||
| 	{ | ||||
| 	public QuaternionMutable(float x, float y, float z, float w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -26,60 +23,40 @@ public class QuaternionMutable implements Quaternion | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion setX(float x) | ||||
| 	{ | ||||
| 	public Quaternion setX(float x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion setY(float y) | ||||
| 	{ | ||||
| 	public Quaternion setY(float y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion setZ(float z) | ||||
| 	{ | ||||
| 	public Quaternion setZ(float z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion setW(float w) | ||||
| 	{ | ||||
| 	public Quaternion setW(float w) { | ||||
| 		this.w = w; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	public float getX() { return x; } | ||||
| 	@Override | ||||
| 	public float getY() { return y; } | ||||
| 	@Override | ||||
| 	public float getZ() { return z; } | ||||
| 	@Override | ||||
| 	public float getW() { return w; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public float getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion set(float x, float y, float z, float w) | ||||
| 	{ | ||||
| 	public Quaternion set(float x, float y, float z, float w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -88,28 +65,15 @@ public class QuaternionMutable implements Quaternion | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Quaternion copy() | ||||
| 	{ | ||||
| 		return Quaternion.mutable(this); | ||||
| 	} | ||||
| 	public Quaternion copy() { return Quaternion.mutable(this); } | ||||
| 	@Override | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Arrays.hashCode(new float[] {x, y, z, w}); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Arrays.hashCode(new float[]{x,y,z,w}); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Quaternion) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Quaternion) { | ||||
| 			Quaternion other = (Quaternion)obj; | ||||
| 			return other.getX() == x && other.getY() == y && other.getZ() == z && other.getW() == w; | ||||
| 		} | ||||
| @ -117,8 +81,5 @@ public class QuaternionMutable implements Quaternion | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Quaternion[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Quaternion[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -10,81 +10,70 @@ import speiger.src.coreengine.math.vector.floats.Vec2f; | ||||
| import speiger.src.coreengine.math.vector.ints.Vec2i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec2l; | ||||
| 
 | ||||
| public interface Vec2s extends Vecs | ||||
| { | ||||
| public interface Vec2s extends Vecs { | ||||
| 	public static final Vec2s ZERO = of(); | ||||
| 	public static final Vec2s MINUS_ONE = of((short)-1); | ||||
| 	public static final Vec2s ONE = of((short)1); | ||||
| 	 | ||||
| 	public static Vec2s mutable(){return new Vec2sMutable();} | ||||
| 	public static Vec2s mutable(short value){return new Vec2sMutable(value);} | ||||
| 	public static Vec2s mutable(short x, short y){return new Vec2sMutable(x, y);} | ||||
| 	public static Vec2s mutable(Vec2s value){return mutable(value.getX(), value.getY());} | ||||
| 	 | ||||
| 	public static Vec2s of(){return new Vec2sImmutable();} | ||||
| 	public static Vec2s of(short value){return new Vec2sImmutable(value);} | ||||
| 	public static Vec2s of(short x, short y){return new Vec2sImmutable(x, y);} | ||||
| 	public static Vec2s of(Vec2s value){return of(value.getX(), value.getY());} | ||||
| 	public static Vec2s mutable() { return new Vec2sMutable(); } | ||||
| 	public static Vec2s mutable(short value) { return new Vec2sMutable(value); } | ||||
| 	public static Vec2s mutable(short x, short y) { return new Vec2sMutable(x, y); } | ||||
| 	public static Vec2s mutable(Vec2s value) { return mutable(value.getX(), value.getY()); } | ||||
| 	public static Vec2s of() { return new Vec2sImmutable(); } | ||||
| 	public static Vec2s of(short value) { return new Vec2sImmutable(value); } | ||||
| 	public static Vec2s of(short x, short y) { return new Vec2sImmutable(x, y); } | ||||
| 	public static Vec2s of(Vec2s value) { return of(value.getX(), value.getY()); } | ||||
| 	 | ||||
| 	public short getX(); | ||||
| 	public short getY(); | ||||
| 	public Vec2s setX(short x); | ||||
| 	public Vec2s setY(short y); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default short[] asArray(){return new short[]{getX(), getY()};} | ||||
| 	public default short[] asArray() { return new short[] {getX(), getY()}; } | ||||
| 	@Override | ||||
| 	public Vec2s copy(); | ||||
| 	@Override | ||||
| 	public default Vec2s abs(){return set((short)Math.abs(getX()), (short)Math.abs(getY()));} | ||||
| 	public default Vec2s abs() { return set((short)Math.abs(getX()), (short)Math.abs(getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2s negate(){return set((short)0, (short)0);} | ||||
| 	public default Vec2s negate() { return set((short)0, (short)0); } | ||||
| 	@Override | ||||
| 	public default Vec2s invert(){return set((short)(-getX()), (short)(-getY()));}; | ||||
| 	 | ||||
| 	public default Vec2s invert() { return set((short)(-getX()), (short)(-getY())); }; | ||||
| 	@Override | ||||
| 	public default Vec2s add(short value) {return add(value, value);} | ||||
| 	public default Vec2s add(Vec2s value) {return add(value.getX(), value.getY());} | ||||
| 	public default Vec2s add(short x, short y) {return set((short)(x + getX()), (short)(y + getY()));} | ||||
| 	 | ||||
| 	public default Vec2s add(short value) { return add(value, value); } | ||||
| 	public default Vec2s add(Vec2s value) { return add(value.getX(), value.getY()); } | ||||
| 	public default Vec2s add(short x, short y) { return set((short)(x + getX()), (short)(y + getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2s sub(short value){return sub(value, value);} | ||||
| 	public default Vec2s sub(Vec2s value){return sub(value.getX(), value.getY());} | ||||
| 	public default Vec2s sub(short x, short y) {return set((short)(getX() - x), (short)(getY() - y));} | ||||
| 	 | ||||
| 	public default Vec2s sub(short value) { return sub(value, value); } | ||||
| 	public default Vec2s sub(Vec2s value) { return sub(value.getX(), value.getY()); } | ||||
| 	public default Vec2s sub(short x, short y) { return set((short)(getX() - x), (short)(getY() - y)); } | ||||
| 	@Override | ||||
| 	public default Vec2s multiply(short value){return multiply(value, value);} | ||||
| 	public default Vec2s multiply(Vec2s value){return multiply(value.getX(), value.getY());} | ||||
| 	public default Vec2s multiply(short x, short y) {return set((short)(x * getX()), (short)(y * getY()));} | ||||
| 	 | ||||
| 	public default Vec2s multiply(short value) { return multiply(value, value); } | ||||
| 	public default Vec2s multiply(Vec2s value) { return multiply(value.getX(), value.getY()); } | ||||
| 	public default Vec2s multiply(short x, short y) { return set((short)(x * getX()), (short)(y * getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2s devide(short value){return devide(value, value);} | ||||
| 	public default Vec2s devide(Vec2s value){return devide(value.getX(), value.getY());} | ||||
| 	public default Vec2s devide(short x, short y){return set((short)(getX() / x), (short)(getY() / y));} | ||||
| 	 | ||||
| 	public default Vec2s devide(short value) { return devide(value, value); } | ||||
| 	public default Vec2s devide(Vec2s value) { return devide(value.getX(), value.getY()); } | ||||
| 	public default Vec2s devide(short x, short y) { return set((short)(getX() / x), (short)(getY() / y)); } | ||||
| 	@Override | ||||
| 	public default Vec2s set(short value){return set(value, value);}; | ||||
| 	public default Vec2s set(Vec2s value){return set(value.getX(), value.getY());} | ||||
| 	public default Vec2s set(short value) { return set(value, value); }; | ||||
| 	public default Vec2s set(Vec2s value) { return set(value.getX(), value.getY()); } | ||||
| 	public Vec2s set(short x, short y); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec2s value){return distanceTo(value.getX(), value.getY());} | ||||
| 	public default double distanceTo(short x, short y){return Math.sqrt(distanceToSquared(x, y));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec2s value){return distanceToSquared(value.getX(), value.getY());} | ||||
| 	public default long distanceToSquared(short x, short y) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec2s value) { return distanceTo(value.getX(), value.getY()); } | ||||
| 	public default double distanceTo(short x, short y) { return Math.sqrt(distanceToSquared(x, y)); } | ||||
| 	public default long distanceToSquared(Vec2s value) { return distanceToSquared(value.getX(), value.getY()); } | ||||
| 	public default long distanceToSquared(short x, short y) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		return (xPos * xPos) + (yPos * yPos); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY());} | ||||
| 	 | ||||
| 	public default long dotProduct(Vec2s value){return dotProduct(value.getX(), value.getY());} | ||||
| 	public default long dotProduct(short x, short y){return (getX() * x) + (getY() * y);} | ||||
| 	 | ||||
| 	public default Vec2s rotate(short angle, Vec2s center){return rotate(angle, center.getX(), center.getY());} | ||||
| 	public default Vec2s rotate(short angle, short x, short y) | ||||
| 	{ | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()); } | ||||
| 	public default long dotProduct(Vec2s value) { return dotProduct(value.getX(), value.getY()); } | ||||
| 	public default long dotProduct(short x, short y) { return (getX() * x) + (getY() * y); } | ||||
| 	public default Vec2s rotate(short angle, Vec2s center) { return rotate(angle, center.getX(), center.getY()); } | ||||
| 	public default Vec2s rotate(short angle, short x, short y) { | ||||
| 		short xPos = (short)(getX() - x); | ||||
| 		short yPos = (short)(getY() - y); | ||||
| 		double cos = MathUtils.cos(angle); | ||||
| @ -92,71 +81,57 @@ public interface Vec2s extends Vecs | ||||
| 		return set((short)((xPos * cos) + (yPos * sin) + x), (short)(-(xPos * sin) + (yPos * cos) + y)); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2s min(Vec2s other) {return min(other, this);} | ||||
| 	public default Vec2s min(Vec2s other, Vec2s result){return min(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2s min(short x, short y) {return min(x, y, this);} | ||||
| 	public default Vec2s min(short x, short y, Vec2s result){return result.set((short)Math.min(getX(), x), (short)Math.min(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2s max(Vec2s other) {return max(other, this);} | ||||
| 	public default Vec2s max(Vec2s other, Vec2s result){return max(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2s max(short x, short y) {return max(x, y, this);} | ||||
| 	public default Vec2s max(short x, short y, Vec2s result){return result.set((short)Math.max(getX(), x), (short)Math.max(getY(), y));} | ||||
| 	 | ||||
| 	public default Vec2s difference(Vec2s other) {return difference(other, this);} | ||||
| 	public default Vec2s difference(Vec2s other, Vec2s result){return difference(other.getX(), other.getY(), result);} | ||||
| 	public default Vec2s difference(short x, short y) {return difference(x, y, this);} | ||||
| 	public default Vec2s difference(short x, short y, Vec2s result){return result.set((short)(getX() - x), (short)(getY() - y));} | ||||
| 	 | ||||
| 	public default Vec2s min(Vec2s other) { return min(other, this); } | ||||
| 	public default Vec2s min(Vec2s other, Vec2s result) { return min(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2s min(short x, short y) { return min(x, y, this); } | ||||
| 	public default Vec2s min(short x, short y, Vec2s result) { return result.set((short)Math.min(getX(), x), (short)Math.min(getY(), y)); } | ||||
| 	public default Vec2s max(Vec2s other) { return max(other, this); } | ||||
| 	public default Vec2s max(Vec2s other, Vec2s result) { return max(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2s max(short x, short y) { return max(x, y, this); } | ||||
| 	public default Vec2s max(short x, short y, Vec2s result) { return result.set((short)Math.max(getX(), x), (short)Math.max(getY(), y)); } | ||||
| 	public default Vec2s difference(Vec2s other) { return difference(other, this); } | ||||
| 	public default Vec2s difference(Vec2s other, Vec2s result) { return difference(other.getX(), other.getY(), result); } | ||||
| 	public default Vec2s difference(short x, short y) { return difference(x, y, this); } | ||||
| 	public default Vec2s difference(short x, short y, Vec2s result) { return result.set((short)(getX() - x), (short)(getY() - y)); } | ||||
| 	@Override | ||||
| 	public default Vec2s clamp(short min, short max){return clamp(min, max, ALL);} | ||||
| 	public default Vec2s clamp(short min, short max, Vec2s result){return clamp(min, max, result, ALL);} | ||||
| 	public default Vec2s clamp(short min, short max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec2s clamp(short min, short max, Vec2s result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec2s clamp(short min, short max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec2s clamp(short min, short max, Vec2s result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()));} | ||||
| 	 | ||||
| 	public default Vec2s clamp(short min, short max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec2s clamp(short min, short max, Vec2s result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY())); } | ||||
| 	@Override | ||||
| 	public default Vec2s store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec2s store(ByteBuffer buffer) { | ||||
| 		buffer.putShort(getX()).putShort(getY()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2s load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getShort(), buffer.getShort()); | ||||
| 	} | ||||
| 	public default Vec2s load(ByteBuffer buffer) { return set(buffer.getShort(), buffer.getShort()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2s store(ShortBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec2s store(ShortBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec2s load(ShortBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec2s load(ShortBuffer buffer) { return set(buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec2b asByte(){return isMutable() ? Vec2b.mutable((byte)getX(), (byte)getY()) : Vec2b.of((byte)getX(), (byte)getY());} | ||||
| 	public default Vec2b asByte() { return isMutable() ? Vec2b.mutable((byte)getX(), (byte)getY()) : Vec2b.of((byte)getX(), (byte)getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2i asInt(){return isMutable() ? Vec2i.mutable(getX(), getY()) : Vec2i.of(getX(), getY());} | ||||
| 	public default Vec2i asInt() { return isMutable() ? Vec2i.mutable(getX(), getY()) : Vec2i.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2l asLong(){return isMutable() ? Vec2l.mutable(getX(), getY()) : Vec2l.of(getX(), getY());} | ||||
| 	public default Vec2l asLong() { return isMutable() ? Vec2l.mutable(getX(), getY()) : Vec2l.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2f asFloat() {return isMutable() ? Vec2f.mutable(getX(), getY()) : Vec2f.of(getX(), getY());} | ||||
| 	public default Vec2f asFloat() { return isMutable() ? Vec2f.mutable(getX(), getY()) : Vec2f.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2d asDouble(){return isMutable() ? Vec2d.mutable(getX(), getY()) : Vec2d.of(getX(), getY());} | ||||
| 	 | ||||
| 	public default Vec2d asDouble() { return isMutable() ? Vec2d.mutable(getX(), getY()) : Vec2d.of(getX(), getY()); } | ||||
| 	@Override | ||||
| 	public default Vec2s asMutable(){return isMutable() ? this : of(this);} | ||||
| 	public default Vec2s asMutable() { return isMutable() ? this : of(this); } | ||||
| 	@Override | ||||
| 	public default Vec2s asImmutable(){return isMutable() ? mutable(this) : this;} | ||||
| 	public default Vec2s asImmutable() { return isMutable() ? mutable(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec2s copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec2s copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec2s copyAsImmutable(){return of(this);} | ||||
| 	public default Vec2s copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,82 +2,45 @@ package speiger.src.coreengine.math.vector.shorts; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2sImmutable implements Vec2s | ||||
| { | ||||
| public class Vec2sImmutable implements Vec2s { | ||||
| 	final short x; | ||||
| 	final short y; | ||||
| 	 | ||||
| 	public Vec2sImmutable() | ||||
| 	{ | ||||
| 	public Vec2sImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2sImmutable(short value) | ||||
| 	{ | ||||
| 	public Vec2sImmutable(short value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2sImmutable(short x, short y) | ||||
| 	{ | ||||
| 	public Vec2sImmutable(short x, short y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public short getX() { return x; } | ||||
| 	@Override | ||||
| 	public short getY() { return y; } | ||||
| 	@Override | ||||
| 	public Vec2s setX(short x) { return this.x == x ? this : Vec2s.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2s setY(short y) { return this.y == y ? this : Vec2s.of(x, y); } | ||||
| 	@Override | ||||
| 	public Vec2s copy() { return Vec2s.of(this); } | ||||
| 	@Override | ||||
| 	public Vec2s set(short x, short y) { return this.x == x && this.y == y ? this : Vec2s.of(x, y); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2s setX(short x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec2s.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2s setY(short y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec2s.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2s copy() | ||||
| 	{ | ||||
| 		return Vec2s.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2s set(short x, short y) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y ? this : Vec2s.of(x, y); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2s) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2s) { | ||||
| 			Vec2s vec = (Vec2s)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -85,8 +48,5 @@ public class Vec2sImmutable implements Vec2s | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2s[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2s[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,84 +2,57 @@ package speiger.src.coreengine.math.vector.shorts; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec2sMutable implements Vec2s | ||||
| { | ||||
| public class Vec2sMutable implements Vec2s { | ||||
| 	short x; | ||||
| 	short y; | ||||
| 	 | ||||
| 	public Vec2sMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec2sMutable() {} | ||||
| 	 | ||||
| 	public Vec2sMutable(short value) | ||||
| 	{ | ||||
| 	public Vec2sMutable(short value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2sMutable(short x, short y) | ||||
| 	{ | ||||
| 	public Vec2sMutable(short x, short y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public short getX() { return x; } | ||||
| 	@Override | ||||
| 	public short getY() { return y; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2s setX(short x) | ||||
| 	{ | ||||
| 	public Vec2s setX(short x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2s setY(short y) | ||||
| 	{ | ||||
| 	public Vec2s setY(short y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2s copy() | ||||
| 	{ | ||||
| 		return Vec2s.mutable(this); | ||||
| 	} | ||||
| 	public Vec2s copy() { return Vec2s.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec2s set(short x, short y) | ||||
| 	{ | ||||
| 	public Vec2s set(short x, short y) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec2s) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec2s) { | ||||
| 			Vec2s vec = (Vec2s)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y; | ||||
| 		} | ||||
| @ -87,8 +60,5 @@ public class Vec2sMutable implements Vec2s | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec2s[x="+x+", y="+y+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec2s[x="+x+", y="+y+"]"; } | ||||
| } | ||||
|  | ||||
| @ -10,21 +10,19 @@ import speiger.src.coreengine.math.vector.floats.Vec3f; | ||||
| import speiger.src.coreengine.math.vector.ints.Vec3i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec3l; | ||||
| 
 | ||||
| public interface Vec3s extends Vecs | ||||
| { | ||||
| public interface Vec3s extends Vecs { | ||||
| 	public static final Vec3s ZERO = of(); | ||||
| 	public static final Vec3s MINUS_ONE = of((short)-1); | ||||
| 	public static final Vec3s ONE = of((short)1); | ||||
| 	 | ||||
| 	public static Vec3s mutable(){return new Vec3sMutable();} | ||||
| 	public static Vec3s mutable(short value){return new Vec3sMutable(value);} | ||||
| 	public static Vec3s mutable(short x, short y, short z){return new Vec3sMutable(x, y, z);} | ||||
| 	public static Vec3s mutable(Vec3s vec){return mutable(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	 | ||||
| 	public static Vec3s of(){return new Vec3sImmutable();} | ||||
| 	public static Vec3s of(short value){return new Vec3sImmutable(value);} | ||||
| 	public static Vec3s of(short x, short y, short z){return new Vec3sImmutable(x, y, z);} | ||||
| 	public static Vec3s of(Vec3s vec){return of(vec.getX(), vec.getY(), vec.getZ());} | ||||
| 	public static Vec3s mutable() { return new Vec3sMutable(); } | ||||
| 	public static Vec3s mutable(short value) { return new Vec3sMutable(value); } | ||||
| 	public static Vec3s mutable(short x, short y, short z) { return new Vec3sMutable(x, y, z); } | ||||
| 	public static Vec3s mutable(Vec3s vec) { return mutable(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	public static Vec3s of() { return new Vec3sImmutable(); } | ||||
| 	public static Vec3s of(short value) { return new Vec3sImmutable(value); } | ||||
| 	public static Vec3s of(short x, short y, short z) { return new Vec3sImmutable(x, y, z); } | ||||
| 	public static Vec3s of(Vec3s vec) { return of(vec.getX(), vec.getY(), vec.getZ()); } | ||||
| 	 | ||||
| 	public short getX(); | ||||
| 	public short getY(); | ||||
| @ -32,125 +30,103 @@ public interface Vec3s extends Vecs | ||||
| 	public Vec3s setX(short x); | ||||
| 	public Vec3s setY(short y); | ||||
| 	public Vec3s setZ(short z); | ||||
| 	@Override | ||||
| 	public default short[] asArray(){return new short[]{getX(), getY(), getZ()};} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default short[] asArray() { return new short[] {getX(), getY(), getZ()}; } | ||||
| 	@Override | ||||
| 	public Vec3s copy(); | ||||
| 	@Override | ||||
| 	public default Vec3s abs(){return set((short)Math.abs(getX()), (short)Math.abs(getY()), (short)Math.abs(getZ()));} | ||||
| 	public default Vec3s abs() { return set((short)Math.abs(getX()), (short)Math.abs(getY()), (short)Math.abs(getZ())); } | ||||
| 	@Override | ||||
| 	public default Vec3s negate(){return set((short)0, (short)0, (short)0);} | ||||
| 	public default Vec3s negate() { return set((short)0, (short)0, (short)0); } | ||||
| 	@Override | ||||
| 	public default Vec3s invert(){return set((short)-getX(), (short)-getY(), (short)-getZ());} | ||||
| 	public default Vec3s invert() { return set((short)-getX(), (short)-getY(), (short)-getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3s add(short value){return add(value, value, value);}	 | ||||
| 	public default Vec3s add(Vec3s value){return add(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3s add(short x, short y, short z){return set((short)(getX() + x), (short)(getY() + y), (short)(getZ() + z));} | ||||
| 
 | ||||
| 	public default Vec3s add(short value) { return add(value, value, value); } | ||||
| 	public default Vec3s add(Vec3s value) { return add(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3s add(short x, short y, short z) { return set((short)(getX() + x), (short)(getY() + y), (short)(getZ() + z)); } | ||||
| 	@Override | ||||
| 	public default Vec3s sub(short value){return sub(value, value, value);} | ||||
| 	public default Vec3s sub(Vec3s value){return sub(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3s sub(short x, short y, short z){return set((short)(getX() - x), (short)(getY() - y), (short)(getZ() - z));} | ||||
| 	 | ||||
| 	public default Vec3s sub(short value) { return sub(value, value, value); } | ||||
| 	public default Vec3s sub(Vec3s value) { return sub(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3s sub(short x, short y, short z) { return set((short)(getX() - x), (short)(getY() - y), (short)(getZ() - z)); } | ||||
| 	@Override | ||||
| 	public default Vec3s multiply(short value){return multiply(value, value, value);} | ||||
| 	public default Vec3s multiply(Vec3s value){return multiply(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3s multiply(short x, short y, short z){return set((short)(getX() * x), (short)(getY() * y), (short)(getZ() * z));} | ||||
| 
 | ||||
| 	public default Vec3s multiply(short value) { return multiply(value, value, value); } | ||||
| 	public default Vec3s multiply(Vec3s value) { return multiply(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3s multiply(short x, short y, short z) { return set((short)(getX() * x), (short)(getY() * y), (short)(getZ() * z)); } | ||||
| 	@Override | ||||
| 	public default Vec3s devide(short value){return devide(value, value, value);} | ||||
| 	public default Vec3s devide(Vec3s value){return devide(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3s devide(short x, short y, short z){return set((short)(getX() / x), (short)(getY() / y), (short)(getZ() / z));} | ||||
| 	 | ||||
| 	public default Vec3s devide(short value) { return devide(value, value, value); } | ||||
| 	public default Vec3s devide(Vec3s value) { return devide(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default Vec3s devide(short x, short y, short z) { return set((short)(getX() / x), (short)(getY() / y), (short)(getZ() / z)); } | ||||
| 	@Override | ||||
| 	public default Vec3s set(short value){return set(value, value, value);} | ||||
| 	public default Vec3s set(Vec3s value){return set(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default Vec3s set(short value) { return set(value, value, value); } | ||||
| 	public default Vec3s set(Vec3s value) { return set(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public Vec3s set(short x, short y, short z); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec3s value){return distanceTo(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default double distanceTo(short x, short y, short z){return Math.sqrt(distanceToSquared(x, y, z));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec3s value){return distanceToSquared(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default long distanceToSquared(short x, short y, short z) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec3s value) { return distanceTo(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default double distanceTo(short x, short y, short z) { return Math.sqrt(distanceToSquared(x, y, z)); } | ||||
| 	public default long distanceToSquared(Vec3s value) { return distanceToSquared(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default long distanceToSquared(short x, short y, short z) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		long zPos = getZ() - z; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos); | ||||
| 	} | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ());} | ||||
| 	 | ||||
| 	public default long dotProduct(Vec3s value){return dotProduct(value.getX(), value.getY(), value.getZ());} | ||||
| 	public default long dotProduct(short x, short y, short z){return (getX() * x) + (getY() * y) + (getZ() * z);} | ||||
| 	 | ||||
| 	public default Vec3s min(Vec3s other) {return min(other, this);} | ||||
| 	public default Vec3s min(Vec3s other, Vec3s result){return min(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3s min(short x, short y, short z) {return min(x, y, z, this);} | ||||
| 	public default Vec3s min(short x, short y, short z, Vec3s result){return result.set((short)Math.min(getX(), x), (short)Math.min(getY(), y), (short)Math.min(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec3s max(Vec3s other) {return max(other, this);} | ||||
| 	public default Vec3s max(Vec3s other, Vec3s result){return max(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3s max(short x, short y, short z) {return max(x, y, z, this);} | ||||
| 	public default Vec3s max(short x, short y, short z, Vec3s result){return result.set((short)Math.max(getX(), x), (short)Math.max(getY(), y), (short)Math.max(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec3s difference(Vec3s other) {return difference(other, this);} | ||||
| 	public default Vec3s difference(Vec3s other, Vec3s result){return difference(other.getX(), other.getY(), other.getZ(), result);} | ||||
| 	public default Vec3s difference(short x, short y, short z) {return difference(x, y, z, this);} | ||||
| 	public default Vec3s difference(short x, short y, short z, Vec3s result){return result.set((short)(getX() - x), (short)(getY() - y), (short)(getZ() - z));} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3s clamp(short min, short max){return clamp(min, max, ALL);} | ||||
| 	public default Vec3s clamp(short min, short max, Vec3s result){return clamp(min, max, result, ALL);} | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()); } | ||||
| 	public default long dotProduct(Vec3s value) { return dotProduct(value.getX(), value.getY(), value.getZ()); } | ||||
| 	public default long dotProduct(short x, short y, short z) { return (getX() * x) + (getY() * y) + (getZ() * z); } | ||||
| 	public default Vec3s min(Vec3s other) { return min(other, this); } | ||||
| 	public default Vec3s min(Vec3s other, Vec3s result) { return min(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3s min(short x, short y, short z) { return min(x, y, z, this); } | ||||
| 	public default Vec3s min(short x, short y, short z, Vec3s result) { return result.set((short)Math.min(getX(), x), (short)Math.min(getY(), y), (short)Math.min(getZ(), z)); } | ||||
| 	public default Vec3s max(Vec3s other) { return max(other, this); } | ||||
| 	public default Vec3s max(Vec3s other, Vec3s result) { return max(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3s max(short x, short y, short z) { return max(x, y, z, this); } | ||||
| 	public default Vec3s max(short x, short y, short z, Vec3s result) { return result.set((short)Math.max(getX(), x), (short)Math.max(getY(), y), (short)Math.max(getZ(), z)); } | ||||
| 	public default Vec3s difference(Vec3s other) { return difference(other, this); } | ||||
| 	public default Vec3s difference(Vec3s other, Vec3s result) { return difference(other.getX(), other.getY(), other.getZ(), result); } | ||||
| 	public default Vec3s difference(short x, short y, short z) { return difference(x, y, z, this); } | ||||
| 	public default Vec3s difference(short x, short y, short z, Vec3s result) { return result.set((short)(getX() - x), (short)(getY() - y), (short)(getZ() - z)); } | ||||
| 	@Override | ||||
| 	public default Vec3s clamp(short min, short max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec3s clamp(short min, short max, Vec3s result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()));} | ||||
| 	public default Vec3s clamp(short min, short max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec3s clamp(short min, short max, Vec3s result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec3s clamp(short min, short max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec3s clamp(short min, short max, Vec3s result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3s store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3s store(ByteBuffer buffer) { | ||||
| 		buffer.putShort(getX()).putShort(getY()).putShort(getZ()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3s load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getShort(), buffer.getShort(), buffer.getShort()); | ||||
| 	} | ||||
| 	public default Vec3s load(ByteBuffer buffer) { return set(buffer.getShort(), buffer.getShort(), buffer.getShort()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3s store(ShortBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec3s store(ShortBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec3s load(ShortBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec3s load(ShortBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec3b asByte(){return isMutable() ? Vec3b.mutable((byte)getX(), (byte)getY(), (byte)getZ()) : Vec3b.of((byte)getX(), (byte)getY(), (byte)getZ());} | ||||
| 	public default Vec3b asByte() { return isMutable() ? Vec3b.mutable((byte)getX(), (byte)getY(), (byte)getZ()) : Vec3b.of((byte)getX(), (byte)getY(), (byte)getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3i asInt(){return isMutable() ? Vec3i.mutable(getX(), getY(), getZ()) : Vec3i.of(getX(), getY(), getZ());} | ||||
| 	public default Vec3i asInt() { return isMutable() ? Vec3i.mutable(getX(), getY(), getZ()) : Vec3i.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3l asLong(){return isMutable() ? Vec3l.mutable(getX(), getY(), getZ()) : Vec3l.of(getX(), getY(), getZ());} | ||||
| 	public default Vec3l asLong() { return isMutable() ? Vec3l.mutable(getX(), getY(), getZ()) : Vec3l.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3f asFloat() {return isMutable() ? Vec3f.mutable(getX(), getY(), getZ()) : Vec3f.of(getX(), getY(), getZ());} | ||||
| 	public default Vec3f asFloat() { return isMutable() ? Vec3f.mutable(getX(), getY(), getZ()) : Vec3f.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3d asDouble(){return isMutable() ? Vec3d.mutable(getX(), getY(), getZ()) : Vec3d.of(getX(), getY(), getZ());} | ||||
| 
 | ||||
| 	 | ||||
| 	public default Vec3d asDouble() { return isMutable() ? Vec3d.mutable(getX(), getY(), getZ()) : Vec3d.of(getX(), getY(), getZ()); } | ||||
| 	@Override | ||||
| 	public default Vec3s asMutable(){return isMutable() ? this : of(this);} | ||||
| 	public default Vec3s asMutable() { return isMutable() ? this : of(this); } | ||||
| 	@Override | ||||
| 	public default Vec3s asImmutable(){return isMutable() ? mutable(this) : this;} | ||||
| 	public default Vec3s asImmutable() { return isMutable() ? mutable(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec3s copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec3s copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec3s copyAsImmutable(){return of(this);} | ||||
| 	public default Vec3s copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,98 +2,53 @@ package speiger.src.coreengine.math.vector.shorts; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3sImmutable implements Vec3s | ||||
| { | ||||
| public class Vec3sImmutable implements Vec3s { | ||||
| 	final short x; | ||||
| 	final short y; | ||||
| 	final short z; | ||||
| 	 | ||||
| 	public Vec3sImmutable() | ||||
| 	{ | ||||
| 	public Vec3sImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3sImmutable(short value) | ||||
| 	{ | ||||
| 	public Vec3sImmutable(short value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3sImmutable(short x, short y, short z) | ||||
| 	{ | ||||
| 	public Vec3sImmutable(short x, short y, short z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public short getX() { return x; } | ||||
| 	@Override | ||||
| 	public short getY() { return y; } | ||||
| 	@Override | ||||
| 	public short getZ() { return z; } | ||||
| 	@Override | ||||
| 	public Vec3s setX(short x) { return this.x == x ? this : Vec3s.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3s setY(short y) { return this.y == y ? this : Vec3s.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3s setZ(short z) { return this.z == z ? this : Vec3s.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public Vec3s copy() { return Vec3s.of(this); } | ||||
| 	@Override | ||||
| 	public Vec3s set(short x, short y, short z) { return this.x == x && this.y == y && this.z == z ? this : Vec3s.of(x, y, z); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3s setX(short x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec3s.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3s setY(short y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec3s.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3s setZ(short z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec3s.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3s copy() | ||||
| 	{ | ||||
| 		return Vec3s.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3s set(short x, short y, short z) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z ? this : Vec3s.of(x, y, z); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3s) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3s) { | ||||
| 			Vec3s vec = (Vec3s)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -101,8 +56,5 @@ public class Vec3sImmutable implements Vec3s | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3s[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3s[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,84 +2,57 @@ package speiger.src.coreengine.math.vector.shorts; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec3sMutable implements Vec3s | ||||
| { | ||||
| public class Vec3sMutable implements Vec3s { | ||||
| 	short x; | ||||
| 	short y; | ||||
| 	short z; | ||||
| 	 | ||||
| 	public Vec3sMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec3sMutable() {} | ||||
| 	 | ||||
| 	public Vec3sMutable(short value) | ||||
| 	{ | ||||
| 	public Vec3sMutable(short value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3sMutable(short x, short y, short z) | ||||
| 	{ | ||||
| 	public Vec3sMutable(short x, short y, short z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public short getX() { return x; } | ||||
| 	@Override | ||||
| 	public short getY() { return y; } | ||||
| 	@Override | ||||
| 	public short getZ() { return z; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3s setX(short x) | ||||
| 	{ | ||||
| 	public Vec3s setX(short x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3s setY(short y) | ||||
| 	{ | ||||
| 	public Vec3s setY(short y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3s setZ(short z) | ||||
| 	{ | ||||
| 	public Vec3s setZ(short z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3s copy() | ||||
| 	{ | ||||
| 		return Vec3s.mutable(this); | ||||
| 	} | ||||
| 	public Vec3s copy() { return Vec3s.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec3s set(short x, short y, short z) | ||||
| 	{ | ||||
| 	public Vec3s set(short x, short y, short z) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -87,16 +60,11 @@ public class Vec3sMutable implements Vec3s | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec3s) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec3s) { | ||||
| 			Vec3s vec = (Vec3s)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z; | ||||
| 		} | ||||
| @ -104,8 +72,5 @@ public class Vec3sMutable implements Vec3s | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec3s[x="+x+", y="+y+", z="+z+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec3s[x="+x+", y="+y+", z="+z+"]"; } | ||||
| } | ||||
|  | ||||
| @ -10,21 +10,19 @@ import speiger.src.coreengine.math.vector.floats.Vec4f; | ||||
| import speiger.src.coreengine.math.vector.ints.Vec4i; | ||||
| import speiger.src.coreengine.math.vector.longs.Vec4l; | ||||
| 
 | ||||
| public interface Vec4s extends Vecs | ||||
| { | ||||
| public interface Vec4s extends Vecs { | ||||
| 	public static final Vec4s ZERO = of(); | ||||
| 	public static final Vec4s MINUS_ONE = of((short)-1); | ||||
| 	public static final Vec4s ONE = of((short)1); | ||||
| 	 | ||||
| 	public static Vec4s mutable(){return new Vec4sMutable();} | ||||
| 	public static Vec4s mutable(short value){return new Vec4sMutable(value);} | ||||
| 	public static Vec4s mutable(short x, short y, short z, short w){return new Vec4sMutable(x, y, z, w);} | ||||
| 	public static Vec4s mutable(Vec4s vec){return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	 | ||||
| 	public static Vec4s of(){return new Vec4sImmutable();} | ||||
| 	public static Vec4s of(short value){return new Vec4sImmutable(value);} | ||||
| 	public static Vec4s of(short x, short y, short z, short w){return new Vec4sImmutable(x, y, z, w);} | ||||
| 	public static Vec4s of(Vec4s vec){return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW());} | ||||
| 	public static Vec4s mutable() { return new Vec4sMutable(); } | ||||
| 	public static Vec4s mutable(short value) { return new Vec4sMutable(value); } | ||||
| 	public static Vec4s mutable(short x, short y, short z, short w) { return new Vec4sMutable(x, y, z, w); } | ||||
| 	public static Vec4s mutable(Vec4s vec) { return mutable(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	public static Vec4s of() { return new Vec4sImmutable(); } | ||||
| 	public static Vec4s of(short value) { return new Vec4sImmutable(value); } | ||||
| 	public static Vec4s of(short x, short y, short z, short w) { return new Vec4sImmutable(x, y, z, w); } | ||||
| 	public static Vec4s of(Vec4s vec) { return of(vec.getX(), vec.getY(), vec.getZ(), vec.getW()); } | ||||
| 	 | ||||
| 	public short getX(); | ||||
| 	public short getY(); | ||||
| @ -34,126 +32,104 @@ public interface Vec4s extends Vecs | ||||
| 	public Vec4s setY(short y); | ||||
| 	public Vec4s setZ(short z); | ||||
| 	public Vec4s setW(short w); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default short[] asArray(){return new short[]{getX(), getY(), getZ(), getW()};} | ||||
| 	public default short[] asArray() { return new short[] {getX(), getY(), getZ(), getW()}; } | ||||
| 	@Override | ||||
| 	public Vec4s copy(); | ||||
| 	@Override | ||||
| 	public default Vec4s abs(){return set((short)Math.abs(getX()), (short)Math.abs(getY()), (short)Math.abs(getZ()), (short)Math.abs(getW()));} | ||||
| 	public default Vec4s abs() { return set((short)Math.abs(getX()), (short)Math.abs(getY()), (short)Math.abs(getZ()), (short)Math.abs(getW())); } | ||||
| 	@Override | ||||
| 	public default Vec4s negate(){return set((short)0, (short)0, (short)0, (short)0);} | ||||
| 	public default Vec4s negate() { return set((short)0, (short)0, (short)0, (short)0); } | ||||
| 	@Override | ||||
| 	public default Vec4s invert(){return set((short)-getX(), (short)-getY(), (short)-getZ(), (short)-getW());} | ||||
| 	 | ||||
| 	public default Vec4s invert() { return set((short)-getX(), (short)-getY(), (short)-getZ(), (short)-getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4s add(short value){return add(value, value, value, value);}	 | ||||
| 	public default Vec4s add(Vec4s value){return add(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4s add(short x, short y, short z, short w){return set((short)(getX() + x), (short)(getY() + y), (short)(getZ() + z), (short)(getW() + w));} | ||||
| 
 | ||||
| 	public default Vec4s add(short value) { return add(value, value, value, value); } | ||||
| 	public default Vec4s add(Vec4s value) { return add(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4s add(short x, short y, short z, short w) { return set((short)(getX() + x), (short)(getY() + y), (short)(getZ() + z), (short)(getW() + w)); } | ||||
| 	@Override | ||||
| 	public default Vec4s sub(short value){return sub(value, value, value, value);} | ||||
| 	public default Vec4s sub(Vec4s value){return sub(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4s sub(short x, short y, short z, short w){return set((short)(getX() - x), (short)(getY() - y), (short)(getZ() - z), (short)(getW() - w));} | ||||
| 	 | ||||
| 	public default Vec4s sub(short value) { return sub(value, value, value, value); } | ||||
| 	public default Vec4s sub(Vec4s value) { return sub(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4s sub(short x, short y, short z, short w) { return set((short)(getX() - x), (short)(getY() - y), (short)(getZ() - z), (short)(getW() - w)); } | ||||
| 	@Override | ||||
| 	public default Vec4s multiply(short value){return multiply(value, value, value, value);} | ||||
| 	public default Vec4s multiply(Vec4s value){return multiply(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4s multiply(short x, short y, short z, short w){return set((short)(getX() * x), (short)(getY() * y), (short)(getZ() * z), (short)(getW() * w));} | ||||
| 	 | ||||
| 	public default Vec4s multiply(short value) { return multiply(value, value, value, value); } | ||||
| 	public default Vec4s multiply(Vec4s value) { return multiply(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4s multiply(short x, short y, short z, short w) { return set((short)(getX() * x), (short)(getY() * y), (short)(getZ() * z), (short)(getW() * w)); } | ||||
| 	@Override | ||||
| 	public default Vec4s devide(short value){return devide(value, value, value, value);} | ||||
| 	public default Vec4s devide(Vec4s value){return devide(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4s devide(short x, short y, short z, short w){return set((short)(getX() / x), (short)(getY() / y), (short)(getZ() / z), (short)(getW() / w));} | ||||
| 	 | ||||
| 	public default Vec4s devide(short value) { return devide(value, value, value, value); } | ||||
| 	public default Vec4s devide(Vec4s value) { return devide(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default Vec4s devide(short x, short y, short z, short w) { return set((short)(getX() / x), (short)(getY() / y), (short)(getZ() / z), (short)(getW() / w)); } | ||||
| 	@Override | ||||
| 	public default Vec4s set(short value){return set(value, value, value, value);} | ||||
| 	public default Vec4s set(Vec4s value){return set(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default Vec4s set(short value) { return set(value, value, value, value); } | ||||
| 	public default Vec4s set(Vec4s value) { return set(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public Vec4s set(short x, short y, short z, short w); | ||||
| 	 | ||||
| 	public default double distanceTo(Vec4s value){return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default double distanceTo(short x, short y, short z, short w){return Math.sqrt(distanceTo(x, y, z, w));} | ||||
| 	 | ||||
| 	public default long distanceToSquared(Vec4s value){return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default long distanceToSquared(short x, short y, short z, short w) | ||||
| 	{ | ||||
| 	public default double distanceTo(Vec4s value) { return distanceTo(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default double distanceTo(short x, short y, short z, short w) { return Math.sqrt(distanceTo(x, y, z, w)); } | ||||
| 	public default long distanceToSquared(Vec4s value) { return distanceToSquared(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default long distanceToSquared(short x, short y, short z, short w) { | ||||
| 		long xPos = getX() - x; | ||||
| 		long yPos = getY() - y; | ||||
| 		long zPos = getZ() - z; | ||||
| 		long wPos = getW() - w; | ||||
| 		return (xPos * xPos) + (yPos * yPos) + (zPos * zPos) + (wPos * wPos); | ||||
| 	} | ||||
| 	@Override | ||||
| 	public default long lengthSquared() {return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW());} | ||||
| 
 | ||||
| 	public default long dotProduct(Vec4s value){return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW());} | ||||
| 	public default long dotProduct(short x, short y, short z, short w){return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w);}; | ||||
| 	 | ||||
| 	public default Vec4s min(Vec4s other) {return min(other, this);} | ||||
| 	public default Vec4s min(Vec4s other, Vec4s result){return min(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4s min(short x, short y, short z, short w) {return min(x, y, z, w, this);} | ||||
| 	public default Vec4s min(short x, short y, short z, short w, Vec4s result){return result.set((short)Math.min(getX(), x), (short)Math.min(getY(), y), (short)Math.min(getZ(), z), (short)Math.min(getW(), w));} | ||||
| 	 | ||||
| 	public default Vec4s max(Vec4s other) {return max(other, this);} | ||||
| 	public default Vec4s max(Vec4s other, Vec4s result){return max(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4s max(short x, short y, short z, short w) {return max(x, y, z, w, this);} | ||||
| 	public default Vec4s max(short x, short y, short z, short w, Vec4s result){return result.set((short)Math.max(getX(), x), (short)Math.max(getY(), y), (short)Math.max(getZ(), z), (short)Math.max(getZ(), z));} | ||||
| 	 | ||||
| 	public default Vec4s difference(Vec4s other) {return difference(other, this);} | ||||
| 	public default Vec4s difference(Vec4s other, Vec4s result){return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result);} | ||||
| 	public default Vec4s difference(short x, short y, short z, short w) {return difference(x, y, z, w, this);} | ||||
| 	public default Vec4s difference(short x, short y, short z, short w, Vec4s result){return result.set((short)(getX() - x), (short)(getY() - y), (short)(getZ() - z), (short)(getW() - w));} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4s clamp(short min, short max){return clamp(min, max, ALL);} | ||||
| 	public default Vec4s clamp(short min, short max, Vec4s result){return clamp(min, max, result, ALL);} | ||||
| 	public default long lengthSquared() { return (getX() * getX()) + (getY() * getY()) + (getZ() * getZ()) + (getW() * getW()); } | ||||
| 	public default long dotProduct(Vec4s value) { return dotProduct(value.getX(), value.getY(), value.getZ(), value.getW()); } | ||||
| 	public default long dotProduct(short x, short y, short z, short w) { return (getX() * x) + (getY() * y) + (getZ() * z) + (getW() * w); }; | ||||
| 	public default Vec4s min(Vec4s other) { return min(other, this); } | ||||
| 	public default Vec4s min(Vec4s other, Vec4s result) { return min(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4s min(short x, short y, short z, short w) { return min(x, y, z, w, this); } | ||||
| 	public default Vec4s min(short x, short y, short z, short w, Vec4s result) { return result.set((short)Math.min(getX(), x), (short)Math.min(getY(), y), (short)Math.min(getZ(), z), (short)Math.min(getW(), w)); } | ||||
| 	public default Vec4s max(Vec4s other) { return max(other, this); } | ||||
| 	public default Vec4s max(Vec4s other, Vec4s result) { return max(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4s max(short x, short y, short z, short w) { return max(x, y, z, w, this); } | ||||
| 	public default Vec4s max(short x, short y, short z, short w, Vec4s result) { return result.set((short)Math.max(getX(), x), (short)Math.max(getY(), y), (short)Math.max(getZ(), z), (short)Math.max(getZ(), z)); } | ||||
| 	public default Vec4s difference(Vec4s other) { return difference(other, this); } | ||||
| 	public default Vec4s difference(Vec4s other, Vec4s result) { return difference(other.getX(), other.getY(), other.getZ(), other.getW(), result); } | ||||
| 	public default Vec4s difference(short x, short y, short z, short w) { return difference(x, y, z, w, this); } | ||||
| 	public default Vec4s difference(short x, short y, short z, short w, Vec4s result) { return result.set((short)(getX() - x), (short)(getY() - y), (short)(getZ() - z), (short)(getW() - w)); } | ||||
| 	@Override | ||||
| 	public default Vec4s clamp(short min, short max, int filter){return clamp(min, max, this, filter);} | ||||
| 	public default Vec4s clamp(short min, short max, Vec4s result, int filter){ return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW()));} | ||||
| 	public default Vec4s clamp(short min, short max) { return clamp(min, max, ALL); } | ||||
| 	public default Vec4s clamp(short min, short max, Vec4s result) { return clamp(min, max, result, ALL); } | ||||
| 	@Override | ||||
| 	public default Vec4s clamp(short min, short max, int filter) { return clamp(min, max, this, filter); } | ||||
| 	public default Vec4s clamp(short min, short max, Vec4s result, int filter) { return result.set((filter & X) == 0 ? getX() : MathUtils.clamp(min, max, getX()), (filter & Y) == 0 ? getY() : MathUtils.clamp(min, max, getY()), (filter & Z) == 0 ? getZ() : MathUtils.clamp(min, max, getZ()), (filter & W) == 0 ? getW() : MathUtils.clamp(min, max, getW())); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4s store(ByteBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec4s store(ByteBuffer buffer) { | ||||
| 		buffer.putShort(getX()).putShort(getY()).putShort(getZ()).putShort(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4s load(ByteBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.getShort(), buffer.getShort(), buffer.getShort(), buffer.getShort()); | ||||
| 	} | ||||
| 	public default Vec4s load(ByteBuffer buffer) { return set(buffer.getShort(), buffer.getShort(), buffer.getShort(), buffer.getShort()); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4s store(ShortBuffer buffer) | ||||
| 	{ | ||||
| 	public default Vec4s store(ShortBuffer buffer) { | ||||
| 		buffer.put(getX()).put(getY()).put(getZ()).put(getW()); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public default Vec4s load(ShortBuffer buffer) | ||||
| 	{ | ||||
| 		return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); | ||||
| 	} | ||||
| 	 | ||||
| 	public default Vec4s load(ShortBuffer buffer) { return set(buffer.get(), buffer.get(), buffer.get(), buffer.get()); } | ||||
| 	@Override | ||||
| 	public default Vec4b asByte(){return isMutable() ? Vec4b.mutable((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW()) : Vec4b.of((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW());} | ||||
| 	public default Vec4b asByte() { return isMutable() ? Vec4b.mutable((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW()) : Vec4b.of((byte)getX(), (byte)getY(), (byte)getZ(), (byte)getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4i asInt(){return isMutable() ? Vec4i.mutable(getX(), getY(), getZ(), getW()) : Vec4i.of(getX(), getY(), getZ(), getW());} | ||||
| 	public default Vec4i asInt() { return isMutable() ? Vec4i.mutable(getX(), getY(), getZ(), getW()) : Vec4i.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4l asLong(){return isMutable() ? Vec4l.mutable(getX(), getY(), getZ(), getW()) : Vec4l.of(getX(), getY(), getZ(), getW());} | ||||
| 	public default Vec4l asLong() { return isMutable() ? Vec4l.mutable(getX(), getY(), getZ(), getW()) : Vec4l.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4f asFloat() {return isMutable() ? Vec4f.mutable(getX(), getY(), getZ(), getW()) : Vec4f.of(getX(), getY(), getZ(), getW());} | ||||
| 	public default Vec4f asFloat() { return isMutable() ? Vec4f.mutable(getX(), getY(), getZ(), getW()) : Vec4f.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4d asDouble(){return isMutable() ? Vec4d.mutable(getX(), getY(), getZ(), getW()) : Vec4d.of(getX(), getY(), getZ(), getW());} | ||||
| 
 | ||||
| 	 | ||||
| 	public default Vec4d asDouble() { return isMutable() ? Vec4d.mutable(getX(), getY(), getZ(), getW()) : Vec4d.of(getX(), getY(), getZ(), getW()); } | ||||
| 	@Override | ||||
| 	public default Vec4s asMutable(){return isMutable() ? this : of(this);} | ||||
| 	public default Vec4s asMutable() { return isMutable() ? this : of(this); } | ||||
| 	@Override | ||||
| 	public default Vec4s asImmutable(){return isMutable() ? mutable(this) : this;} | ||||
| 	public default Vec4s asImmutable() { return isMutable() ? mutable(this) : this; } | ||||
| 	@Override | ||||
| 	public default Vec4s copyAsMutable(){return mutable(this);} | ||||
| 	public default Vec4s copyAsMutable() { return mutable(this); } | ||||
| 	@Override | ||||
| 	public default Vec4s copyAsImmutable(){return of(this);} | ||||
| 	public default Vec4s copyAsImmutable() { return of(this); } | ||||
| } | ||||
|  | ||||
| @ -2,31 +2,27 @@ package speiger.src.coreengine.math.vector.shorts; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4sImmutable implements Vec4s | ||||
| { | ||||
| public class Vec4sImmutable implements Vec4s { | ||||
| 	final short x; | ||||
| 	final short y; | ||||
| 	final short z; | ||||
| 	final short w; | ||||
| 	 | ||||
| 	public Vec4sImmutable() | ||||
| 	{ | ||||
| 	public Vec4sImmutable() { | ||||
| 		x = 0; | ||||
| 		y = 0; | ||||
| 		z = 0; | ||||
| 		w = 0; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4sImmutable(short value) | ||||
| 	{ | ||||
| 	public Vec4sImmutable(short value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4sImmutable(short x, short y, short z, short w) | ||||
| 	{ | ||||
| 	public Vec4sImmutable(short x, short y, short z, short w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -34,82 +30,33 @@ public class Vec4sImmutable implements Vec4s | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public boolean isMutable() { return false; } | ||||
| 	@Override | ||||
| 	public short getX() { return x; } | ||||
| 	@Override | ||||
| 	public short getY() { return y; } | ||||
| 	@Override | ||||
| 	public short getZ() { return z; } | ||||
| 	@Override | ||||
| 	public short getW() { return w; } | ||||
| 	@Override | ||||
| 	public Vec4s setX(short x) { return this.x == x ? this : Vec4s.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4s setY(short y) { return this.y == y ? this : Vec4s.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4s setZ(short z) { return this.z == z ? this : Vec4s.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4s setW(short w) { return this.w == w ? this : Vec4s.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public Vec4s copy() { return Vec4s.of(this); } | ||||
| 	@Override | ||||
| 	public Vec4s set(short x, short y, short z, short w) { return this.x == x && this.y == y && this.z == z && this.w == w ? this : Vec4s.of(x, y, z, w); } | ||||
| 	@Override | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s setX(short x) | ||||
| 	{ | ||||
| 		return this.x == x ? this : Vec4s.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s setY(short y) | ||||
| 	{ | ||||
| 		return this.y == y ? this : Vec4s.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s setZ(short z) | ||||
| 	{ | ||||
| 		return this.z == z ? this : Vec4s.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s setW(short w) | ||||
| 	{ | ||||
| 		return this.w == w ? this : Vec4s.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s copy() | ||||
| 	{ | ||||
| 		return Vec4s.of(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s set(short x, short y, short z, short w) | ||||
| 	{ | ||||
| 		return this.x == x && this.y == y && this.z == z && this.w == w ? this : Vec4s.of(x, y, z, w); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4s) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4s) { | ||||
| 			Vec4s vec = (Vec4s)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -117,8 +64,5 @@ public class Vec4sImmutable implements Vec4s | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4s[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4s[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -2,27 +2,22 @@ package speiger.src.coreengine.math.vector.shorts; | ||||
| 
 | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public class Vec4sMutable implements Vec4s | ||||
| { | ||||
| public class Vec4sMutable implements Vec4s { | ||||
| 	short x; | ||||
| 	short y; | ||||
| 	short z; | ||||
| 	short w; | ||||
| 	 | ||||
| 	public Vec4sMutable() | ||||
| 	{ | ||||
| 	} | ||||
| 	public Vec4sMutable() {} | ||||
| 	 | ||||
| 	public Vec4sMutable(short value) | ||||
| 	{ | ||||
| 	public Vec4sMutable(short value) { | ||||
| 		x = value; | ||||
| 		y = value; | ||||
| 		z = value; | ||||
| 		w = value; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec4sMutable(short x, short y, short z, short w) | ||||
| 	{ | ||||
| 	public Vec4sMutable(short x, short y, short z, short w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -30,72 +25,45 @@ public class Vec4sMutable implements Vec4s | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMutable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isMutable() { return true; } | ||||
| 	@Override | ||||
| 	public short getX() { return x; } | ||||
| 	@Override | ||||
| 	public short getY() { return y; } | ||||
| 	@Override | ||||
| 	public short getZ() { return z; } | ||||
| 	@Override | ||||
| 	public short getW() { return w; } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getX() | ||||
| 	{ | ||||
| 		return x; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getY() | ||||
| 	{ | ||||
| 		return y; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getZ() | ||||
| 	{ | ||||
| 		return z; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public short getW() | ||||
| 	{ | ||||
| 		return w; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s setX(short x) | ||||
| 	{ | ||||
| 	public Vec4s setX(short x) { | ||||
| 		this.x = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s setY(short y) | ||||
| 	{ | ||||
| 	public Vec4s setY(short y) { | ||||
| 		this.y = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s setZ(short z) | ||||
| 	{ | ||||
| 	public Vec4s setZ(short z) { | ||||
| 		this.z = z; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s setW(short w) | ||||
| 	{ | ||||
| 	public Vec4s setW(short w) { | ||||
| 		this.w = w; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s copy() | ||||
| 	{ | ||||
| 		return Vec4s.mutable(this); | ||||
| 	} | ||||
| 	public Vec4s copy() { return Vec4s.mutable(this); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public Vec4s set(short x, short y, short z, short w) | ||||
| 	{ | ||||
| 	public Vec4s set(short x, short y, short z, short w) { | ||||
| 		this.x = x; | ||||
| 		this.y = y; | ||||
| 		this.z = z; | ||||
| @ -104,16 +72,11 @@ public class Vec4sMutable implements Vec4s | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public int hashCode() | ||||
| 	{ | ||||
| 		return Objects.hash(x, y, z, w); | ||||
| 	} | ||||
| 	public int hashCode() { return Objects.hash(x, y, z, w); } | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean equals(Object obj) | ||||
| 	{ | ||||
| 		if(obj instanceof Vec4s) | ||||
| 		{ | ||||
| 	public boolean equals(Object obj) { | ||||
| 		if(obj instanceof Vec4s) { | ||||
| 			Vec4s vec = (Vec4s)obj; | ||||
| 			return vec.getX() == x && vec.getY() == y && vec.getZ() == z && vec.getW() == w; | ||||
| 		} | ||||
| @ -121,8 +84,5 @@ public class Vec4sMutable implements Vec4s | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Vec4s[x="+x+", y="+y+", z="+z+", w="+w+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "Vec4s[x="+x+", y="+y+", z="+z+", w="+w+"]"; } | ||||
| } | ||||
|  | ||||
| @ -9,8 +9,7 @@ import speiger.src.coreengine.math.vector.floats.Vecf; | ||||
| import speiger.src.coreengine.math.vector.ints.Veci; | ||||
| import speiger.src.coreengine.math.vector.longs.Vecl; | ||||
| 
 | ||||
| public interface Vecs extends Vec | ||||
| { | ||||
| public interface Vecs extends Vec { | ||||
| 	public Vecs set(short value); | ||||
| 	public Vecs add(short value); | ||||
| 	public Vecs sub(short value); | ||||
| @ -18,14 +17,11 @@ public interface Vecs extends Vec | ||||
| 	public Vecs devide(short value); | ||||
| 	public Vecs clamp(short min, short max); | ||||
| 	public Vecs clamp(short min, short max, int filter); | ||||
| 	 | ||||
| 	public long lengthSquared(); | ||||
| 	public default double length(){return Math.sqrt(lengthSquared());} | ||||
| 	 | ||||
| 	public default double length() { return Math.sqrt(lengthSquared()); } | ||||
| 	public Vecs store(ShortBuffer buffer); | ||||
| 	public Vecs load(ShortBuffer buffer); | ||||
| 	public short[] asArray(); | ||||
| 	 | ||||
| 	public Vecb asByte(); | ||||
| 	public Veci asInt(); | ||||
| 	public Vecl asLong(); | ||||
|  | ||||
| @ -167,42 +167,29 @@ public abstract class GuiBase | ||||
| 	 | ||||
| 	public final void onMouseEvent(MouseEvent evt) | ||||
| 	{ | ||||
| 		if(evt instanceof MouseClickEvent) | ||||
| 		{ | ||||
| 			MouseClickEvent click = (MouseClickEvent)evt; | ||||
| 			if(click.press) | ||||
| 			{ | ||||
| 				pressedButtons.add(click.button); | ||||
| 				if(onMousePressed(click.button, evt.mouseX, evt.mouseY)) | ||||
| 		if(evt instanceof MouseClickEvent click) | ||||
| 		{ | ||||
| 			if(click.isPress()) { | ||||
| 				pressedButtons.add(click.getButton()); | ||||
| 				if(onMousePressed(click.getButton(), evt.getX(), evt.getY())) | ||||
| 					evt.cancel(); | ||||
| 			} | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				pressedButtons.remove(click.button); | ||||
| 				if(onMouseReleased(click.button, evt.mouseX, evt.mouseY)) | ||||
| 				{ | ||||
| 				pressedButtons.remove(click.getButton()); | ||||
| 				if(onMouseReleased(click.getButton(), evt.getX(), evt.getY())) | ||||
| 					evt.cancel(); | ||||
| 			} | ||||
| 		} | ||||
| 		} | ||||
| 		else if(evt instanceof MouseMoveEvent && pressedButtons.size() > 0) | ||||
| 		{ | ||||
| 			if(onMouseDragged(pressedButtons.getButtons(), evt.mouseX, evt.mouseY, pressedButtons)) | ||||
| 			{ | ||||
| 		else if(evt instanceof MouseMoveEvent && pressedButtons.size() > 0) { | ||||
| 			if(onMouseDragged(pressedButtons.getButtons(), evt.getX(), evt.getY(), pressedButtons)) | ||||
| 				evt.cancel(); | ||||
| 		} | ||||
| 		} | ||||
| 		else if(evt instanceof MouseScrollEvent) | ||||
| 		{ | ||||
| 			MouseScrollEvent scroll = (MouseScrollEvent)evt; | ||||
| 			if(onMouseScroll(evt.mouseX, evt.mouseY, scroll.scrollY)) | ||||
| 			{ | ||||
| 		else if(evt instanceof MouseScrollEvent scroll) { | ||||
| 			if(onMouseScroll(evt.getX(), evt.getY(), scroll.getScrollY())) | ||||
| 				evt.cancel(); | ||||
| 		} | ||||
| 	} | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean onMousePressed(int button, int mouseX, int mouseY) | ||||
| 	{ | ||||
|  | ||||
| @ -40,8 +40,8 @@ public abstract class GuiManager implements IWindowListener | ||||
| 		this.window = window; | ||||
| 		font = manager.loadFont(AssetLocation.of("font/roboto.json"), 18.5F); | ||||
| 		bus.register(MouseEvent.class, this::onMouseEvent); | ||||
| 		bus.register(KeyPressEvent.class, (T) -> T.setCanceled(onKeyPressed(T.key))); | ||||
| 		bus.register(CharTypeEvent.class, (T) -> T.setCanceled(onCharTyped(T.character, T.codePoint))); | ||||
| 		bus.register(KeyPressEvent.class, T -> T.setCanceled(onKeyPressed(T.key))); | ||||
| 		bus.register(CharTypeEvent.class, T -> T.setCanceled(onCharTyped(T.character, T.codePoint))); | ||||
| 		window.addListener(this, false); | ||||
| 		debug = createOverlay(); | ||||
| 		activeGuis[1] = debug; | ||||
|  | ||||
| @ -86,6 +86,7 @@ public class CheckBoxGroup<T extends GuiComponent & ICheckBox<T>> implements Con | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	@SuppressWarnings("unchecked") | ||||
| 	public void accept(GuiComponent t) | ||||
| 	{ | ||||
| 		ICheckBox<T> box = t.tryCast(ICheckBox.class); | ||||
|  | ||||
| @ -6,7 +6,7 @@ import speiger.src.collections.objects.lists.ObjectArrayList; | ||||
| 
 | ||||
| public class GuiBox implements IGuiBox | ||||
| { | ||||
| 	List<IGuiBox> children = new ObjectArrayList<IGuiBox>(); | ||||
| 	List<IGuiBox> children = new ObjectArrayList<>(); | ||||
| 	IGuiBox parent; | ||||
| 		 | ||||
| 	float minX; | ||||
| @ -25,54 +25,41 @@ public class GuiBox implements IGuiBox | ||||
| 	float baseScale = 1F; | ||||
| 	 | ||||
| 	 | ||||
| 	protected GuiBox() | ||||
| 	{ | ||||
| 	} | ||||
| 	protected GuiBox() {} | ||||
| 	 | ||||
| 	public GuiBox(float x, float y, float width, float height) | ||||
| 	{ | ||||
| 	public GuiBox(float x, float y, float width, float height) { | ||||
| 		set(x, y, width, height); | ||||
| 		onChanged(); | ||||
| 	} | ||||
| 	 | ||||
| 	public static IGuiBox createSimpleBox(float x, float y, float width, float height) | ||||
| 	{ | ||||
| 	public static IGuiBox createSimpleBox(float x, float y, float width, float height) { | ||||
| 		return new GuiBox(x, y, width, height); | ||||
| 	} | ||||
| 	 | ||||
| 	public static IGuiBox createParentBox(IGuiBox box) | ||||
| 	{ | ||||
| 	public static IGuiBox createParentBox(IGuiBox box) { | ||||
| 		return new GuiBox(box.getMinX(), box.getMinY(), box.getWidth(), box.getHeight()); | ||||
| 	} | ||||
| 	 | ||||
| 	public static IGuiBox createParentBox(IGuiBox box, float padding) | ||||
| 	{ | ||||
| 		return new GuiBox(box.getMinX() + padding, box.getMinY() + padding, box.getWidth() - (padding * 2F), box.getHeight() - (padding * 2F)); | ||||
| 	public static IGuiBox createParentBox(IGuiBox box, float padding) { | ||||
| 		return new GuiBox(box.getMinX() + padding, box.getMinY() + padding, box.getWidth() - padding * 2F, box.getHeight() - padding * 2F); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox addChild(IGuiBox box) | ||||
| 	{ | ||||
| 	public IGuiBox addChild(IGuiBox box) { | ||||
| 		children.add(box); | ||||
| 		box.setParent(this); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox removeChild(IGuiBox box) | ||||
| 	{ | ||||
| 		if(children.remove(box)) | ||||
| 		{ | ||||
| 			box.setParent(null); | ||||
| 		} | ||||
| 	public IGuiBox removeChild(IGuiBox box) { | ||||
| 		if(children.remove(box)) box.setParent(null); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox clearChildren() | ||||
| 	{ | ||||
| 		for(int i = 0,m=children.size();i<m;i++) | ||||
| 		{ | ||||
| 	public IGuiBox clearChildren() { | ||||
| 		for(int i = 0,m=children.size();i<m;i++) { | ||||
| 			children.get(i).setParent(null); | ||||
| 		} | ||||
| 		children.clear(); | ||||
| @ -80,192 +67,96 @@ public class GuiBox implements IGuiBox | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox onChanged() | ||||
| 	{ | ||||
| 		minX = (parent == null ? baseX : parent.getMinX(baseX)); | ||||
| 		minY = (parent == null ? baseY : parent.getMinY(baseY)); | ||||
| 		maxX = (parent == null ? baseX + width : parent.getMinX(baseX + width)); | ||||
| 		maxY = (parent == null ? baseY + height : parent.getMinY(baseY + height)); | ||||
| 		scale = (parent == null ? baseScale : parent.getScale() * baseScale); | ||||
| 		for(int i = 0,m=children.size();i<m;i++) | ||||
| 		{ | ||||
| 	public IGuiBox onChanged() { | ||||
| 		minX = parent == null ? baseX : parent.getMinX(baseX); | ||||
| 		minY = parent == null ? baseY : parent.getMinY(baseY); | ||||
| 		maxX = parent == null ? baseX + width : parent.getMinX(baseX + width); | ||||
| 		maxY = parent == null ? baseY + height : parent.getMinY(baseY + height); | ||||
| 		scale = parent == null ? baseScale : parent.getScale() * baseScale; | ||||
| 		for(int i = 0,m=children.size();i<m;i++) { | ||||
| 			children.get(i).onChanged(); | ||||
| 		} | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox setParent(IGuiBox box) | ||||
| 	{ | ||||
| 	public IGuiBox setParent(IGuiBox box) { | ||||
| 		parent = box; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox getParent() | ||||
| 	{ | ||||
| 		return parent; | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox getParent() { return parent; } | ||||
| 	@Override | ||||
| 	public float getScale() | ||||
| 	{ | ||||
| 		return scale; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getScale() { return scale; } | ||||
| 	@Override | ||||
| 	public float getBaseX() | ||||
| 	{ | ||||
| 		return baseX; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getBaseX() { return baseX; } | ||||
| 	@Override | ||||
| 	public float getBaseY() | ||||
| 	{ | ||||
| 		return baseY; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getBaseY() { return baseY; } | ||||
| 	@Override | ||||
| 	public float getRelativeX() | ||||
| 	{ | ||||
| 		return parent != null ? baseX : 0F; | ||||
| 	} | ||||
| 
 | ||||
| 	public float getRelativeX() { return parent != null ? baseX : 0F; } | ||||
| 	@Override | ||||
| 	public float getRelativeY() | ||||
| 	{ | ||||
| 		return parent != null ? baseY : 0F; | ||||
| 	} | ||||
| 
 | ||||
| 	public float getRelativeY() { return parent != null ? baseY : 0F; } | ||||
| 	@Override | ||||
| 	public float getWidth() | ||||
| 	{ | ||||
| 		return baseWidth * scale; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getWidth() { return baseWidth * scale; } | ||||
| 	@Override | ||||
| 	public float getWidth(float extra) | ||||
| 	{ | ||||
| 		return (baseWidth * scale) + (extra * baseScale); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getWidth(float extra) { return baseWidth * scale + extra * baseScale; } | ||||
| 	@Override | ||||
| 	public float getHeight() | ||||
| 	{ | ||||
| 		return baseHeight * scale; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getHeight() { return baseHeight * scale; } | ||||
| 	@Override | ||||
| 	public float getHeight(float extra) | ||||
| 	{ | ||||
| 		return (baseHeight * scale) + (extra * baseScale); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getHeight(float extra) { return baseHeight * scale + extra * baseScale; } | ||||
| 	@Override | ||||
| 	public float getMinX() | ||||
| 	{ | ||||
| 		return minX; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMinX() { return minX; } | ||||
| 	@Override | ||||
| 	public float getMinX(float extra) | ||||
| 	{ | ||||
| 		return minX + (extra * scale); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMinX(float extra) { return minX + extra * scale; } | ||||
| 	@Override | ||||
| 	public float getMinY() | ||||
| 	{ | ||||
| 		return minY; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMinY() { return minY; }  | ||||
| 	@Override | ||||
| 	public float getMinY(float extra) | ||||
| 	{ | ||||
| 		return minY + (extra * scale); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMinY(float extra) { return minY + extra * scale; } | ||||
| 	@Override | ||||
| 	public float getMaxX() | ||||
| 	{ | ||||
| 		return maxX; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMaxX() { return maxX; } | ||||
| 	@Override | ||||
| 	public float getMaxX(float extra) | ||||
| 	{ | ||||
| 		return maxX + (extra * scale); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMaxX(float extra) { return maxX + extra * scale; } | ||||
| 	@Override | ||||
| 	public float getMaxY() | ||||
| 	{ | ||||
| 		return maxY; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMaxY() { return maxY; } | ||||
| 	@Override | ||||
| 	public float getMaxY(float extra) | ||||
| 	{ | ||||
| 		return maxY + (extra * scale); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMaxY(float extra) { return maxY + extra * scale; } | ||||
| 	@Override | ||||
| 	public float getCenterX() | ||||
| 	{ | ||||
| 		return minX + ((maxX - minX) * 0.5F); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getCenterX() { return minX + (maxX - minX) * 0.5F; }  | ||||
| 	@Override | ||||
| 	public float getCenterX(float extra) | ||||
| 	{ | ||||
| 		return minX + ((maxX - minX) * 0.5F) + (extra * scale); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getCenterX(float extra) { return minX + (maxX - minX) * 0.5F + extra * scale; } | ||||
| 	@Override | ||||
| 	public float getCenterY() | ||||
| 	{ | ||||
| 		return minY + ((maxY - minY) * 0.5F); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getCenterY() { return minY + (maxY - minY) * 0.5F; } | ||||
| 	@Override | ||||
| 	public float getCenterY(float extra) | ||||
| 	{ | ||||
| 		return minY + ((maxY - minY) * 0.5F) + (extra * scale); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getCenterY(float extra) { return minY + (maxY - minY) * 0.5F + extra * scale; } | ||||
| 	@Override | ||||
| 	public IGuiBox setX(float x) | ||||
| 	{ | ||||
| 	public IGuiBox setX(float x) { | ||||
| 		baseX = x; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox setY(float y) | ||||
| 	{ | ||||
| 	public IGuiBox setY(float y) { | ||||
| 		baseY = y; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox setWidth(float width) | ||||
| 	{ | ||||
| 	public IGuiBox setWidth(float width) { | ||||
| 		baseWidth = width; | ||||
| 		this.width = baseWidth * baseScale; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox setHeight(float height) | ||||
| 	{ | ||||
| 	public IGuiBox setHeight(float height) { | ||||
| 		baseHeight = height; | ||||
| 		this.height = baseHeight * baseScale; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox setScale(float scale) | ||||
| 	{ | ||||
| 	public IGuiBox setScale(float scale) { | ||||
| 		baseScale = scale; | ||||
| 		width = baseWidth * baseScale; | ||||
| 		height = baseHeight * baseScale; | ||||
| @ -273,44 +164,17 @@ public class GuiBox implements IGuiBox | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox move(float xOffset, float yOffset) | ||||
| 	{ | ||||
| 		return setXY(baseX + xOffset, baseY + yOffset); | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox move(float xOffset, float yOffset) { return setXY(baseX + xOffset, baseY + yOffset); } | ||||
| 	@Override | ||||
| 	public IGuiBox grow(float xGrowth, float yGrowth) | ||||
| 	{ | ||||
| 		return setBounds(baseWidth + xGrowth, baseHeight + yGrowth); | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox grow(float xGrowth, float yGrowth) { return setBounds(baseWidth + xGrowth, baseHeight + yGrowth); } | ||||
| 	@Override | ||||
| 	public IGuiBox scale(float scale) | ||||
| 	{ | ||||
| 		return setScale(scale * baseScale); | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox scale(float scale) { return setScale(scale * baseScale); } | ||||
| 	@Override | ||||
| 	public float getBaseScale() | ||||
| 	{ | ||||
| 		return baseScale; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getBaseScale() { return baseScale; } | ||||
| 	@Override | ||||
| 	public float getBaseWidth() | ||||
| 	{ | ||||
| 		return baseWidth; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getBaseWidth() { return baseWidth; } | ||||
| 	@Override | ||||
| 	public float getBaseHeight() | ||||
| 	{ | ||||
| 		return baseHeight; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getBaseHeight() { return baseHeight; } | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "GuiBox[minX="+minX+", minY="+minY+", maxX="+maxX+", maxY="+maxY+", width="+width+", height="+height+"]"; | ||||
| 	} | ||||
| 	public String toString() { return "GuiBox[minX="+minX+", minY="+minY+", maxX="+maxX+", maxY="+maxY+", width="+width+", height="+height+"]"; } | ||||
| } | ||||
|  | ||||
| @ -26,13 +26,11 @@ public interface IGuiBox extends IScreenBox | ||||
| 	public float getWidth(float extra); | ||||
| 	public float getHeight(); | ||||
| 	public float getHeight(float extra); | ||||
| 	public default float getSquaredWidth() | ||||
| 	{ | ||||
| 	public default float getSquaredWidth() { | ||||
| 		float value = getWidth(); | ||||
| 		return value * value; | ||||
| 	} | ||||
| 	public default float getSquaredHeight() | ||||
| 	{ | ||||
| 	public default float getSquaredHeight() { | ||||
| 		float value = getHeight(); | ||||
| 		return value * value; | ||||
| 	} | ||||
| @ -60,22 +58,18 @@ public interface IGuiBox extends IScreenBox | ||||
| 	public IGuiBox grow(float xGrowth, float yGrowth); | ||||
| 	public IGuiBox scale(float scale); | ||||
| 	 | ||||
| 	public default IGuiBox setXY(float x, float y){return setX(x).setY(y);} | ||||
| 	public default IGuiBox setXY(Vec2f pos){return setX(pos.getX()).setY(pos.getY());} | ||||
| 	public default IGuiBox setXY(float x, float y) { return setX(x).setY(y); } | ||||
| 	public default IGuiBox setXY(Vec2f pos) { return setX(pos.getX()).setY(pos.getY()); } | ||||
| 	 | ||||
| 	public default IGuiBox setBounds(float width, float height){return setWidth(width).setHeight(height);} | ||||
| 	public default IGuiBox setBounds(Vec2f bounds){return setWidth(bounds.getX()).setHeight(bounds.getY());} | ||||
| 	public default IGuiBox setBounds(float width, float height) { return setWidth(width).setHeight(height); } | ||||
| 	public default IGuiBox setBounds(Vec2f bounds) {return setWidth(bounds.getX()).setHeight(bounds.getY()); } | ||||
| 	 | ||||
| 	public default IGuiBox set(float x, float y, float width, float height){return setX(x).setY(y).setWidth(width).setHeight(height);} | ||||
| 	public default IGuiBox set(Vec4f vec){return setX(vec.getX()).setY(vec.getY()).setWidth(vec.getZ()).setHeight(vec.getW());} | ||||
| 	public default IGuiBox set(float x, float y, float width, float height) { return setX(x).setY(y).setWidth(width).setHeight(height); } | ||||
| 	public default IGuiBox set(Vec4f vec) { return setX(vec.getX()).setY(vec.getY()).setWidth(vec.getZ()).setHeight(vec.getW()); } | ||||
| 	 | ||||
| 	public default boolean isColiding(float x, float y) | ||||
| 	{ | ||||
| 		return getMinX() <= x && getMaxX() >= x && getMinY() <= y && getMaxY() >= y; | ||||
| 	} | ||||
| 	public default boolean isColiding(float x, float y) { return getMinX() <= x && getMaxX() >= x && getMinY() <= y && getMaxY() >= y; } | ||||
| 	 | ||||
| 	public default FacingList getColidingBorder(float x, float y, float margin) | ||||
| 	{ | ||||
| 	public default FacingList getColidingBorder(float x, float y, float margin) { | ||||
| 		margin *= getScale(); | ||||
| 		float minX = getMinX(); | ||||
| 		float maxX = getMaxX(); | ||||
| @ -89,9 +83,8 @@ public interface IGuiBox extends IScreenBox | ||||
| 		return list; | ||||
| 	} | ||||
| 	 | ||||
| 	public default boolean isIntersecting(IGuiBox box){return isIntersecting(box.getMinX(), box.getMaxX(), box.getMinY(), box.getMaxY());} | ||||
| 	public default boolean isIntersecting(float minX, float maxX, float minY, float maxY) | ||||
| 	{ | ||||
| 	public default boolean isIntersecting(IGuiBox box) { return isIntersecting(box.getMinX(), box.getMaxX(), box.getMinY(), box.getMaxY()); } | ||||
| 	public default boolean isIntersecting(float minX, float maxX, float minY, float maxY) { | ||||
| 		float xMin = getMinX(); | ||||
| 		float yMin = getMinY(); | ||||
| 		float xMax = getMaxX(); | ||||
|  | ||||
| @ -3,19 +3,15 @@ package speiger.src.coreengine.rendering.gui.helper.box; | ||||
| public interface IScreenBox | ||||
| { | ||||
| 	public float getBaseScale(); | ||||
| 	 | ||||
| 	public float getBaseWidth(); | ||||
| 	public float getBaseHeight(); | ||||
| 	 | ||||
| 	public default float getSquaredBaseWidth() | ||||
| 	{ | ||||
| 	public default float getSquaredBaseWidth() { | ||||
| 		float value = getBaseWidth(); | ||||
| 		return value * value; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getBaseHeight(); | ||||
| 	 | ||||
| 	public default float getSquaredBaseHeight() | ||||
| 	{ | ||||
| 	public default float getSquaredBaseHeight() { | ||||
| 		float value = getBaseWidth(); | ||||
| 		return value * value; | ||||
| 	} | ||||
|  | ||||
| @ -6,7 +6,7 @@ import speiger.src.collections.objects.lists.ObjectArrayList; | ||||
| 
 | ||||
| public class ParentBox implements IGuiBox | ||||
| { | ||||
| 	List<IGuiBox> children = new ObjectArrayList<IGuiBox>(); | ||||
| 	List<IGuiBox> children = new ObjectArrayList<>(); | ||||
| 	IGuiBox parent; | ||||
| 	 | ||||
| 	float minX; | ||||
| @ -14,16 +14,14 @@ public class ParentBox implements IGuiBox | ||||
| 	float maxX; | ||||
| 	float maxY; | ||||
| 	 | ||||
| 	public ParentBox(float value) | ||||
| 	{ | ||||
| 	public ParentBox(float value) { | ||||
| 		minX = value; | ||||
| 		minY = value; | ||||
| 		maxX = -value; | ||||
| 		maxY = -value; | ||||
| 	} | ||||
| 	 | ||||
| 	public ParentBox(float paddingTop, float paddingLeft, float paddingBottom, float paddingRight) | ||||
| 	{ | ||||
| 	public ParentBox(float paddingTop, float paddingLeft, float paddingBottom, float paddingRight) { | ||||
| 		minX = paddingLeft; | ||||
| 		minY = paddingTop; | ||||
| 		maxX = paddingRight; | ||||
| @ -31,28 +29,21 @@ public class ParentBox implements IGuiBox | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox addChild(IGuiBox box) | ||||
| 	{ | ||||
| 	public IGuiBox addChild(IGuiBox box) { | ||||
| 		children.add(box); | ||||
| 		box.setParent(this); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox removeChild(IGuiBox box) | ||||
| 	{ | ||||
| 		if(children.remove(box)) | ||||
| 		{ | ||||
| 			box.setParent(null); | ||||
| 		} | ||||
| 	public IGuiBox removeChild(IGuiBox box) { | ||||
| 		if(children.remove(box)) box.setParent(null); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox clearChildren() | ||||
| 	{ | ||||
| 		for(int i = 0,m=children.size();i<m;i++) | ||||
| 		{ | ||||
| 	public IGuiBox clearChildren() { | ||||
| 		for(int i = 0,m=children.size();i<m;i++) { | ||||
| 			children.get(i).setParent(null); | ||||
| 		} | ||||
| 		children.clear(); | ||||
| @ -60,217 +51,83 @@ public class ParentBox implements IGuiBox | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox onChanged() | ||||
| 	{ | ||||
| 		for(int i = 0,m=children.size();i<m;i++) | ||||
| 		{ | ||||
| 	public IGuiBox onChanged() { | ||||
| 		for(int i = 0,m=children.size();i<m;i++) { | ||||
| 			children.get(i).onChanged(); | ||||
| 		} | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox setParent(IGuiBox box) | ||||
| 	{ | ||||
| 	public IGuiBox setParent(IGuiBox box) { | ||||
| 		parent = box; | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox getParent() | ||||
| 	{ | ||||
| 		return parent; | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox getParent() { return parent; } | ||||
| 	@Override | ||||
| 	public float getScale() | ||||
| 	{ | ||||
| 		return parent.getScale(); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getScale() { return parent.getScale(); } | ||||
| 	@Override | ||||
| 	public float getBaseX() | ||||
| 	{ | ||||
| 		return minX + parent.getBaseX(); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getBaseX() { return minX + parent.getBaseX(); } | ||||
| 	@Override | ||||
| 	public float getBaseY() | ||||
| 	{ | ||||
| 		return minY + parent.getBaseY(); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getBaseY() { return minY + parent.getBaseY(); } | ||||
| 	@Override | ||||
| 	public float getRelativeX() | ||||
| 	{ | ||||
| 		return minX + parent.getRelativeX(); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getRelativeX() { return minX + parent.getRelativeX(); } | ||||
| 	@Override | ||||
| 	public float getRelativeY() | ||||
| 	{ | ||||
| 		return minY + parent.getRelativeY(); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getRelativeY() { return minY + parent.getRelativeY(); } | ||||
| 	@Override | ||||
| 	public float getWidth() | ||||
| 	{ | ||||
| 		return parent.getWidth(maxX - minX); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getWidth() { return parent.getWidth(maxX - minX); } | ||||
| 	@Override | ||||
| 	public float getWidth(float extra) | ||||
| 	{ | ||||
| 		return parent.getWidth((maxX - minX) + extra); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getWidth(float extra) { return parent.getWidth((maxX - minX) + extra); } | ||||
| 	@Override | ||||
| 	public float getHeight() | ||||
| 	{ | ||||
| 		return parent.getHeight(maxY - minY); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getHeight() { return parent.getHeight(maxY - minY); } | ||||
| 	@Override | ||||
| 	public float getHeight(float extra) | ||||
| 	{ | ||||
| 		return parent.getHeight((maxY - minY) + extra); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getHeight(float extra) { return parent.getHeight((maxY - minY) + extra); } | ||||
| 	@Override | ||||
| 	public float getMinX() | ||||
| 	{ | ||||
| 		return parent.getMinX(minX); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMinX() { return parent.getMinX(minX); } | ||||
| 	@Override | ||||
| 	public float getMinX(float extra) | ||||
| 	{ | ||||
| 		return parent.getMinX(minX + extra); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMinX(float extra) { return parent.getMinX(minX + extra); } | ||||
| 	@Override | ||||
| 	public float getMinY() | ||||
| 	{ | ||||
| 		return parent.getMinY(minY); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMinY() { return parent.getMinY(minY); } | ||||
| 	@Override | ||||
| 	public float getMinY(float extra) | ||||
| 	{ | ||||
| 		return parent.getMinY(minY + extra); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMinY(float extra) { return parent.getMinY(minY + extra); } | ||||
| 	@Override | ||||
| 	public float getMaxX() | ||||
| 	{ | ||||
| 		return parent.getMaxX(maxX); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMaxX() { return parent.getMaxX(maxX); } | ||||
| 	@Override | ||||
| 	public float getMaxX(float extra) | ||||
| 	{ | ||||
| 		return parent.getMaxX(maxX + extra); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMaxX(float extra) { return parent.getMaxX(maxX + extra); } | ||||
| 	@Override | ||||
| 	public float getMaxY() | ||||
| 	{ | ||||
| 		return parent.getMaxY(maxY); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMaxY() { return parent.getMaxY(maxY); } | ||||
| 	@Override | ||||
| 	public float getMaxY(float extra) | ||||
| 	{ | ||||
| 		return parent.getMaxY(maxY + extra); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getMaxY(float extra) { return parent.getMaxY(maxY + extra); } | ||||
| 	@Override | ||||
| 	public float getCenterX() | ||||
| 	{ | ||||
| 		return parent.getCenterX((maxX - minX) * 0.5F); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getCenterX() { return parent.getCenterX((maxX - minX) * 0.5F); }  | ||||
| 	@Override | ||||
| 	public float getCenterX(float extra) | ||||
| 	{ | ||||
| 		return parent.getCenterX(((maxX - minX) * 0.5F) + extra); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getCenterX(float extra) { return parent.getCenterX((maxX - minX) * 0.5F + extra); } | ||||
| 	@Override | ||||
| 	public float getCenterY() | ||||
| 	{ | ||||
| 		return parent.getCenterY((maxY - minY) * 0.5F); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getCenterY() { return parent.getCenterY((maxY - minY) * 0.5F); } | ||||
| 	@Override | ||||
| 	public float getCenterY(float extra) | ||||
| 	{ | ||||
| 		return parent.getCenterY(((maxY - minY) * 0.5F) + extra); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getCenterY(float extra) { return parent.getCenterY((maxY - minY) * 0.5F + extra); } | ||||
| 	@Override | ||||
| 	public IGuiBox setX(float x) | ||||
| 	{ | ||||
| 		throw new UnsupportedOperationException(); | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox setX(float x) { throw new UnsupportedOperationException(); } | ||||
| 	@Override | ||||
| 	public IGuiBox setY(float y) | ||||
| 	{ | ||||
| 		throw new UnsupportedOperationException(); | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox setY(float y) { throw new UnsupportedOperationException(); } | ||||
| 	@Override | ||||
| 	public IGuiBox setWidth(float width) | ||||
| 	{ | ||||
| 		throw new UnsupportedOperationException(); | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox setWidth(float width) { throw new UnsupportedOperationException(); } | ||||
| 	@Override | ||||
| 	public IGuiBox setHeight(float height) | ||||
| 	{ | ||||
| 		throw new UnsupportedOperationException(); | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox setHeight(float height) { throw new UnsupportedOperationException(); } | ||||
| 	@Override | ||||
| 	public IGuiBox setScale(float scale) | ||||
| 	{ | ||||
| 		throw new UnsupportedOperationException(); | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox setScale(float scale) { throw new UnsupportedOperationException(); } | ||||
| 	@Override | ||||
| 	public IGuiBox move(float xOffset, float yOffset) | ||||
| 	{ | ||||
| 		throw new UnsupportedOperationException(); | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox move(float xOffset, float yOffset) { throw new UnsupportedOperationException(); } | ||||
| 	@Override | ||||
| 	public IGuiBox grow(float xGrowth, float yGrowth) | ||||
| 	{ | ||||
| 		throw new UnsupportedOperationException(); | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox grow(float xGrowth, float yGrowth) { throw new UnsupportedOperationException(); } | ||||
| 	@Override | ||||
| 	public IGuiBox scale(float scale) | ||||
| 	{ | ||||
| 		throw new UnsupportedOperationException(); | ||||
| 	} | ||||
| 	 | ||||
| 	public IGuiBox scale(float scale) { throw new UnsupportedOperationException(); } | ||||
| 	@Override | ||||
| 	public float getBaseScale() | ||||
| 	{ | ||||
| 		return 1F; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getBaseScale() { return 1F; } | ||||
| 	@Override | ||||
| 	public float getBaseWidth() | ||||
| 	{ | ||||
| 		return parent.getBaseWidth() + (maxX - minX); | ||||
| 	} | ||||
| 	 | ||||
| 	public float getBaseWidth() { return parent.getBaseWidth() + (maxX - minX); } | ||||
| 	@Override | ||||
| 	public float getBaseHeight() | ||||
| 	{ | ||||
| 		return parent.getBaseHeight() + (maxY - minY); | ||||
| 	} | ||||
| 	public float getBaseHeight() { return parent.getBaseHeight() + (maxY - minY); } | ||||
| } | ||||
|  | ||||
| @ -93,7 +93,7 @@ public class BitmapFontProvider implements IFontProvider | ||||
| 	{ | ||||
| 		FontInfo info = new FontInfo(object.getAsJsonObject("info")); | ||||
| 		float multiplier = info.setDesiredHeight(desiredSize); | ||||
| 		Int2ObjectMap<CharInstance>[] maps = new Int2ObjectMap[]{new Int2ObjectOpenHashMap<CharInstance>(), new Int2ObjectOpenHashMap<CharInstance>()}; | ||||
| 		Int2ObjectMap<CharInstance>[] maps = new Int2ObjectMap[]{new Int2ObjectOpenHashMap<>(), new Int2ObjectOpenHashMap<>()}; | ||||
| 		JsonUtil.iterate(object.get("chars"), T -> { | ||||
| 			CharInstance instance = info.create(T); | ||||
| 			instance.scale(multiplier); | ||||
|  | ||||
| @ -1,6 +1,8 @@ | ||||
| package speiger.src.coreengine.rendering.input; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.nio.file.Files; | ||||
| import java.nio.file.Path; | ||||
| import java.nio.file.Paths; | ||||
| 
 | ||||
| import org.lwjgl.glfw.GLFW; | ||||
| import org.lwjgl.glfw.GLFWDropCallback; | ||||
| @ -15,24 +17,19 @@ public class DropListener | ||||
| 	EventBus bus; | ||||
| 	ScaledResolution resolution; | ||||
| 	 | ||||
| 	public DropListener(Window window, EventBus bus) | ||||
| 	{ | ||||
| 	public DropListener(Window window, EventBus bus) { | ||||
| 		window.addCallback(T -> GLFW.glfwSetDropCallback(T, this::onFileDropped)); | ||||
| 		resolution = window.getUIFrame(); | ||||
| 		this.bus = bus; | ||||
| 	} | ||||
| 	 | ||||
| 	public void onFileDropped(long windowId, int count, long names) | ||||
| 	{ | ||||
| 	public void onFileDropped(long windowId, int count, long names) { | ||||
| 		int x = Mouse.getX(); | ||||
| 		int y = Mouse.getY(); | ||||
| 		for(int i = 0;i<count;i++) | ||||
| 		{ | ||||
| 			File file = new File(GLFWDropCallback.getName(names, i)); | ||||
| 			if(file.exists()) | ||||
| 			{ | ||||
| 				bus.post(new FileDropEvent(file, x, y, resolution)); | ||||
| 			} | ||||
| 		for(int i = 0;i<count;i++) { | ||||
| 			Path file = Paths.get(GLFWDropCallback.getName(names, i)); | ||||
| 			if(Files.notExists(file)) continue; | ||||
| 			bus.post(new FileDropEvent(file, windowId, x, y, resolution)); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -19,99 +19,76 @@ public class Keyboard | ||||
| 	EventBus bus; | ||||
| 	BiPredicate<Integer, Keyboard> filter; | ||||
| 	 | ||||
| 	public void init(EventBus bus, Window window) | ||||
| 	{ | ||||
| 	public void init(EventBus bus, Window window) { | ||||
| 		this.bus = bus;	 | ||||
| 		window.addCallback(T -> GLFW.glfwSetKeyCallback(T, this::onKeyTyped)); | ||||
| 		window.addCallback(T -> GLFW.glfwSetCharCallback(T, this::onCharTyped)); | ||||
| 	} | ||||
| 	 | ||||
| 	public static void setFilter(BiPredicate<Integer, Keyboard> filter) | ||||
| 	{ | ||||
| 	public static void setFilter(BiPredicate<Integer, Keyboard> filter) { | ||||
| 		INSTANCE.filter = filter; | ||||
| 	} | ||||
| 	 | ||||
| 	public static void clearFilter() | ||||
| 	{ | ||||
| 	public static void clearFilter() { | ||||
| 		setFilter(null); | ||||
| 	} | ||||
| 	 | ||||
| 	protected void onKeyTyped(long window, int key, int scancode, int action, int mods) | ||||
| 	{ | ||||
| 		if(key > 350 || key < 0) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| 		if(action >= 1) | ||||
| 		{ | ||||
| 	protected void onKeyTyped(long window, int key, int scancode, int action, int mods) { | ||||
| 		if(key > 350 || key < 0) return; | ||||
| 		if(action >= 1) { | ||||
| 			pressedKeys[key] = true; | ||||
| 			onKeyPressed(key); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 		else { | ||||
| 			pressedKeys[key] = false; | ||||
| 			nonConsumedKeys[key] = false; | ||||
| 			InputBinding.BINDINGS.updatePressing(BindingType.KEYBOARD, key, false); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public void onKeyPressed(int key) | ||||
| 	{ | ||||
| 		if(filter == null || filter.test(key, this)) | ||||
| 		{ | ||||
| 	public void onKeyPressed(int key) { | ||||
| 		if(filter == null || filter.test(key, this)) { | ||||
| 			KeyPressEvent event = new KeyPressEvent(key); | ||||
| 			bus.post(event); | ||||
| 			if(event.isCanceled()) | ||||
| 			{ | ||||
| 				return; | ||||
| 			} | ||||
| 			if(event.isCanceled()) return; | ||||
| 			nonConsumedKeys[key] = true; | ||||
| 			InputBinding.BINDINGS.updatePressing(BindingType.KEYBOARD, key, true); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public void onCharTyped(long windowId, int codepoint) | ||||
| 	{ | ||||
| 	public void onCharTyped(long windowId, int codepoint) { | ||||
| 		bus.post(new CharTypeEvent((char)codepoint, codepoint)); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean isCtrlDown() | ||||
| 	{ | ||||
| 	public static boolean isCtrlDown() { | ||||
| 		return isKeyPressed(GLFW.GLFW_KEY_LEFT_CONTROL) || isKeyPressed(GLFW.GLFW_KEY_RIGHT_CONTROL); | ||||
| 	} | ||||
| 
 | ||||
| 	public static boolean isShiftDown() | ||||
| 	{ | ||||
| 	public static boolean isShiftDown() { | ||||
| 		return isKeyPressed(GLFW.GLFW_KEY_LEFT_SHIFT) || isKeyPressed(GLFW.GLFW_KEY_RIGHT_SHIFT); | ||||
| 	} | ||||
| 
 | ||||
| 	public static boolean isAltDown() | ||||
| 	{ | ||||
| 	public static boolean isAltDown() { | ||||
| 		return isKeyPressed(GLFW.GLFW_KEY_LEFT_ALT) || isKeyPressed(GLFW.GLFW_KEY_RIGHT_ALT); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean isPrintableKey(int key) | ||||
| 	{ | ||||
| 	public static boolean isPrintableKey(int key) { | ||||
| 		return key <= 162; | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean isKeyFullyPressed(int key) | ||||
| 	{ | ||||
| 	public static boolean isKeyFullyPressed(int key) { | ||||
| 		return INSTANCE.isPressed(key) && !INSTANCE.isConsumed(key); | ||||
| 	} | ||||
| 	 | ||||
| 	public static boolean isKeyPressed(int key) | ||||
| 	{ | ||||
| 	public static boolean isKeyPressed(int key) { | ||||
| 		return INSTANCE.isPressed(key); | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isPressed(int key) | ||||
| 	{ | ||||
| 	public boolean isPressed(int key) { | ||||
| 		return pressedKeys[key]; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isConsumed(int key) | ||||
| 	{ | ||||
| 	public boolean isConsumed(int key) { | ||||
| 		return !nonConsumedKeys[key]; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -31,30 +31,33 @@ public class Mouse | ||||
| 	{ | ||||
| 		this.bus = bus; | ||||
| 		ray = new MouseRay(cam, window); | ||||
| 		initSubWindow(window); | ||||
| 	} | ||||
| 	 | ||||
| 	public void initSubWindow(Window window) { | ||||
| 		window.addCallback(T -> GLFW.glfwSetCursorPosCallback(T, Mouse.this::onDrag)); | ||||
| 		window.addCallback(T -> GLFW.glfwSetMouseButtonCallback(T, Mouse.this::onClick)); | ||||
| 		window.addCallback(T -> GLFW.glfwSetScrollCallback(T, Mouse.this::onScroll)); | ||||
| 		window.addCallback(T -> GLFW.glfwSetCursorEnterCallback(T, (K, V) -> active = V));		 | ||||
| 	} | ||||
| 	 | ||||
| 	protected void onDrag(long window, double xpos, double ypos) | ||||
| 	{ | ||||
| 	protected void onDrag(long window, double xpos, double ypos) { | ||||
| 		int xChange = (int)xpos - position.getX(); | ||||
| 		int yChange = (int)ypos - position.getY(); | ||||
| 		position.set((int)xpos, (int)ypos); | ||||
| 		pushEvent(new MouseMoveEvent(position.getX(), position.getY(), xChange, yChange)); | ||||
| 		pushEvent(new MouseMoveEvent(window, position.getX(), position.getY(), xChange, yChange)); | ||||
| 	} | ||||
| 	 | ||||
| 	protected void onScroll(long window, double xScroll, double yScroll) | ||||
| 	{ | ||||
| 		pushEvent(new MouseScrollEvent(position.getX(), position.getY(), (int)xScroll, (int)yScroll)); | ||||
| 		pushEvent(new MouseScrollEvent(window, position.getX(), position.getY(), (int)xScroll, (int)yScroll)); | ||||
| 	} | ||||
| 	 | ||||
| 	protected void onClick(long window, int button, int action, int mods) | ||||
| 	{ | ||||
| 		if(action == 1) pressedButton.add(button); | ||||
| 		else pressedButton.remove(button); | ||||
| 		pushEvent(new MouseClickEvent(position.getX(), position.getY(), button, action == 1)); | ||||
| 		pushEvent(new MouseClickEvent(window, position.getX(), position.getY(), button, action == 1)); | ||||
| 	} | ||||
| 	 | ||||
| 	public static void update() | ||||
| @ -109,17 +112,17 @@ public class Mouse | ||||
| 				if(event instanceof MouseMoveEvent) | ||||
| 				{ | ||||
| 					MouseMoveEvent move = (MouseMoveEvent)event; | ||||
| 					movement.add(move.xMove, move.yMove); | ||||
| 					movement.add(move.getXMove(), move.getYMove()); | ||||
| 				} | ||||
| 				else if(event instanceof MouseClickEvent) | ||||
| 				{ | ||||
| 					MouseClickEvent click = (MouseClickEvent)event; | ||||
| 					InputBinding.BINDINGS.updatePressing(BindingType.MOUSE, click.button, click.press); | ||||
| 					InputBinding.BINDINGS.updatePressing(BindingType.MOUSE, click.getButton(), click.isPress()); | ||||
| 				} | ||||
| 				else if(event instanceof MouseScrollEvent) | ||||
| 				{ | ||||
| 					MouseScrollEvent scroll = (MouseScrollEvent)event; | ||||
| 					this.scroll.add(scroll.scrollX, scroll.scrollY); | ||||
| 					this.scroll.add(scroll.getScrollX(), scroll.getScrollY()); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| @ -1,16 +1,16 @@ | ||||
| package speiger.src.coreengine.rendering.input.bindings; | ||||
| 
 | ||||
| import java.util.LinkedHashMap; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| import org.lwjgl.glfw.GLFW; | ||||
| 
 | ||||
| import speiger.src.collections.objects.maps.interfaces.Object2ObjectMap; | ||||
| import speiger.src.coreengine.rendering.input.Mouse; | ||||
| import speiger.src.coreengine.rendering.input.bindings.utils.BindingType; | ||||
| 
 | ||||
| public class Axis | ||||
| { | ||||
| 	static final Map<String, Axis> AXIS_MAP = new LinkedHashMap<String, Axis>(); | ||||
| 	static final Map<String, Axis> AXIS_MAP = Object2ObjectMap.builder().linkedMap(); | ||||
| 	public static final IAxisSource MAIN_SCROLL_WEEL = new ScrollAxis(false); | ||||
| 	public static final IAxisSource SECOND_SCROLL_WEEL = new ScrollAxis(true); | ||||
| 	public static final Axis XMOVEMENT = new Axis("XMovement", BindingType.KEYBOARD, GLFW.GLFW_KEY_S, GLFW.GLFW_KEY_W); | ||||
| @ -19,71 +19,52 @@ public class Axis | ||||
| 	public static final Axis PITCH = new Axis("Pitch", BindingType.KEYBOARD, GLFW.GLFW_KEY_X, GLFW.GLFW_KEY_C); | ||||
| 	public static final Axis ZOOM = new Axis("Zoom", MAIN_SCROLL_WEEL); | ||||
| 	 | ||||
| 	 | ||||
| 	String name; | ||||
| 	IAxisSource source; | ||||
| 	 | ||||
| 	public Axis(String name) | ||||
| 	{ | ||||
| 	public Axis(String name) { | ||||
| 		this(name, null); | ||||
| 	} | ||||
| 	 | ||||
| 	public Axis(String name, BindingType type, int pos, int neg) | ||||
| 	{ | ||||
| 	public Axis(String name, BindingType type, int pos, int neg) { | ||||
| 		this(name, new KeySource(type, neg, pos)); | ||||
| 	} | ||||
| 	 | ||||
| 	public Axis(String id, IAxisSource provider) | ||||
| 	{ | ||||
| 	public Axis(String id, IAxisSource provider) { | ||||
| 		name = id; | ||||
| 		source = provider; | ||||
| 		AXIS_MAP.put(id, this); | ||||
| 	} | ||||
| 	 | ||||
| 	public void setSource(BindingType type, int pos, int neg) | ||||
| 	{ | ||||
| 	public void setSource(BindingType type, int pos, int neg) { | ||||
| 		setSource(new KeySource(type, neg, pos)); | ||||
| 	} | ||||
| 	 | ||||
| 	public void setSource(IAxisSource provider) | ||||
| 	{ | ||||
| 	public void setSource(IAxisSource provider) { | ||||
| 		source = provider; | ||||
| 	} | ||||
| 	 | ||||
| 	public static Axis getAxis(String name) | ||||
| 	{ | ||||
| 	public static Axis getAxis(String name) { | ||||
| 		return AXIS_MAP.get(name); | ||||
| 	} | ||||
| 	 | ||||
| 	public IAxisSource getSource() | ||||
| 	{ | ||||
| 	public IAxisSource getSource() { | ||||
| 		return source; | ||||
| 	} | ||||
| 	 | ||||
| 	public float getValue() | ||||
| 	{ | ||||
| 		if(source != null) | ||||
| 		{ | ||||
| 			return source.getValue(); | ||||
| 		} | ||||
| 		return 0F; | ||||
| 	public float getValue() { | ||||
| 		return source != null ? source.getValue() : 0F; | ||||
| 	} | ||||
| 	 | ||||
| 	public String getName() | ||||
| 	{ | ||||
| 	public String getName() { | ||||
| 		return name; | ||||
| 	} | ||||
| 	 | ||||
| 	public static interface IAxisSource | ||||
| 	{ | ||||
| 	public static interface IAxisSource { | ||||
| 		public float getValue(); | ||||
| 		 | ||||
| 		public boolean isButton(); | ||||
| 		 | ||||
| 		public String getButtonName(boolean first); | ||||
| 		 | ||||
| 		public String getAxisName(); | ||||
| 		 | ||||
| 		public boolean isAlive(); | ||||
| 	} | ||||
| 	 | ||||
| @ -91,83 +72,42 @@ public class Axis | ||||
| 	{ | ||||
| 		boolean first; | ||||
| 		 | ||||
| 		public ScrollAxis(boolean data) | ||||
| 		{ | ||||
| 		public ScrollAxis(boolean data) { | ||||
| 			first = data; | ||||
| 		} | ||||
| 		 | ||||
| 		@Override | ||||
| 		public float getValue() | ||||
| 		{ | ||||
| 			return first ? Mouse.INSTANCE.getScroll().getX() : Mouse.INSTANCE.getScroll().getY(); | ||||
| 		} | ||||
| 		 | ||||
| 		public float getValue() { return first ? Mouse.INSTANCE.getScroll().getX() : Mouse.INSTANCE.getScroll().getY(); } | ||||
| 		@Override | ||||
| 		public boolean isAlive() | ||||
| 		{ | ||||
| 			return true; | ||||
| 		} | ||||
| 
 | ||||
| 		public boolean isAlive() { return true; } | ||||
| 		@Override | ||||
| 		public boolean isButton() | ||||
| 		{ | ||||
| 			return false; | ||||
| 		} | ||||
| 
 | ||||
| 		public boolean isButton() { return false; } | ||||
| 		@Override | ||||
| 		public String getButtonName(boolean first) | ||||
| 		{ | ||||
| 			return "Not Present"; | ||||
| 		} | ||||
| 
 | ||||
| 		public String getButtonName(boolean first) { return "Not Present"; } | ||||
| 		@Override | ||||
| 		public String getAxisName() | ||||
| 		{ | ||||
| 			return "ScrollWeel "+(first ? 0 : 1); | ||||
| 		} | ||||
| 		public String getAxisName() { return "ScrollWeel "+(first ? 0 : 1); } | ||||
| 	} | ||||
| 	 | ||||
| 	public static class KeySource implements IAxisSource | ||||
| 	{ | ||||
| 	public static class KeySource implements IAxisSource { | ||||
| 		BindingType type; | ||||
| 		int neg; | ||||
| 		int pos; | ||||
| 		 | ||||
| 		public KeySource(BindingType type, int neg, int pos) | ||||
| 		{ | ||||
| 		public KeySource(BindingType type, int neg, int pos) { | ||||
| 			this.type = type; | ||||
| 			this.neg = neg; | ||||
| 			this.pos = pos; | ||||
| 		} | ||||
| 		 | ||||
| 		@Override | ||||
| 		public float getValue() | ||||
| 		{ | ||||
| 			return (type.isPressed(pos) ? 1F : 0F) - (type.isPressed(neg) ? 1F : 0F); | ||||
| 		} | ||||
| 
 | ||||
| 		public float getValue() { return (type.isPressed(pos) ? 1F : 0F) - (type.isPressed(neg) ? 1F : 0F); } | ||||
| 		@Override | ||||
| 		public boolean isButton() | ||||
| 		{ | ||||
| 			return true; | ||||
| 		} | ||||
| 		 | ||||
| 		public boolean isButton() { return true; } | ||||
| 		@Override | ||||
| 		public boolean isAlive() | ||||
| 		{ | ||||
| 			return true; | ||||
| 		} | ||||
| 
 | ||||
| 		public boolean isAlive() { return true; } | ||||
| 		@Override | ||||
| 		public String getButtonName(boolean first) | ||||
| 		{ | ||||
| 			return type.getName(first ? pos : neg); | ||||
| 		} | ||||
| 
 | ||||
| 		public String getButtonName(boolean first) { return type.getName(first ? pos : neg); } | ||||
| 		@Override | ||||
| 		public String getAxisName() | ||||
| 		{ | ||||
| 			return "Not Present"; | ||||
| 		} | ||||
| 		public String getAxisName() { return "Not Present"; } | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -1,10 +1,10 @@ | ||||
| package speiger.src.coreengine.rendering.input.bindings; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.Objects; | ||||
| import java.util.function.Consumer; | ||||
| 
 | ||||
| import speiger.src.collections.objects.lists.ObjectArrayList; | ||||
| import speiger.src.coreengine.rendering.input.bindings.utils.BindingRegistry; | ||||
| import speiger.src.coreengine.rendering.input.bindings.utils.BindingType; | ||||
| import speiger.src.coreengine.rendering.input.bindings.utils.ModType; | ||||
| @ -37,7 +37,7 @@ public class InputBinding | ||||
| 	 | ||||
| 	boolean pressed; | ||||
| 	int timePressed; | ||||
| 	List<Consumer<InputBinding>> listeners = new ArrayList<Consumer<InputBinding>>(); | ||||
| 	List<Consumer<InputBinding>> listeners = new ObjectArrayList<>(); | ||||
| 	 | ||||
| 	public InputBinding(String category, String name, int key) | ||||
| 	{ | ||||
|  | ||||
| @ -1,64 +1,37 @@ | ||||
| package speiger.src.coreengine.rendering.input.bindings.utils; | ||||
| 
 | ||||
| import java.util.Collections; | ||||
| import java.util.EnumMap; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
| 
 | ||||
| import speiger.src.collections.ints.maps.impl.hash.Int2ObjectLinkedOpenHashMap; | ||||
| import speiger.src.collections.ints.maps.interfaces.Int2ObjectMap; | ||||
| import speiger.src.collections.objects.maps.impl.misc.Enum2ObjectMap; | ||||
| import speiger.src.collections.objects.maps.interfaces.Object2ObjectMap; | ||||
| import speiger.src.collections.objects.sets.ObjectLinkedOpenHashSet; | ||||
| import speiger.src.coreengine.rendering.input.bindings.InputBinding; | ||||
| 
 | ||||
| public class BindingRegistry | ||||
| { | ||||
| 	Map<BindingType, Int2ObjectMap<Set<InputBinding>>> handlers = new EnumMap<>(BindingType.class); | ||||
| 	Object2ObjectMap<BindingType, Int2ObjectMap<Set<InputBinding>>> handlers = new Enum2ObjectMap<>(BindingType.class); | ||||
| 	 | ||||
| 	public void registerBinding(InputBinding binding) | ||||
| 	{ | ||||
| 		Int2ObjectMap<Set<InputBinding>> bindings = handlers.get(binding.getInputType()); | ||||
| 		if(bindings == null) | ||||
| 		{ | ||||
| 			bindings = new Int2ObjectLinkedOpenHashMap<Set<InputBinding>>(); | ||||
| 			handlers.put(binding.getInputType(), bindings); | ||||
| 		} | ||||
| 		Set<InputBinding> entries = bindings.get(binding.getKey()); | ||||
| 		if(entries == null) | ||||
| 		{ | ||||
| 			entries = new ObjectLinkedOpenHashSet<InputBinding>(); | ||||
| 			bindings.put(binding.getKey(), entries); | ||||
| 		} | ||||
| 		entries.add(binding); | ||||
| 	public void registerBinding(InputBinding binding) { | ||||
| 		handlers.supplyIfAbsent(binding.getInputType(), Int2ObjectLinkedOpenHashMap::new).supplyIfAbsent(binding.getKey(), ObjectLinkedOpenHashSet::new).add(binding); | ||||
| 	} | ||||
| 	 | ||||
| 	public void removeBinding(InputBinding binding) | ||||
| 	{ | ||||
| 	public void removeBinding(InputBinding binding) { | ||||
| 		Int2ObjectMap<Set<InputBinding>> bindings = handlers.get(binding.getInputType()); | ||||
| 		if(bindings == null) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| 		if(bindings == null) return; | ||||
| 		Set<InputBinding> entries = bindings.get(binding.getKey()); | ||||
| 		if(entries.remove(binding) && entries.isEmpty()) | ||||
| 		{ | ||||
| 		if(entries.remove(binding) && entries.isEmpty()) { | ||||
| 			bindings.remove(binding.getKey()); | ||||
| 			if(bindings.isEmpty()) | ||||
| 			{ | ||||
| 				handlers.remove(binding.getInputType()); | ||||
| 			} | ||||
| 			if(bindings.isEmpty()) handlers.remove(binding.getInputType()); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public void updatePressing(BindingType type, int key, boolean pressed) | ||||
| 	{ | ||||
| 	public void updatePressing(BindingType type, int key, boolean pressed) { | ||||
| 		Int2ObjectMap<Set<InputBinding>> bindings = handlers.get(type); | ||||
| 		if(bindings == null) | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| 		if(bindings == null) return; | ||||
| 		for(InputBinding binding : bindings.getOrDefault(key, Collections.emptySet())) | ||||
| 		{ | ||||
| 			binding.setPressed(pressed); | ||||
| 	} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -7,11 +7,9 @@ import speiger.src.coreengine.rendering.input.Mouse; | ||||
| 
 | ||||
| public enum BindingType | ||||
| { | ||||
| 	KEYBOARD | ||||
| 	{ | ||||
| 	KEYBOARD { | ||||
| 		@Override | ||||
| 		public String getName(int key) | ||||
| 		{ | ||||
| 		public String getName(int key) { | ||||
| 			if(key >= GLFW.GLFW_KEY_F1 && key <= GLFW.GLFW_KEY_F25) return "F"+(key - GLFW.GLFW_KEY_F1+1); | ||||
| 			else if(key == GLFW.GLFW_KEY_DELETE) return "Delete"; | ||||
| 			String s = GLFW.glfwGetKeyName(key, GLFW.glfwGetKeyScancode(key)); | ||||
| @ -19,41 +17,20 @@ public enum BindingType | ||||
| 		} | ||||
| 		 | ||||
| 		@Override | ||||
| 		public boolean isPressed(int key) | ||||
| 		{ | ||||
| 			return Keyboard.isKeyFullyPressed(key); | ||||
| 		} | ||||
| 		public boolean isPressed(int key) { return Keyboard.isKeyFullyPressed(key); } | ||||
| 	}, | ||||
| 	MOUSE  | ||||
| 	{ | ||||
| 	MOUSE { | ||||
| 		@Override | ||||
| 		public String getName(int key) | ||||
| 		{ | ||||
| 			return "Button: "+key; | ||||
| 		} | ||||
| 		 | ||||
| 		public String getName(int key) { return "Button: "+key; } | ||||
| 		@Override | ||||
| 		public boolean isPressed(int key) | ||||
| 		{ | ||||
| 			return Mouse.isButtonPressed(key); | ||||
| 		} | ||||
| 		public boolean isPressed(int key) { return Mouse.isButtonPressed(key); } | ||||
| 	}, | ||||
| 	NONE  | ||||
| 	{ | ||||
| 	NONE { | ||||
| 		@Override | ||||
| 		public String getName(int key) | ||||
| 		{ | ||||
| 			return "None"; | ||||
| 		} | ||||
| 		 | ||||
| 		public String getName(int key) { return "None"; } | ||||
| 		@Override | ||||
| 		public boolean isPressed(int key) | ||||
| 		{ | ||||
| 			return false; | ||||
| 		} | ||||
| 		public boolean isPressed(int key) { return false; } | ||||
| 	}; | ||||
| 	 | ||||
| 	public abstract String getName(int key); | ||||
| 	 | ||||
| 	public abstract boolean isPressed(int key); | ||||
| } | ||||
|  | ||||
| @ -12,14 +12,12 @@ public final class ModType | ||||
| 	public static final int ALT = 4; | ||||
| 	public static final int IGNORE = 8; | ||||
| 	 | ||||
| 	public static boolean isActive(int flags) | ||||
| 	{ | ||||
| 	public static boolean isActive(int flags) { | ||||
| 		boolean ignore = (flags & IGNORE) != 0; | ||||
| 		return valid(Keyboard.isCtrlDown(), (flags & CTRL) != 0, ignore) && valid(Keyboard.isShiftDown(), (flags & SHIFT) != 0, ignore) && valid(Keyboard.isAltDown(), (flags & ALT) != 0, ignore); | ||||
| 	} | ||||
| 	 | ||||
| 	public static String getMods(int flags) | ||||
| 	{ | ||||
| 	public static String getMods(int flags) { | ||||
| 		flags &= ~IGNORE; | ||||
| 		if(flags == 0) return ""; | ||||
| 		StringJoiner builder = new StringJoiner(" + ", "", " + "); | ||||
| @ -29,8 +27,7 @@ public final class ModType | ||||
| 		return builder.toString(); | ||||
| 	} | ||||
| 	 | ||||
| 	static boolean valid(boolean binding, boolean flags, boolean ignore) | ||||
| 	{ | ||||
| 	static boolean valid(boolean binding, boolean flags, boolean ignore) { | ||||
| 		return (flags == binding) || (!flags && ignore); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -1,42 +1,35 @@ | ||||
| package speiger.src.coreengine.rendering.input.events; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.nio.file.Path; | ||||
| 
 | ||||
| import speiger.src.coreengine.rendering.input.window.ScaledResolution; | ||||
| 
 | ||||
| public class FileDropEvent extends MouseEvent | ||||
| { | ||||
| 	final File file; | ||||
| 	final Path file; | ||||
| 	final String fileName; | ||||
| 	final String fileExtension; | ||||
| 	 | ||||
| 	public FileDropEvent(File file, int x, int y, ScaledResolution res) | ||||
| 	{ | ||||
| 		super(x, y); | ||||
| 	public FileDropEvent(Path file, long windowId, int x, int y, ScaledResolution res) { | ||||
| 		super(windowId, x, y); | ||||
| 		this.file = file; | ||||
| 		fileName = file.getName(); | ||||
| 		fileName = file.getFileName().toString(); | ||||
| 		fileExtension = fileName.substring(fileName.lastIndexOf(".")+1); | ||||
| 		convertToScreenCoords(res); | ||||
| 	} | ||||
| 	 | ||||
| 	public String getFileExtension() | ||||
| 	{ | ||||
| 	public String getFileExtension() { | ||||
| 		return fileExtension; | ||||
| 	} | ||||
| 	 | ||||
| 	public String getFileName() | ||||
| 	{ | ||||
| 	public String getFileName() { | ||||
| 		return fileName; | ||||
| 	} | ||||
| 	 | ||||
| 	public File getFile() | ||||
| 	{ | ||||
| 	public Path getFile() { | ||||
| 		return file; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isCancelable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isCancelable(){ return true; } | ||||
| } | ||||
|  | ||||
| @ -5,28 +5,23 @@ import speiger.src.coreengine.utils.eventbus.Event; | ||||
| public abstract class KeyEvent extends Event | ||||
| { | ||||
| 	@Override | ||||
| 	public boolean isCancelable() | ||||
| 	{ | ||||
| 	public boolean isCancelable() { | ||||
| 		return true; | ||||
| 	} | ||||
| 	 | ||||
| 	public static class KeyPressEvent extends KeyEvent | ||||
| 	{ | ||||
| 	public static class KeyPressEvent extends KeyEvent { | ||||
| 		public final int key; | ||||
| 
 | ||||
| 		public KeyPressEvent(int key) | ||||
| 		{ | ||||
| 		public KeyPressEvent(int key) { | ||||
| 			this.key = key; | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public static class CharTypeEvent extends KeyEvent | ||||
| 	{ | ||||
| 	public static class CharTypeEvent extends KeyEvent { | ||||
| 		public final char character; | ||||
| 		public final int codePoint; | ||||
| 		 | ||||
| 		public CharTypeEvent(char character, int codePoint) | ||||
| 		{ | ||||
| 		public CharTypeEvent(char character, int codePoint) { | ||||
| 			this.character = character; | ||||
| 			this.codePoint = codePoint; | ||||
| 		} | ||||
|  | ||||
| @ -3,86 +3,85 @@ package speiger.src.coreengine.rendering.input.events; | ||||
| import speiger.src.coreengine.rendering.input.window.ScaledResolution; | ||||
| import speiger.src.coreengine.utils.eventbus.Event; | ||||
| 
 | ||||
| public class MouseEvent extends Event | ||||
| public abstract class MouseEvent extends Event | ||||
| { | ||||
| 	public int mouseX; | ||||
| 	public int mouseY; | ||||
| 	public final int originX; | ||||
| 	public final int originY; | ||||
| 	final long windowId; | ||||
| 	int mouseX; | ||||
| 	int mouseY; | ||||
| 	final int originX; | ||||
| 	final int originY; | ||||
| 	 | ||||
| 	public MouseEvent(int x, int y) | ||||
| 	{ | ||||
| 	public MouseEvent(long windowId, int x, int y) { | ||||
| 		this.windowId = windowId; | ||||
| 		mouseX = x; | ||||
| 		mouseY = y; | ||||
| 		originX = x; | ||||
| 		originY = y; | ||||
| 	} | ||||
| 	 | ||||
| 	public void convertToOrigin() | ||||
| 	{ | ||||
| 	public long getWindowId() { return windowId; } | ||||
| 	public int getX() { return mouseX; } | ||||
| 	public int getY() { return mouseY; } | ||||
| 	public void setX(int x) { mouseX = x; } | ||||
| 	public void setY(int y) { mouseY = y; } | ||||
| 	public int getOriginX() { return originX; } | ||||
| 	public int getOriginY() { return originY; } | ||||
| 	 | ||||
| 	public void convertToOrigin() { | ||||
| 		mouseX = originX; | ||||
| 		mouseY = originY; | ||||
| 	} | ||||
| 	 | ||||
| 	public void convertToScreenCoords(ScaledResolution res) | ||||
| 	{ | ||||
| 	public void convertToScreenCoords(ScaledResolution res) { | ||||
| 		res.getScaledMouseEvent(this); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isCancelable() | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	public boolean isCancelable() { return true; } | ||||
| 	public boolean isForced() { return false; } | ||||
| 	 | ||||
| 	public boolean isForced() | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 	public static class MouseClickEvent extends MouseEvent { | ||||
| 		final int button; | ||||
| 		final boolean press; | ||||
| 		 | ||||
| 	public static class MouseClickEvent extends MouseEvent | ||||
| 	{ | ||||
| 		public final int button; | ||||
| 		public final boolean press; | ||||
| 		 | ||||
| 		public MouseClickEvent(int x, int y, int button, boolean press) | ||||
| 		{ | ||||
| 			super(x, y); | ||||
| 		public MouseClickEvent(long windowId, int x, int y, int button, boolean press) { | ||||
| 			super(windowId, x, y); | ||||
| 			this.button = button; | ||||
| 			this.press = press; | ||||
| 		} | ||||
| 		 | ||||
| 		//Forced so Buttons are always released. Maybe gets disabled. Not sure yet | ||||
| 		@Override | ||||
| 		public boolean isForced() | ||||
| 		{ | ||||
| 			return !press; | ||||
| 		} | ||||
| 		public boolean isForced() { return !press; } | ||||
| 		public int getButton() { return button; } | ||||
| 		public boolean isPress() { return press; } | ||||
| 	} | ||||
| 	 | ||||
| 	public static class MouseMoveEvent extends MouseEvent | ||||
| 	{ | ||||
| 		public final int xMove; | ||||
| 		public final int yMove; | ||||
| 	public static class MouseMoveEvent extends MouseEvent { | ||||
| 		final int xMove; | ||||
| 		final int yMove; | ||||
| 		 | ||||
| 		public MouseMoveEvent(int x, int y, int xMove, int yMove) | ||||
| 		{ | ||||
| 			super(x, y); | ||||
| 		public MouseMoveEvent(long windowId, int x, int y, int xMove, int yMove) { | ||||
| 			super(windowId, x, y); | ||||
| 			this.xMove = xMove; | ||||
| 			this.yMove = yMove; | ||||
| 		} | ||||
| 		 | ||||
| 		public int getXMove() { return xMove; } | ||||
| 		public int getYMove() { return yMove; } | ||||
| 	} | ||||
| 	 | ||||
| 	public static class MouseScrollEvent extends MouseEvent | ||||
| 	{ | ||||
| 		public final int scrollX; | ||||
| 		public final int scrollY; | ||||
| 	public static class MouseScrollEvent extends MouseEvent { | ||||
| 		final int scrollX; | ||||
| 		final int scrollY; | ||||
| 		 | ||||
| 		public MouseScrollEvent(int x, int y, int scrollX, int scrollY) | ||||
| 		{ | ||||
| 			super(x, y); | ||||
| 		public MouseScrollEvent(long windowId, int x, int y, int scrollX, int scrollY) { | ||||
| 			super(windowId, x, y); | ||||
| 			this.scrollX = scrollX; | ||||
| 			this.scrollY = scrollY; | ||||
| 		} | ||||
| 		 | ||||
| 		public int getScrollX() { return scrollX; } | ||||
| 		public int getScrollY() { return scrollY; } | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -2,34 +2,13 @@ package speiger.src.coreengine.rendering.input.raycast; | ||||
| 
 | ||||
| import speiger.src.coreengine.math.vector.floats.Vec3f; | ||||
| 
 | ||||
| public class Ray | ||||
| public record Ray(Vec3f start, Vec3f end) | ||||
| {	 | ||||
| 	protected Vec3f start; | ||||
| 	protected Vec3f end; | ||||
| 	 | ||||
| 	public Ray(Vec3f start, Vec3f end) | ||||
| 	{ | ||||
| 		this.start = start.asImmutable(); | ||||
| 		this.end = end.asImmutable(); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3f getStart() | ||||
| 	{ | ||||
| 		return start; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3f getEnd() | ||||
| 	{ | ||||
| 		return end; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3f interpolate(float progress) | ||||
| 	{ | ||||
| 	public Vec3f interpolate(float progress) { | ||||
| 		return start.lerp(end, progress, Vec3f.ZERO); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec3f distance() | ||||
| 	{ | ||||
| 	public Vec3f distance() { | ||||
| 		return end.asMutable().sub(start); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -38,7 +38,7 @@ public class RayCollisions | ||||
| 		Vec3f distance = ray.distance(); | ||||
| 		double hitDot = distance.dotProduct(cross); | ||||
| 		if(Math.abs(hitDot) < 0.0000000001D) return null; | ||||
| 		double step = first.sub(ray.getStart()).dotProduct(cross) / hitDot; | ||||
| 		double step = first.sub(ray.start()).dotProduct(cross) / hitDot; | ||||
| 		return new RayResult(ray, ray.interpolate((float)step), step); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -1,7 +1,5 @@ | ||||
| package speiger.src.coreengine.rendering.input.window; | ||||
| 
 | ||||
| 
 | ||||
| public interface IWindowListener | ||||
| { | ||||
| public interface IWindowListener { | ||||
| 	public void onWindowChanged(Window window); | ||||
| } | ||||
|  | ||||
| @ -6,31 +6,26 @@ import org.lwjgl.PointerBuffer; | ||||
| import org.lwjgl.glfw.GLFW; | ||||
| import org.lwjgl.glfw.GLFWVidMode; | ||||
| 
 | ||||
| import speiger.src.collections.longs.maps.impl.hash.Long2ObjectOpenHashMap; | ||||
| import speiger.src.collections.longs.maps.impl.hash.Long2ObjectLinkedOpenHashMap; | ||||
| import speiger.src.collections.longs.maps.interfaces.Long2ObjectMap; | ||||
| import speiger.src.collections.objects.lists.ObjectArrayList; | ||||
| 
 | ||||
| public class Monitor | ||||
| { | ||||
| 	final long monitor; | ||||
| 	List<VideoMode> modes = new ObjectArrayList<VideoMode>(); | ||||
| 	List<VideoMode> modes = new ObjectArrayList<>(); | ||||
| 	VideoMode defaultMode; | ||||
| 	int xOffset; | ||||
| 	int yOffset; | ||||
| 	 | ||||
| 	public Monitor(long monitor) | ||||
| 	{ | ||||
| 	public Monitor(long monitor) { | ||||
| 		this.monitor = monitor; | ||||
| 		GLFWVidMode.Buffer buffer = GLFW.glfwGetVideoModes(monitor); | ||||
| 		for(int i = buffer.limit() - 1;i >= 0;--i) | ||||
| 		{ | ||||
| 			buffer.position(i); | ||||
| 			VideoMode videomode = new VideoMode(this, buffer); | ||||
| 			if(videomode.getRedBits() >= 8 && videomode.getGreenBits() >= 8 && videomode.getBlueBits() >= 8) | ||||
| 			{ | ||||
| 		for(int i = buffer.limit() - 1;i >= 0;--i) { | ||||
| 			VideoMode videomode = new VideoMode(this, buffer.position(i)); | ||||
| 			if(videomode.redBits() >= 8 && videomode.greenBits() >= 8 && videomode.blueBits() >= 8) | ||||
| 				modes.add(videomode); | ||||
| 		} | ||||
| 		} | ||||
| 		defaultMode = new VideoMode(this, GLFW.glfwGetVideoMode(monitor)); | ||||
| 		int[] xPos = new int[1]; | ||||
| 		int[] yPos = new int[1]; | ||||
| @ -39,69 +34,56 @@ public class Monitor | ||||
| 		yOffset = yPos[0]; | ||||
| 	} | ||||
| 	 | ||||
| 	public String getMonitorName() | ||||
| 	{ | ||||
| 	public String getMonitorName() { | ||||
| 		return GLFW.glfwGetMonitorName(monitor); | ||||
| 	} | ||||
| 	 | ||||
| 	public long getMonitorId() | ||||
| 	{ | ||||
| 	public long getMonitorId() { | ||||
| 		return monitor; | ||||
| 	} | ||||
| 	 | ||||
| 	public int size() | ||||
| 	{ | ||||
| 	public int size() { | ||||
| 		return modes.size(); | ||||
| 	} | ||||
| 	 | ||||
| 	public VideoMode getMode(int index) | ||||
| 	{ | ||||
| 	public VideoMode getMode(int index) { | ||||
| 		return modes.get(index); | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean contains(VideoMode mode) | ||||
| 	{ | ||||
| 	public boolean contains(VideoMode mode) { | ||||
| 		return modes.indexOf(mode) != -1; | ||||
| 	} | ||||
| 	 | ||||
| 	public List<VideoMode> getVideoMods() | ||||
| 	{ | ||||
| 		return new ObjectArrayList<VideoMode>(modes); | ||||
| 	public List<VideoMode> getVideoMods() { | ||||
| 		return new ObjectArrayList<>(modes); | ||||
| 	} | ||||
| 	 | ||||
| 	public VideoMode getDefaultMode() | ||||
| 	{ | ||||
| 	public VideoMode getDefaultMode() { | ||||
| 		return defaultMode; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getXOffset() | ||||
| 	{ | ||||
| 	public int getXOffset() { | ||||
| 		return xOffset; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getYOffset() | ||||
| 	{ | ||||
| 	public int getYOffset() { | ||||
| 		return yOffset; | ||||
| 	} | ||||
| 	 | ||||
| 	public long getInBounds(Window window) | ||||
| 	{ | ||||
| 		if(xOffset <= window.getXPos() + window.getActualWidth() && xOffset + defaultMode.getWidth() >= window.getXPos() && yOffset <= window.getYPos() + window.getActualHeight() && yOffset + defaultMode.getHeight() >= window.getYPos()) | ||||
| 		{ | ||||
| 			int xArea = Math.abs(window.getActualWidth() * defaultMode.getWidth()); | ||||
| 			int yArea = Math.abs(window.getActualHeight() * defaultMode.getHeight()); | ||||
| 			int areaI = (Math.min(window.getXPos() + window.getActualWidth(), xOffset + defaultMode.getWidth()) - Math.max(window.getXPos(), xOffset)) * (Math.min(window.getYPos() + window.getActualHeight(), yOffset + defaultMode.getHeight()) - Math.max(window.getYPos(), yOffset)); | ||||
| 	public long getInBounds(Window window) { | ||||
| 		if(xOffset <= window.getXPos() + window.getActualWidth() && xOffset + defaultMode.width() >= window.getXPos() && yOffset <= window.getYPos() + window.getActualHeight() && yOffset + defaultMode.height() >= window.getYPos()) { | ||||
| 			int xArea = Math.abs(window.getActualWidth() * defaultMode.width()); | ||||
| 			int yArea = Math.abs(window.getActualHeight() * defaultMode.height()); | ||||
| 			int areaI = (Math.min(window.getXPos() + window.getActualWidth(), xOffset + defaultMode.width()) - Math.max(window.getXPos(), xOffset)) * (Math.min(window.getYPos() + window.getActualHeight(), yOffset + defaultMode.height()) - Math.max(window.getYPos(), yOffset)); | ||||
| 			return (xArea + yArea) - areaI; | ||||
| 		} | ||||
| 		return 0L; | ||||
| 	} | ||||
| 	 | ||||
| 	public static Long2ObjectMap<Monitor> createMonitors() | ||||
| 	{ | ||||
| 		Long2ObjectMap<Monitor> monitors = new Long2ObjectOpenHashMap<Monitor>(); | ||||
| 	public static Long2ObjectMap<Monitor> createMonitors() { | ||||
| 		Long2ObjectMap<Monitor> monitors = new Long2ObjectLinkedOpenHashMap<>(); | ||||
| 		PointerBuffer buffer = GLFW.glfwGetMonitors(); | ||||
| 		for(int i = 0,m=buffer.limit();i<m;i++) | ||||
| 		{ | ||||
| 		for(int i = 0,m=buffer.limit();i<m;i++) { | ||||
| 			long id = buffer.get(); | ||||
| 			monitors.put(id, new Monitor(id)); | ||||
| 		} | ||||
|  | ||||
| @ -12,71 +12,40 @@ public class ScaledResolution | ||||
| 	int scaledHeight; | ||||
| 	int scale; | ||||
| 	 | ||||
| 	public ScaledResolution(Window wind) | ||||
| 	{ | ||||
| 	public ScaledResolution(Window wind) { | ||||
| 		window = wind; | ||||
| 		updateScale(); | ||||
| 	} | ||||
| 	 | ||||
| 	void updateScale() | ||||
| 	{ | ||||
| 	void updateScale() { | ||||
| 		scale = (Math.min(1 + calculateScreenScale(), window.uiScale == 0 ? 99 : window.uiScale)); | ||||
| 		scaledWidth = window.getWidth() / scale; | ||||
| 		scaledHeight = window.getHeight() / scale; | ||||
| 	} | ||||
| 	 | ||||
| 	public int calculateScreenScale() | ||||
| 	{ | ||||
| 		return calculateMaxScales(window.getWidth(), window.getHeight()); | ||||
| 	public int calculateScreenScale() { return calculateMaxScales(window.getWidth(), window.getHeight()); } | ||||
| 	public int calculateMaxScales(int width, int height) { return Math.max(0, Math.min((int)(width / 320F), (int)(height / 240F)) - 1); } | ||||
| 	public int getScaledWidth() { return scaledWidth; } | ||||
| 	public int getScaledHeight() { return scaledHeight; } | ||||
| 	public double getCurrentScale() { return scale; } | ||||
| 	 | ||||
| 	public Vec2i getScaledMouse() { | ||||
| 		return !Mouse.isActive() || scaledWidth == 0 || scaledHeight == 0 ? Vec2i.MINUS_ONE : Vec2i.of(Mouse.getX() * scaledWidth / window.getWidth(), Mouse.getY() * scaledHeight / window.getHeight()); | ||||
| 	} | ||||
| 	 | ||||
| 	public int calculateMaxScales(int width, int height) | ||||
| 	{ | ||||
| 		return Math.max(0, Math.min((int)(width / 320F), (int)(height / 240F)) - 1); | ||||
| 	public MouseEvent getScaledMouseEvent(MouseEvent evt) { | ||||
| 		if(window.getWidth() != 0 && window.getHeight() != 0) { | ||||
| 			evt.setX(evt.getOriginX() * scaledWidth / window.getWidth()); | ||||
| 			evt.setY(evt.getOriginY() * scaledHeight / window.getHeight()); | ||||
| 		} | ||||
| 	 | ||||
| 	public int getScaledWidth() | ||||
| 	{ | ||||
| 		return scaledWidth; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getScaledHeight() | ||||
| 	{ | ||||
| 		return scaledHeight; | ||||
| 	} | ||||
| 	 | ||||
| 	public double getCurrentScale() | ||||
| 	{ | ||||
| 		return scale; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2i getScaledMouse() | ||||
| 	{ | ||||
| 		if(!Mouse.isActive() || scaledWidth == 0 || scaledHeight == 0) | ||||
| 		{ | ||||
| 			return Vec2i.MINUS_ONE; | ||||
| 		} | ||||
| 		return Vec2i.of(Mouse.getX() * scaledWidth / window.getWidth(), Mouse.getY() * scaledHeight / window.getHeight()); | ||||
| 	} | ||||
| 	 | ||||
| 	public MouseEvent getScaledMouseEvent(MouseEvent evt) | ||||
| 	{ | ||||
| 		if(window.getWidth() == 0 || window.getHeight() == 0) | ||||
| 		{ | ||||
| 			return evt; | ||||
| 		} | ||||
| 		evt.mouseX = evt.originX * scaledWidth / window.getWidth(); | ||||
| 		evt.mouseY = evt.originY * scaledHeight / window.getHeight(); | ||||
| 		return evt; | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2i getReverseScale(int xPos, int yPos) | ||||
| 	{ | ||||
| 	public Vec2i getReverseScale(int xPos, int yPos) { | ||||
| 		return Vec2i.of(xPos * window.getWidth() / scaledWidth, yPos * window.getHeight() / scaledHeight); | ||||
| 	} | ||||
| 	 | ||||
| 	public Vec2d getScaleVec() | ||||
| 	{ | ||||
| 	public Vec2d getScaleVec() { | ||||
| 		return Vec2d.of((double)window.getWidth() / scaledWidth, (double)window.getHeight() / scaledHeight); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -2,87 +2,13 @@ package speiger.src.coreengine.rendering.input.window; | ||||
| 
 | ||||
| import org.lwjgl.glfw.GLFWVidMode; | ||||
| 
 | ||||
| public class VideoMode | ||||
| { | ||||
| 	final Monitor monitor; | ||||
| 	final int width; | ||||
| 	final int height; | ||||
| 	final int redBits; | ||||
| 	final int greenBits; | ||||
| 	final int blueBits; | ||||
| 	final int refreshrate; | ||||
| public record VideoMode(Monitor monitor, int width, int height, int redBits, int greenBits, int blueBits, int refreshrate) { | ||||
| 
 | ||||
| 	public VideoMode(Monitor monitor, GLFWVidMode buffer) | ||||
| 	{ | ||||
| 		this.monitor = monitor; | ||||
| 		width = buffer.width(); | ||||
| 		height = buffer.height(); | ||||
| 		redBits = buffer.redBits(); | ||||
| 		greenBits = buffer.greenBits(); | ||||
| 		blueBits = buffer.blueBits(); | ||||
| 		refreshrate = buffer.refreshRate(); | ||||
| 	public VideoMode(Monitor monitor, GLFWVidMode buffer) { | ||||
| 		this(monitor, buffer.width(), buffer.height(), buffer.redBits(), buffer.greenBits(), buffer.blueBits(), buffer.refreshRate()); | ||||
| 	} | ||||
| 	 | ||||
| 	public VideoMode(Monitor monitor, GLFWVidMode.Buffer buffer) | ||||
| 	{ | ||||
| 		this.monitor = monitor; | ||||
| 		width = buffer.width(); | ||||
| 		height = buffer.height(); | ||||
| 		redBits = buffer.redBits(); | ||||
| 		greenBits = buffer.greenBits(); | ||||
| 		blueBits = buffer.blueBits(); | ||||
| 		refreshrate = buffer.refreshRate(); | ||||
| 	} | ||||
| 	 | ||||
| 	public VideoMode(Monitor monitor, int width, int height, int redBits, int greenBits, int blueBits, int refreshrate) | ||||
| 	{ | ||||
| 		this.monitor = monitor; | ||||
| 		this.width = width; | ||||
| 		this.height = height; | ||||
| 		this.redBits = redBits; | ||||
| 		this.greenBits = greenBits; | ||||
| 		this.blueBits = blueBits; | ||||
| 		this.refreshrate = refreshrate; | ||||
| 	} | ||||
| 	 | ||||
| 	public Monitor getMonitor() | ||||
| 	{ | ||||
| 		return monitor; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getWidth() | ||||
| 	{ | ||||
| 		return width; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getHeight() | ||||
| 	{ | ||||
| 		return height; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getRedBits() | ||||
| 	{ | ||||
| 		return redBits; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getGreenBits() | ||||
| 	{ | ||||
| 		return greenBits; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getBlueBits() | ||||
| 	{ | ||||
| 		return blueBits; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getRefreshRate() | ||||
| 	{ | ||||
| 		return refreshrate; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public String toString() | ||||
| 	{ | ||||
| 		return "Video Mode[Width="+width+", Height="+height+", Rate="+refreshrate+", Monitor="+monitor+"]"; | ||||
| 	public VideoMode(Monitor monitor, GLFWVidMode.Buffer buffer) { | ||||
| 		this(monitor, buffer.width(), buffer.height(), buffer.redBits(), buffer.greenBits(), buffer.blueBits(), buffer.refreshRate()); | ||||
| 	} | ||||
| } | ||||
| @ -53,8 +53,7 @@ public class Window | ||||
| 	List<IWindowListener> listeners = new ObjectArrayList<>(); | ||||
| 	GLCapabilities capabilities; | ||||
| 	 | ||||
| 	public Window() | ||||
| 	{ | ||||
| 	public Window() { | ||||
| 		GLFW.glfwDefaultWindowHints(); | ||||
| 		GLFW.glfwWindowHint(GLFW.GLFW_VISIBLE, 0); // 0 = False, 1 = true | ||||
| 		GLFW.glfwWindowHint(GLFW.GLFW_RESIZABLE, 1); | ||||
| @ -64,16 +63,14 @@ public class Window | ||||
| 		GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_FORWARD_COMPAT, 1); | ||||
| 	} | ||||
| 	 | ||||
| 	protected void initWindowListeners() | ||||
| 	{ | ||||
| 	protected void initWindowListeners() { | ||||
| 		addCallback(T -> GLFW.glfwSetFramebufferSizeCallback(T, this::onResize)); | ||||
| 		addCallback(T -> GLFW.glfwSetWindowMaximizeCallback(T, (K, V) -> flags.setFlag(FLAG_WINDOW_CHANGE))); | ||||
| 		addCallback(T -> GLFW.glfwSetWindowPosCallback(T, (W, X, Y) -> setPosition(X, Y))); | ||||
| 		addCallback(T -> GLFW.glfwSetWindowFocusCallback(T, (K, V) -> flags.setFlag(FLAG_FOCUS, V))); | ||||
| 	} | ||||
| 	 | ||||
| 	Window createWindow(WindowStats stat) | ||||
| 	{ | ||||
| 	Window createWindow(WindowStats stat) { | ||||
| 		owner = stat.provider; | ||||
| 		title = stat.name; | ||||
| 		width = stat.width; | ||||
| @ -88,32 +85,21 @@ public class Window | ||||
| 		GLFW.glfwWindowHint(GLFW.GLFW_SAMPLES, aaLevel); | ||||
| 		GLFW.glfwWindowHint(GLFW.GLFW_DECORATED, flags.isFlagNotSet(FLAG_FULL_SCREEN) && flags.isFlagSet(FLAG_BORDERLESS) ? 0 : 1); | ||||
| 		GLFW.glfwWindowHint(GLFW.GLFW_FLOATING, flags.isFlagNotSet(FLAG_FULL_SCREEN) && flags.isFlagSet(FLAG_FLOATING) ? 1 : 0); | ||||
| 		if(videoMode == null || videoMode.getMonitor() == null) | ||||
| 		{ | ||||
| 			throw new IllegalStateException("Monitor or Video Mode is missing: "+videoMode); | ||||
| 		} | ||||
| 		Monitor monitor = videoMode.getMonitor(); | ||||
| 		windowId = GLFW.glfwCreateWindow(flags.isFlagSet(FLAG_FULL_SCREEN) ? videoMode.getWidth() : width, flags.isFlagSet(FLAG_FULL_SCREEN) ? videoMode.getHeight() : height, title, flags.isFlagSet(FLAG_FULL_SCREEN) ? monitor.getMonitorId() : 0L, stat.parent == null ? 0 : stat.parent.windowId); | ||||
| 		if(windowId == 0) | ||||
| 		{ | ||||
| 			throw new IllegalStateException("Window Couldn't be Created"); | ||||
| 		} | ||||
| 		if(videoMode == null || videoMode.monitor() == null) throw new IllegalStateException("Monitor or Video Mode is missing: "+videoMode); | ||||
| 		Monitor monitor = videoMode.monitor(); | ||||
| 		windowId = GLFW.glfwCreateWindow(flags.isFlagSet(FLAG_FULL_SCREEN) ? videoMode.width() : width, flags.isFlagSet(FLAG_FULL_SCREEN) ? videoMode.height() : height, title, flags.isFlagSet(FLAG_FULL_SCREEN) ? monitor.getMonitorId() : 0L, stat.parent == null ? 0 : stat.parent.windowId); | ||||
| 		if(windowId == 0) throw new IllegalStateException("Window Couldn't be Created"); | ||||
| 		initWindowListeners(); | ||||
| 		GLFW.glfwMakeContextCurrent(windowId); | ||||
| 		if(capabilities == null) | ||||
| 		{ | ||||
| 			capabilities = GL.createCapabilities(); | ||||
| 		} | ||||
| 		if(flags.isFlagNotSet(FLAG_FULL_SCREEN)) | ||||
| 		{ | ||||
| 			xPos = stat.center ? (monitor.getXOffset() + (videoMode.getWidth() / 2) - (width / 2)) : monitor.getXOffset() + xPos; | ||||
| 			yPos = stat.center ? (monitor.getYOffset() + (videoMode.getHeight() / 2) - (width / 2)) : monitor.getYOffset() + yPos; | ||||
| 		if(capabilities == null) capabilities = GL.createCapabilities(); | ||||
| 		if(flags.isFlagNotSet(FLAG_FULL_SCREEN)) { | ||||
| 			xPos = stat.center ? (monitor.getXOffset() + (videoMode.width() / 2) - (width / 2)) : monitor.getXOffset() + xPos; | ||||
| 			yPos = stat.center ? (monitor.getYOffset() + (videoMode.height() / 2) - (width / 2)) : monitor.getYOffset() + yPos; | ||||
| 			GLFW.glfwSetWindowPos(windowId, xPos, yPos); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			xPos = monitor.getXOffset() + (videoMode.getWidth() / 2) - (width / 2); | ||||
| 			yPos = monitor.getYOffset() + (videoMode.getHeight() / 2) - (width / 2); | ||||
| 		else { | ||||
| 			xPos = monitor.getXOffset() + (videoMode.width() / 2) - (width / 2); | ||||
| 			yPos = monitor.getYOffset() + (videoMode.height() / 2) - (width / 2); | ||||
| 			tempWidth = width; | ||||
| 			tempHeight = height; | ||||
| 		} | ||||
| @ -123,52 +109,39 @@ public class Window | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	protected void onResize(long window, int newWidth, int newHeight) | ||||
| 	{ | ||||
| 		if(flags.isFlagNotSet(FLAG_FULL_SCREEN | FLAG_MAXIMIZED) && window == windowId && (width != newWidth || height != newHeight)) | ||||
| 		{ | ||||
| 	protected void onResize(long window, int newWidth, int newHeight) { | ||||
| 		if(flags.isFlagNotSet(FLAG_FULL_SCREEN | FLAG_MAXIMIZED) && window == windowId && (width != newWidth || height != newHeight)) { | ||||
| 			width = newWidth; | ||||
| 			height = newHeight; | ||||
| 			flags.setFlag(FLAG_WINDOW_CHANGE); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	protected void updateCallbacks() | ||||
| 	{ | ||||
| 		for(int i = 0,m=callbacks.size();i<m;i++) | ||||
| 		{ | ||||
| 			WindowCallback callback = callbacks.get(i); | ||||
| 			callback.destroy(); | ||||
| 			callback.reload(windowId); | ||||
| 	protected void updateCallbacks() { | ||||
| 		for(int i = 0,m=callbacks.size();i<m;i++) { | ||||
| 			callbacks.get(i).reload(windowId); | ||||
| 		} | ||||
| 		GLUtils.reapplyState(); | ||||
| 	} | ||||
| 	 | ||||
| 	protected void updateViewPort() | ||||
| 	{ | ||||
| 	protected void updateViewPort() { | ||||
| 		flags.clearFlag(FLAG_WINDOW_CHANGE); | ||||
| 		GLUtils.VIEW_PORT.setDefault(0, 0, width, height); | ||||
| 		createProjectionMatrix(); | ||||
| 		ui_frame.updateScale(); | ||||
| 		for(int i = 0,m=listeners.size();i<m;i++) | ||||
| 		{ | ||||
| 		for(int i = 0,m=listeners.size();i<m;i++) { | ||||
| 			listeners.get(i).onWindowChanged(this); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public void setVideoMode(VideoMode mode) | ||||
| 	{ | ||||
| 		if(videoMode != mode && mode.getMonitor() == getMonitor()) | ||||
| 		{ | ||||
| 	public void setVideoMode(VideoMode mode) { | ||||
| 		if(videoMode != mode && mode.monitor() == getMonitor()) { | ||||
| 			videoMode = mode; | ||||
| 			if(flags.isAnyFlagSet(FLAG_FULL_SCREEN | FLAG_MAXIMIZED)) | ||||
| 			{ | ||||
| 				if(flags.isFlagSet(FLAG_FULL_SCREEN)) | ||||
| 				{ | ||||
| 					GLFW.glfwSetWindowMonitor(windowId, videoMode.getMonitor().getMonitorId(), 0, 0, videoMode.getWidth(), videoMode.getHeight(), videoMode.getRefreshRate()); | ||||
| 			if(flags.isAnyFlagSet(FLAG_FULL_SCREEN | FLAG_MAXIMIZED)) { | ||||
| 				if(flags.isFlagSet(FLAG_FULL_SCREEN)) { | ||||
| 					GLFW.glfwSetWindowMonitor(windowId, videoMode.monitor().getMonitorId(), 0, 0, videoMode.width(), videoMode.height(), videoMode.refreshrate()); | ||||
| 				} | ||||
| 				else if(flags.isFlagSet(FLAG_MAXIMIZED)) | ||||
| 				{ | ||||
| 				else if(flags.isFlagSet(FLAG_MAXIMIZED)) { | ||||
| 					GLFW.glfwRestoreWindow(windowId); | ||||
| 					GLFW.glfwMaximizeWindow(windowId); | ||||
| 				} | ||||
| @ -178,10 +151,8 @@ public class Window | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean setTitle(String title) | ||||
| 	{ | ||||
| 		if(title != null && !this.title.equals(title)) | ||||
| 		{ | ||||
| 	public boolean setTitle(String title) { | ||||
| 		if(title != null && !this.title.equals(title)) { | ||||
| 			this.title = title; | ||||
| 			GLFW.glfwSetWindowTitle(windowId, title); | ||||
| 			return true; | ||||
| @ -189,62 +160,47 @@ public class Window | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean setVsync(boolean value) | ||||
| 	{ | ||||
| 		if(flags.setFlag(FLAG_VSYNC, value)) | ||||
| 		{ | ||||
| 	public boolean setVsync(boolean value) { | ||||
| 		if(flags.setFlag(FLAG_VSYNC, value)) { | ||||
| 			GLFW.glfwSwapInterval(value ? 1 : 0); | ||||
| 			return true; | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean setFPSLimit(boolean value) | ||||
| 	{ | ||||
| 	public boolean setFPSLimit(boolean value) { | ||||
| 		return flags.setFlag(FLAG_CPU_FPS_CAP, value); | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean setFullscreen(boolean value) | ||||
| 	{ | ||||
| 		if(flags.setFlag(FLAG_FULL_SCREEN, value)) | ||||
| 		{ | ||||
| 			if(value) | ||||
| 			{ | ||||
| 				if(flags.isFlagNotSet(FLAG_MAXIMIZED)) | ||||
| 				{ | ||||
| 	public boolean setFullscreen(boolean value) { | ||||
| 		if(flags.setFlag(FLAG_FULL_SCREEN, value)) { | ||||
| 			if(value) { | ||||
| 				if(flags.isFlagNotSet(FLAG_MAXIMIZED)) { | ||||
| 					tempWidth = width; | ||||
| 					tempHeight = height; | ||||
| 				} | ||||
| 				Monitor monitor = getMonitor(); | ||||
| 				if(!monitor.contains(videoMode)) | ||||
| 				{ | ||||
| 					videoMode = monitor.getDefaultMode(); | ||||
| 				} | ||||
| 				GLFW.glfwSetWindowMonitor(windowId, monitor.getMonitorId(), 0, 0, videoMode.getWidth(), videoMode.getHeight(), videoMode.getRefreshRate()); | ||||
| 				if(!monitor.contains(videoMode)) videoMode = monitor.getDefaultMode(); | ||||
| 				GLFW.glfwSetWindowMonitor(windowId, monitor.getMonitorId(), 0, 0, videoMode.width(), videoMode.height(), videoMode.refreshrate()); | ||||
| 				fetchWindowBounds(); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				if(flags.isFlagNotSet(FLAG_MAXIMIZED)) | ||||
| 				{ | ||||
| 			else { | ||||
| 				if(flags.isFlagNotSet(FLAG_MAXIMIZED)) { | ||||
| 					width = tempWidth; | ||||
| 					height = tempHeight; | ||||
| 					GLFW.glfwSetWindowMonitor(windowId, 0, xPos, yPos, width, height, videoMode.getRefreshRate()); | ||||
| 					GLFW.glfwSetWindowMonitor(windowId, 0, xPos, yPos, width, height, videoMode.refreshrate()); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					GLFW.glfwSetWindowMonitor(windowId, 0, 0, 0, width, height, videoMode.getRefreshRate()); | ||||
| 				else { | ||||
| 					GLFW.glfwSetWindowMonitor(windowId, 0, 0, 0, width, height, videoMode.refreshrate()); | ||||
| 					GLFW.glfwMaximizeWindow(windowId); | ||||
| 					fetchWindowBounds(); | ||||
| 				} | ||||
| 				if(flags.isFlagSet(FLAG_BORDERLESS)) | ||||
| 				{ | ||||
| 				if(flags.isFlagSet(FLAG_BORDERLESS)) { | ||||
| 					GLFW.glfwSetWindowAttrib(windowId, GLFW.GLFW_DECORATED, 0); | ||||
| 					GLFW.glfwRestoreWindow(windowId); | ||||
| 					GLFW.glfwMaximizeWindow(windowId); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 				else { | ||||
| 					GLFW.glfwSetWindowAttrib(windowId, GLFW.GLFW_DECORATED, 1);					 | ||||
| 				} | ||||
| 			} | ||||
| @ -255,13 +211,10 @@ public class Window | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean setBorderless(boolean value) | ||||
| 	{ | ||||
| 		if(flags.isFlagNotSet(FLAG_FULL_SCREEN) && flags.setFlag(FLAG_BORDERLESS, value)) | ||||
| 		{ | ||||
| 	public boolean setBorderless(boolean value) { | ||||
| 		if(flags.isFlagNotSet(FLAG_FULL_SCREEN) && flags.setFlag(FLAG_BORDERLESS, value)) { | ||||
| 			GLFW.glfwSetWindowAttrib(windowId, GLFW.GLFW_DECORATED, value ? 0 : 1); | ||||
| 			if(flags.isFlagSet(FLAG_MAXIMIZED)) | ||||
| 			{ | ||||
| 			if(flags.isFlagSet(FLAG_MAXIMIZED)) { | ||||
| 				GLFW.glfwRestoreWindow(windowId); | ||||
| 				GLFW.glfwMaximizeWindow(windowId); | ||||
| 				fetchWindowBounds(); | ||||
| @ -271,29 +224,23 @@ public class Window | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean setFloating(boolean value) | ||||
| 	{ | ||||
| 		if(flags.isFlagNotSet(FLAG_FULL_SCREEN) && flags.setFlag(FLAG_FLOATING, value)) | ||||
| 		{ | ||||
| 	public boolean setFloating(boolean value) { | ||||
| 		if(flags.isFlagNotSet(FLAG_FULL_SCREEN) && flags.setFlag(FLAG_FLOATING, value)) { | ||||
| 			GLFW.glfwSetWindowAttrib(windowId, GLFW.GLFW_FLOATING, value ? 1 : 0); | ||||
| 			return true; | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean setMaximized(boolean value) | ||||
| 	{ | ||||
| 		if(flags.isFlagNotSet(FLAG_FULL_SCREEN) && flags.setFlag(FLAG_MAXIMIZED, value)) | ||||
| 		{ | ||||
| 			if(value) | ||||
| 			{ | ||||
| 	public boolean setMaximized(boolean value) { | ||||
| 		if(flags.isFlagNotSet(FLAG_FULL_SCREEN) && flags.setFlag(FLAG_MAXIMIZED, value)) { | ||||
| 			if(value) { | ||||
| 				tempWidth = width; | ||||
| 				tempHeight = height; | ||||
| 				GLFW.glfwMaximizeWindow(windowId); | ||||
| 				fetchWindowBounds(); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 			else { | ||||
| 				width = tempWidth; | ||||
| 				height = tempHeight; | ||||
| 				GLFW.glfwRestoreWindow(windowId); | ||||
| @ -303,10 +250,8 @@ public class Window | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean setAntiAliasing(int level) | ||||
| 	{ | ||||
| 		if(aaLevel != level) | ||||
| 		{ | ||||
| 	public boolean setAntiAliasing(int level) { | ||||
| 		if(aaLevel != level) { | ||||
| 			aaLevel = level; | ||||
| 			long last = windowId; | ||||
| 			GLFW.glfwDefaultWindowHints(); | ||||
| @ -315,15 +260,9 @@ public class Window | ||||
| 			GLFW.glfwWindowHint(GLFW.GLFW_SAMPLES, aaLevel); | ||||
| 			GLFW.glfwWindowHint(GLFW.GLFW_DECORATED, flags.isFlagNotSet(FLAG_FULL_SCREEN) && flags.isFlagSet(FLAG_BORDERLESS) ? 0 : 1); | ||||
| 			Monitor monitor = getMonitor(); | ||||
| 			if(!monitor.contains(videoMode)) | ||||
| 			{ | ||||
| 				videoMode = monitor.getDefaultMode(); | ||||
| 			} | ||||
| 			windowId = GLFW.glfwCreateWindow(flags.isFlagSet(FLAG_FULL_SCREEN) ? videoMode.getWidth() : width, flags.isFlagSet(FLAG_FULL_SCREEN) ? videoMode.getHeight() : height, title, flags.isFlagSet(FLAG_FULL_SCREEN) ? monitor.getMonitorId() : 0L, windowId); | ||||
| 			if(windowId == 0) | ||||
| 			{ | ||||
| 				throw new IllegalStateException("Window Couldn't be Created"); | ||||
| 			} | ||||
| 			if(!monitor.contains(videoMode)) videoMode = monitor.getDefaultMode(); | ||||
| 			windowId = GLFW.glfwCreateWindow(flags.isFlagSet(FLAG_FULL_SCREEN) ? videoMode.width() : width, flags.isFlagSet(FLAG_FULL_SCREEN) ? videoMode.height() : height, title, flags.isFlagSet(FLAG_FULL_SCREEN) ? monitor.getMonitorId() : 0L, windowId); | ||||
| 			if(windowId == 0) throw new IllegalStateException("Window Couldn't be Created"); | ||||
| 			GLFW.glfwMakeContextCurrent(windowId); | ||||
| 			GLFW.glfwDestroyWindow(last); | ||||
| 			GLFW.glfwSwapInterval(flags.isFlagSet(FLAG_VSYNC) ? 1 : 0); | ||||
| @ -335,10 +274,8 @@ public class Window | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean setWindowSize(int newWidth, int newHeight) | ||||
| 	{ | ||||
| 		if(flags.isFlagNotSet(FLAG_MAXIMIZED | FLAG_FULL_SCREEN) && (width != newWidth || height != newWidth)) | ||||
| 		{ | ||||
| 	public boolean setWindowSize(int newWidth, int newHeight) { | ||||
| 		if(flags.isFlagNotSet(FLAG_MAXIMIZED | FLAG_FULL_SCREEN) && (width != newWidth || height != newWidth)) { | ||||
| 			width = newWidth; | ||||
| 			height = newHeight; | ||||
| 			flags.setFlag(FLAG_WINDOW_CHANGE); | ||||
| @ -347,10 +284,8 @@ public class Window | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean setPosition(int xNewPos, int yNewPos) | ||||
| 	{ | ||||
| 		if(flags.isFlagNotSet(FLAG_MAXIMIZED | FLAG_FULL_SCREEN) && (xPos != xNewPos || yPos != yNewPos)) | ||||
| 		{ | ||||
| 	public boolean setPosition(int xNewPos, int yNewPos) { | ||||
| 		if(flags.isFlagNotSet(FLAG_MAXIMIZED | FLAG_FULL_SCREEN) && (xPos != xNewPos || yPos != yNewPos)) { | ||||
| 			xPos = xNewPos; | ||||
| 			yPos = yNewPos; | ||||
| 			return true; | ||||
| @ -358,243 +293,118 @@ public class Window | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean setVisible(boolean value) | ||||
| 	{ | ||||
| 		if(flags.setFlag(FLAG_VISIBLE, value)) | ||||
| 		{ | ||||
| 			if(value) | ||||
| 			{ | ||||
| 				GLFW.glfwShowWindow(windowId); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				GLFW.glfwHideWindow(windowId); | ||||
| 			} | ||||
| 	public boolean setVisible(boolean value) { | ||||
| 		if(flags.setFlag(FLAG_VISIBLE, value)) { | ||||
| 			if(value) GLFW.glfwShowWindow(windowId); | ||||
| 			else GLFW.glfwHideWindow(windowId); | ||||
| 			return true; | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	public void setUIScale(int newScale) | ||||
| 	{ | ||||
| 	public void setUIScale(int newScale) { | ||||
| 		int lastScale = uiScale; | ||||
| 		uiScale = MathUtils.clamp(0, 100, newScale); | ||||
| 		if(lastScale != uiScale) | ||||
| 		{ | ||||
| 			flags.setFlag(FLAG_WINDOW_CHANGE); | ||||
| 		} | ||||
| 		if(lastScale != uiScale) flags.setFlag(FLAG_WINDOW_CHANGE); | ||||
| 	} | ||||
| 	 | ||||
| 	public void editScale(int change) | ||||
| 	{ | ||||
| 		if(change != 0) | ||||
| 		{ | ||||
| 	public void editScale(int change) { | ||||
| 		if(change != 0) { | ||||
| 			uiScale = MathUtils.clamp(0, 100, uiScale + change); | ||||
| 			flags.setFlag(FLAG_WINDOW_CHANGE);			 | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public void setClipboardString(String text) | ||||
| 	{ | ||||
| 		GLFW.glfwSetClipboardString(windowId, text); | ||||
| 	} | ||||
| 	public boolean isChanged() { return flags.isFlagSet(FLAG_WINDOW_CHANGE); } | ||||
| 	public boolean isFullscreen() { return flags.isFlagSet(FLAG_FULL_SCREEN); } | ||||
| 	public boolean isMaximized() { return flags.isFlagSet(FLAG_MAXIMIZED); } | ||||
| 	public boolean isBorderless() { return flags.isFlagSet(FLAG_BORDERLESS); } | ||||
| 	public boolean isCPULimited() { return flags.isFlagSet(FLAG_CPU_FPS_CAP); } | ||||
| 	public int getAntiAliasingLevel() { return aaLevel; } | ||||
| 	public long getId() { return windowId; } | ||||
| 	public int getWidth() { return width; } | ||||
| 	public int getHeight() { return height; } | ||||
| 	int getActualWidth() { return flags.isAnyFlagSet(FLAG_FULL_SCREEN | FLAG_MAXIMIZED) ? tempWidth : width; } | ||||
| 	int getActualHeight() { return flags.isAnyFlagSet(FLAG_FULL_SCREEN | FLAG_MAXIMIZED) ? tempHeight : height; } | ||||
| 	int getXPos() { return xPos; } | ||||
| 	int getYPos() { return yPos; } | ||||
| 	 | ||||
| 	public void requestClose() | ||||
| 	{ | ||||
| 		flags.setFlag(FLAG_CLOSE); | ||||
| 	} | ||||
| 	public Monitor getMonitor() { return owner.getMonitorFromWindow(this); } | ||||
| 	public String getClipboardString() { return GLFW.glfwGetClipboardString(windowId); } | ||||
| 	public void setClipboardString(String text) { GLFW.glfwSetClipboardString(windowId, text); } | ||||
| 
 | ||||
| 	public boolean isChanged() | ||||
| 	{ | ||||
| 		return flags.isFlagSet(FLAG_WINDOW_CHANGE); | ||||
| 	} | ||||
| 	public void requestClose() { flags.setFlag(FLAG_CLOSE); } | ||||
| 	public boolean shouldRun() { return flags.isFlagNotSet(FLAG_CLOSE) && !GLFW.glfwWindowShouldClose(windowId); } | ||||
| 	 | ||||
| 	public boolean isFullscreen() | ||||
| 	{ | ||||
| 		return flags.isFlagSet(FLAG_FULL_SCREEN); | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isMaximized() | ||||
| 	{ | ||||
| 		return flags.isFlagSet(FLAG_MAXIMIZED); | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isBorderless() | ||||
| 	{ | ||||
| 		return flags.isFlagSet(FLAG_BORDERLESS); | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean isCPULimited() | ||||
| 	{ | ||||
| 		return flags.isFlagSet(FLAG_CPU_FPS_CAP); | ||||
| 	} | ||||
| 	 | ||||
| 	public int getAntiAliasingLevel() | ||||
| 	{ | ||||
| 		return aaLevel; | ||||
| 	} | ||||
| 	 | ||||
| 	public boolean shouldRun() | ||||
| 	{ | ||||
| 		return flags.isFlagNotSet(FLAG_CLOSE) && !GLFW.glfwWindowShouldClose(windowId); | ||||
| 	} | ||||
| 	 | ||||
| 	public void finishWindow() | ||||
| 	{ | ||||
| 	public void finishWindow() { | ||||
| 		setVisible(true); | ||||
| 		GLFW.glfwShowWindow(windowId); | ||||
| 		updateViewPort(); | ||||
| 	} | ||||
| 	 | ||||
| 	public void update() | ||||
| 	{ | ||||
| 		if(flags.isFlagSet(FLAG_WINDOW_CHANGE)) | ||||
| 		{ | ||||
| 			updateViewPort(); | ||||
| 		} | ||||
| 	public void update() { | ||||
| 		if(flags.isFlagSet(FLAG_WINDOW_CHANGE)) updateViewPort(); | ||||
| 	} | ||||
| 	 | ||||
| 	public void finishFrame() | ||||
| 	{ | ||||
| 	public void finishFrame() { | ||||
| 		GLFW.glfwSwapBuffers(windowId); | ||||
| 	} | ||||
| 	 | ||||
| 	public void gatherInputs() | ||||
| 	{ | ||||
| 	public void gatherInputs() { | ||||
| 		GLFW.glfwPollEvents(); | ||||
| 	} | ||||
| 	 | ||||
| 	public void destroy() | ||||
| 	{ | ||||
| 	public void destroy() { | ||||
| 		GLFW.glfwDestroyWindow(windowId); | ||||
| 		for(WindowCallback back : callbacks) | ||||
| 		{ | ||||
| 			back.destroy(); | ||||
| 		} | ||||
| 		callbacks.forEach(WindowCallback::destroy); | ||||
| 		callbacks.clear(); | ||||
| 	} | ||||
| 	 | ||||
| 	public long getId() | ||||
| 	{ | ||||
| 		return windowId; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getWidth() | ||||
| 	{ | ||||
| 		return width; | ||||
| 	} | ||||
| 	 | ||||
| 	public int getHeight() | ||||
| 	{ | ||||
| 		return height; | ||||
| 	} | ||||
| 	 | ||||
| 	int getActualWidth() | ||||
| 	{ | ||||
| 		return flags.isAnyFlagSet(FLAG_FULL_SCREEN | FLAG_MAXIMIZED) ? tempWidth : width; | ||||
| 	} | ||||
| 	 | ||||
| 	int getActualHeight() | ||||
| 	{ | ||||
| 		return flags.isAnyFlagSet(FLAG_FULL_SCREEN | FLAG_MAXIMIZED) ? tempHeight : height; | ||||
| 	} | ||||
| 	 | ||||
| 	int getXPos() | ||||
| 	{ | ||||
| 		return xPos; | ||||
| 	} | ||||
| 	 | ||||
| 	int getYPos() | ||||
| 	{ | ||||
| 		return yPos; | ||||
| 	} | ||||
| 	 | ||||
| 	public Monitor getMonitor() | ||||
| 	{ | ||||
| 		return owner.getMonitorFromWindow(this); | ||||
| 	} | ||||
| 	 | ||||
| 	public String getClipboardString() | ||||
| 	{ | ||||
| 		return GLFW.glfwGetClipboardString(windowId); | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f getProjectionMatrix() | ||||
| 	{ | ||||
| 	public Matrix4f getProjectionMatrix() { | ||||
| 		return projection; | ||||
| 	} | ||||
| 	 | ||||
| 	public Matrix4f getInvertedProjectionMatrix() | ||||
| 	{ | ||||
| 	public Matrix4f getInvertedProjectionMatrix() { | ||||
| 		return invertedProjection; | ||||
| 	} | ||||
| 	 | ||||
| 	public ScaledResolution getUIFrame() | ||||
| 	{ | ||||
| 	public ScaledResolution getUIFrame() { | ||||
| 		return ui_frame; | ||||
| 	} | ||||
| 	 | ||||
| 	public void addListener(IWindowListener listener, boolean notify) | ||||
| 	{ | ||||
| 		if(listener != null) | ||||
| 		{ | ||||
| 	public void addListener(IWindowListener listener, boolean notify) { | ||||
| 		if(listener != null) { | ||||
| 			listeners.add(listener); | ||||
| 			if(notify) | ||||
| 			{ | ||||
| 				listener.onWindowChanged(this); | ||||
| 			} | ||||
| 			if(notify) listener.onWindowChanged(this); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public void removeListener(IWindowListener listener) | ||||
| 	{ | ||||
| 	public void removeListener(IWindowListener listener) { | ||||
| 		listeners.remove(listener); | ||||
| 	} | ||||
| 	 | ||||
| 	public WindowCallback addCallback(LongFunction<Callback> provider) | ||||
| 	{ | ||||
| 		if(provider == null) | ||||
| 		{ | ||||
| 			return null; | ||||
| 		} | ||||
| 	public WindowCallback addCallback(LongFunction<Callback> provider) { | ||||
| 		if(provider == null) return null; | ||||
| 		WindowCallback callback = new WindowCallback(provider); | ||||
| 		callbacks.add(callback); | ||||
| 		if(windowId != 0) | ||||
| 		{ | ||||
| 			callback.reload(windowId); | ||||
| 		if(windowId != 0) { | ||||
| 			callback.load(windowId); | ||||
| 		} | ||||
| 		return callback; | ||||
| 	} | ||||
| 	 | ||||
| 	public void removeCallback(WindowCallback call) | ||||
| 	{ | ||||
| 		if(callbacks.remove(call)) | ||||
| 		{ | ||||
| 	public void removeCallback(WindowCallback call) { | ||||
| 		if(callbacks.remove(call)) { | ||||
| 			call.destroy(); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	private void createProjectionMatrix() | ||||
| 	{ | ||||
| //		float aspectRatio = (float)width / (float)height; | ||||
| //		float y_scale = (float)((1f / Math.tan(Math.toRadians(fieldOfView / 2f))) * aspectRatio); | ||||
| //		float x_scale = y_scale / aspectRatio; | ||||
| //		float frustum_length = far_plane - near_plane; | ||||
| //		projection.setIdentity(); | ||||
| //		projection.set(0, x_scale); | ||||
| //		projection.set(5, y_scale); | ||||
| //		projection.set(10, -((far_plane + near_plane) / frustum_length)); | ||||
| //		projection.set(11, -1); | ||||
| //		projection.set(14, -((2 * near_plane * far_plane) / frustum_length)); | ||||
| //		projection.set(15, 0); | ||||
| //		invertedProjection.load(projection).invert(); | ||||
| //				 | ||||
| 	private void createProjectionMatrix() { | ||||
| 		projection.setIdentity().setPerspective((float)Math.toRadians(fieldOfView), (float)width / (float)height, near_plane, far_plane); | ||||
| 		invertedProjection.load(projection).invert(); | ||||
| 	} | ||||
| 	 | ||||
| 	protected void fetchWindowBounds() | ||||
| 	{ | ||||
| 	protected void fetchWindowBounds() { | ||||
| 		int[] width = new int[1]; | ||||
| 		int[] height = new int[1]; | ||||
| 		GLFW.glfwGetWindowSize(windowId, width, height); | ||||
|  | ||||
| @ -9,22 +9,22 @@ public class WindowCallback | ||||
| 	Callback callback; | ||||
| 	LongFunction<Callback> provider; | ||||
| 	 | ||||
| 	public WindowCallback(LongFunction<Callback> provider) | ||||
| 	{ | ||||
| 	public WindowCallback(LongFunction<Callback> provider) { | ||||
| 		this.provider = provider; | ||||
| 	} | ||||
| 	 | ||||
| 	public void reload(long windowID) | ||||
| 	{ | ||||
| 		callback = provider.apply(windowID); | ||||
| 	public void reload(long windowId) { | ||||
| 		destroy(); | ||||
| 		load(windowId); | ||||
| 	} | ||||
| 	 | ||||
| 	public void destroy() | ||||
| 	{ | ||||
| 		if(callback != null) | ||||
| 		{ | ||||
| 	public void load(long windowId) { | ||||
| 		callback = provider.apply(windowId); | ||||
| 	} | ||||
| 	 | ||||
| 	public void destroy() { | ||||
| 		if(callback == null) return; | ||||
| 		callback.free(); | ||||
| 		callback = null; | ||||
| 	} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| package speiger.src.coreengine.rendering.input.window; | ||||
| 
 | ||||
| import java.util.List; | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| import org.lwjgl.glfw.GLFW; | ||||
| import org.lwjgl.system.Callback; | ||||
| @ -14,16 +15,13 @@ public class WindowProvider | ||||
| 	List<Callback> callbacks = new ObjectArrayList<>(); | ||||
| 	List<Window> activeWindows = new ObjectArrayList<>(); | ||||
| 	 | ||||
| 	public void init() | ||||
| 	{ | ||||
| 	public void init() { | ||||
| 		monitors = Monitor.createMonitors(); | ||||
| 		callbacks.add(GLFW.glfwSetMonitorCallback(this::onMonitorChange)); | ||||
| 	} | ||||
| 	 | ||||
| 	protected void onMonitorChange(long id, int state) | ||||
| 	{ | ||||
| 		switch(state) | ||||
| 		{ | ||||
| 	protected void onMonitorChange(long id, int state) { | ||||
| 		switch(state) { | ||||
| 			case GLFW.GLFW_CONNECTED: | ||||
| 				monitors.put(id, new Monitor(id)); | ||||
| 				break; | ||||
| @ -33,30 +31,31 @@ public class WindowProvider | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	public WindowStats createBuilder() | ||||
| 	{ | ||||
| 	public WindowStats createBuilder() { | ||||
| 		return new WindowStats(this); | ||||
| 	} | ||||
| 	 | ||||
| 	public Monitor getMonitors(long id) | ||||
| 	{ | ||||
| 	public Monitor getMonitors(long id) { | ||||
| 		return monitors.get(id); | ||||
| 	} | ||||
| 	 | ||||
| 	public List<Window> getActiveWindows() | ||||
| 	{ | ||||
| 	public Window getWindowFromId(long id) { | ||||
| 		for(Window window : activeWindows) { | ||||
| 			if(window.getId() == id) return window; | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 	 | ||||
| 	public List<Window> getActiveWindows() { | ||||
| 		return activeWindows; | ||||
| 	} | ||||
| 	 | ||||
| 	public Monitor getMonitorFromWindow(Window window) | ||||
| 	{ | ||||
| 	public Monitor getMonitorFromWindow(Window window) { | ||||
| 		Monitor monitor = null; | ||||
| 		long overlap = Long.MIN_VALUE; | ||||
| 		for(Monitor entry : monitors.values()) | ||||
| 		{ | ||||
| 		for(Monitor entry : monitors.values()) { | ||||
| 			long thisOverlap = entry.getInBounds(window); | ||||
| 			if(thisOverlap > overlap) | ||||
| 			{ | ||||
| 			if(thisOverlap > overlap) { | ||||
| 				monitor = entry; | ||||
| 				overlap = thisOverlap; | ||||
| 			} | ||||
| @ -64,40 +63,26 @@ public class WindowProvider | ||||
| 		return monitor == null ? monitors.get(GLFW.glfwGetPrimaryMonitor()) : monitor; | ||||
| 	} | ||||
| 	 | ||||
| 	public List<Monitor> getMonitors() | ||||
| 	{ | ||||
| 		return new ObjectArrayList<Monitor>(monitors.values()); | ||||
| 	public List<Monitor> getMonitors() { | ||||
| 		return new ObjectArrayList<>(monitors.values()); | ||||
| 	} | ||||
| 	 | ||||
| 	public void destroy() | ||||
| 	{ | ||||
| 		for(int i = 0,m=callbacks.size();i<m;i++) | ||||
| 		{ | ||||
| 			callbacks.get(i).free(); | ||||
| 		} | ||||
| 	public void destroy() { | ||||
| 		callbacks.forEach(Callback::free); | ||||
| 		callbacks.clear(); | ||||
| 		GLFW.glfwTerminate(); | ||||
| 		GLFW.glfwSetErrorCallback(null).free(); | ||||
| 	} | ||||
| 	 | ||||
| 	public void updateWindows() | ||||
| 	{ | ||||
| 		for(Window window : activeWindows) | ||||
| 		{ | ||||
| 			window.update(); | ||||
| 		} | ||||
| 	public void updateWindows() { | ||||
| 		activeWindows.forEach(Window::update); | ||||
| 	} | ||||
| 	 | ||||
| 	public void finishFrame() | ||||
| 	{ | ||||
| 		for(Window window : activeWindows) | ||||
| 		{ | ||||
| 			window.finishFrame(); | ||||
| 		} | ||||
| 	public void finishFrame() { | ||||
| 		activeWindows.forEach(Window::finishFrame); | ||||
| 	} | ||||
| 	 | ||||
| 	public static class WindowStats | ||||
| 	{ | ||||
| 	public static class WindowStats { | ||||
| 		WindowProvider provider; | ||||
| 		String name = ""; | ||||
| 		int width; | ||||
| @ -112,114 +97,78 @@ public class WindowProvider | ||||
| 		Window parent; | ||||
| 		VideoMode videoMode; | ||||
| 		 | ||||
| 		WindowStats(WindowProvider provider) | ||||
| 		{ | ||||
| 		WindowStats(WindowProvider provider) { | ||||
| 			this.provider = provider; | ||||
| 			videoMode = provider.monitors.get(GLFW.glfwGetPrimaryMonitor()).getDefaultMode(); | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setName(String name) | ||||
| 		{ | ||||
| 			if(name != null) | ||||
| 			{ | ||||
| 				this.name = name; | ||||
| 			} | ||||
| 		public WindowStats setName(String name) { | ||||
| 			this.name = Objects.requireNonNull(name); | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setWidth(int width) | ||||
| 		{ | ||||
| 			if(width > 0) | ||||
| 			{ | ||||
| 				this.width = width; | ||||
| 			} | ||||
| 		public WindowStats setWidth(int width) { | ||||
| 			this.width = Math.max(1, width); | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setHeight(int height) | ||||
| 		{ | ||||
| 			if(height > 0) | ||||
| 			{ | ||||
| 				this.height = height; | ||||
| 			} | ||||
| 		public WindowStats setHeight(int height) { | ||||
| 			this.height = Math.max(1, height); | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setAntiAlis(int antiAlis) | ||||
| 		{ | ||||
| 			if(antiAlis >= 0) | ||||
| 			{ | ||||
| 				this.antiAlis = antiAlis; | ||||
| 			} | ||||
| 		public WindowStats setAntiAlis(int antiAlis) { | ||||
| 			this.antiAlis = Math.max(1, antiAlis); | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setSubWindow(Window parent) | ||||
| 		{ | ||||
| 		public WindowStats setSubWindow(Window parent) { | ||||
| 			this.parent = parent; | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setFullScreen(boolean fullScreen) | ||||
| 		{ | ||||
| 		public WindowStats setFullScreen(boolean fullScreen) { | ||||
| 			this.fullScreen = fullScreen; | ||||
| 			if(fullScreen) | ||||
| 			{ | ||||
| 				borderless = false; | ||||
| 				floating = false; | ||||
| 			} | ||||
| 			borderless &= !fullScreen; | ||||
| 			floating &= !fullScreen; | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setBorderless(boolean borderless) | ||||
| 		{ | ||||
| 		public WindowStats setBorderless(boolean borderless) { | ||||
| 			this.borderless = borderless; | ||||
| 			if(borderless) | ||||
| 			{ | ||||
| 				fullScreen = false; | ||||
| 			} | ||||
| 			fullScreen &= !borderless; | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setFloating(boolean floating) | ||||
| 		{ | ||||
| 		public WindowStats setFloating(boolean floating) { | ||||
| 			this.floating = floating; | ||||
| 			if(floating) | ||||
| 			{ | ||||
| 				fullScreen = false; | ||||
| 			} | ||||
| 			fullScreen &= !floating; | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setCentered(boolean center) | ||||
| 		{ | ||||
| 		public WindowStats setCentered(boolean center) { | ||||
| 			this.center = center; | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setMonitor(VideoMode videoMode) | ||||
| 		{ | ||||
| 			if(videoMode != null && videoMode.getMonitor() != null) | ||||
| 			{ | ||||
| 		public WindowStats setMonitor(VideoMode videoMode) { | ||||
| 			if(videoMode != null && videoMode.monitor() != null) { | ||||
| 				this.videoMode = videoMode; | ||||
| 			} | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setVsync(boolean value) | ||||
| 		{ | ||||
| 		public WindowStats setVsync(boolean value) { | ||||
| 			vsync = value; | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public WindowStats setFPSCap(boolean cap) | ||||
| 		{ | ||||
| 		public WindowStats setFPSCap(boolean cap) { | ||||
| 			fpsCap = cap; | ||||
| 			return this; | ||||
| 		} | ||||
| 		 | ||||
| 		public Window build() | ||||
| 		{ | ||||
| 		public Window build() { | ||||
| 			Window window = new Window().createWindow(this); | ||||
| 			provider.activeWindows.add(window); | ||||
| 			return window; | ||||
|  | ||||
| @ -0,0 +1,175 @@ | ||||
| package speiger.src.coreengine.rendering.newGui.components.base; | ||||
| 
 | ||||
| import java.util.List; | ||||
| import java.util.function.Consumer; | ||||
| 
 | ||||
| import speiger.src.collections.ints.sets.IntOpenHashSet; | ||||
| import speiger.src.collections.ints.sets.IntSet; | ||||
| import speiger.src.collections.objects.lists.ObjectArrayList; | ||||
| import speiger.src.coreengine.rendering.gui.helper.box.IGuiBox; | ||||
| import speiger.src.coreengine.utils.collections.CollectionUtils; | ||||
| import speiger.src.coreengine.utils.collections.FlagObject; | ||||
| 
 | ||||
| public non-sealed class GuiComponent extends FlagObject implements IInteractableContainer, ICastable, ILayoutComponent, IListableComponent { | ||||
| 	private static final int FLAG_FOCUSED = 1<<0; | ||||
| 	private static final int FLAG_ENABLED = 1<<1; | ||||
| 	private static final int FLAG_VISIBLE = 1<<2; | ||||
| 	private static final int FLAG_MANUAL_MANAGED = 1<<3; | ||||
| 	private static final int FLAG_SCISSORED = 1<<4; | ||||
| 	 | ||||
| 	IGuiBox box; | ||||
| 	 | ||||
| 	GuiComponent parent; | ||||
| 	List<GuiComponent> children = new ObjectArrayList<>(); | ||||
| 	List<IInteractable> interactions = new ObjectArrayList<>(); | ||||
| 	List<Consumer<GuiComponent>>[] listeners = CollectionUtils.createList(IListableComponent.MAX_LISTENER_TYPES); | ||||
| 	 | ||||
| 	 | ||||
| 	IInteractable focused; | ||||
| 	IntSet activeButtons = new IntOpenHashSet(); | ||||
| 	 | ||||
| 	@Override | ||||
| 	public List<? extends IInteractable> getChildren() { | ||||
| 		return interactions; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void setFocusedChild(IInteractable child) { | ||||
| 		if(focused != null) focused.setFocused(false); | ||||
| 		this.focused = child; | ||||
| 		if(focused != null) focused.setFocused(true); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public IInteractable getFocusedChild() { | ||||
| 		return focused; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public IntSet getActiveButtons() { | ||||
| 		return activeButtons; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void calculateBounds(ILayoutScanner output) { | ||||
| 		output.accept(getBox()); | ||||
| 		for(GuiComponent child : children) { | ||||
| 			if(child.isVisible() || output.acceptsInvisble()) { | ||||
| 				child.calculateBounds(output); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public GuiComponent addListener(Consumer<GuiComponent> listener, int index) { | ||||
| 		listeners[index].add(listener); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public GuiComponent removeListener(Consumer<GuiComponent> listener, int index) { | ||||
| 		listeners[index].remove(listener); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void notifyListeners(int index) { | ||||
| 		if(listeners[index].isEmpty()) return; | ||||
| 		for(Consumer<GuiComponent> comp : listeners[index]) { | ||||
| 			comp.accept(this); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public IGuiBox getBox() { | ||||
| 		return box; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public boolean isMouseColliding(int mouseX, int mouseY) { | ||||
| 		return isVisible() && box.isColiding(mouseX, mouseY); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public GuiComponent set(float x, float y) { | ||||
| 		if(box.getBaseX() != x || box.getBaseY() != y) { | ||||
| 			box.setXY(x, y); | ||||
| 			//TODO implement onChanged | ||||
| 		} | ||||
| 		return this; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public GuiComponent bounds(float width, float height) { | ||||
| 		if(box.getBaseWidth() != width || box.getBaseHeight() != height) { | ||||
| 			box.setBounds(width, height); | ||||
| 			//TODO implement onChanged | ||||
| 		} | ||||
| 		return this; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public GuiComponent resize(float width, float height) { | ||||
| 		if(width != 0F || height != 0F) { | ||||
| 			box.grow(width, height); | ||||
| 			//TODO implement onChanged | ||||
| 		} | ||||
| 		return this; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public GuiComponent move(float moveX, float moveY) { | ||||
| 		if(moveX != 0F || moveY != 0F) { | ||||
| 			box.move(moveX, moveY); | ||||
| 			//TODO implement onChanged | ||||
| 		} | ||||
| 		return this; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public final boolean isFocused() { | ||||
| 		return isFlagSet(FLAG_FOCUSED); | ||||
| 	} | ||||
| 	 | ||||
| 	public final boolean isEnabled() { | ||||
| 		return isFlagSet(FLAG_ENABLED); | ||||
| 	} | ||||
| 	 | ||||
| 	public final boolean isVisible() { | ||||
| 		return isFlagSet(FLAG_VISIBLE); | ||||
| 	} | ||||
| 	 | ||||
| 	public final boolean isManualManaged() { | ||||
| 		return isFlagSet(FLAG_MANUAL_MANAGED); | ||||
| 	} | ||||
| 	 | ||||
| 	public final boolean isScissored() { | ||||
| 		return isFlagSet(FLAG_SCISSORED); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	public final void setFocused(boolean value) { | ||||
| 		setFlag(FLAG_FOCUSED, value); | ||||
| 		if(!value) setFocusedChild(null); | ||||
| 	} | ||||
| 	 | ||||
| 	public final GuiComponent setEnabled(boolean value) { | ||||
| 		setFlag(FLAG_ENABLED, value); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public final GuiComponent setVisible(boolean value) { | ||||
| 		setFlag(FLAG_VISIBLE, value); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public final GuiComponent setManualManaged(boolean value) { | ||||
| 		setFlag(FLAG_MANUAL_MANAGED, value); | ||||
| 		return this; | ||||
| 	} | ||||
| 	 | ||||
| 	public final GuiComponent setScissored(boolean value) { | ||||
| 		setFlag(FLAG_SCISSORED, value); | ||||
| 		return this; | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,19 @@ | ||||
| package speiger.src.coreengine.rendering.newGui.components.base; | ||||
| 
 | ||||
| public interface ICastable  | ||||
| { | ||||
| 	@SuppressWarnings("unchecked") | ||||
| 	public default <T> T cast() { | ||||
| 		return (T)this; | ||||
| 	} | ||||
| 	 | ||||
| 	@SuppressWarnings("unchecked") | ||||
| 	public default <T> T cast(Class<T> clz) { | ||||
| 		return (T)this; | ||||
| 	} | ||||
| 	 | ||||
| 	@SuppressWarnings("unchecked") | ||||
| 	public default <T> T tryCast(Class<T> clz) { | ||||
| 		return clz.isInstance(this) ? (T)this : null; | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,19 @@ | ||||
| package speiger.src.coreengine.rendering.newGui.components.base; | ||||
| 
 | ||||
| public interface IInteractable | ||||
| { | ||||
| 	public boolean isMouseColliding(int mouseX, int mouseY); | ||||
| 	 | ||||
| 	public default boolean onMouseClick(int button, int mouseX, int mouseY) { return false; } | ||||
| 	public default boolean onMouseDragged(int mouseX, int mouseY, int diffX, int diffY) { return false; } | ||||
| 	public default boolean onMouseReleased(int button, int mouseX, int mouseY) { return false; } | ||||
| 	public default boolean onMouseScroll(int scroll, int mouseX, int mouseY) { return false; } | ||||
| 	 | ||||
| 	public default boolean isPriorityKeyTarget() { return false; } | ||||
| 	public default boolean onKeyPressed(int key, int mouseX, int mouseY) { return false; } | ||||
| 	public default boolean onKeyReleased(int key, int mouseX, int mouseY) { return false; } | ||||
| 	public default boolean onKeyTyped(char letter, int codepoint) { return false; } | ||||
| 	 | ||||
| 	public boolean isFocused(); | ||||
| 	public void setFocused(boolean value); | ||||
| } | ||||
| @ -0,0 +1,92 @@ | ||||
| package speiger.src.coreengine.rendering.newGui.components.base; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| import speiger.src.collections.ints.sets.IntSet; | ||||
| 
 | ||||
| public interface IInteractableContainer extends IInteractable | ||||
| { | ||||
| 	public List<? extends IInteractable> getChildren(); | ||||
| 	 | ||||
| 	public void setFocusedChild(IInteractable child); | ||||
| 	public IInteractable getFocusedChild(); | ||||
| 	public IntSet getActiveButtons(); | ||||
| 	 | ||||
| 	public default IInteractable getChildAt(int mouseX, int mouseY) { | ||||
| 		List<? extends IInteractable> children = getChildren(); | ||||
| 		for(int i = 0,m=children.size();i<m;i++) { | ||||
| 			IInteractable interact = children.get(i); | ||||
| 			if(interact.isMouseColliding(mouseX, mouseY)) return interact; | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	default boolean onMouseClick(int button, int mouseX, int mouseY) { | ||||
| 		IntSet active = getActiveButtons(); | ||||
| 		if(active.size() > 0 && getFocusedChild() != null) { | ||||
| 			IInteractable focus = getFocusedChild(); | ||||
| 			if(focus.isMouseColliding(mouseX, mouseY) && focus.onMouseClick(button, mouseX, mouseY)) { | ||||
| 				active.add(button); | ||||
| 				return true; | ||||
| 			} | ||||
| 			return false; | ||||
| 		} | ||||
| 		List<? extends IInteractable> children = getChildren(); | ||||
| 		for(int i = 0,m=children.size();i<m;i++) { | ||||
| 			IInteractable interact = children.get(i); | ||||
| 			if(interact.isMouseColliding(mouseX, mouseY) && interact.onMouseClick(button, mouseX, mouseY)) { | ||||
| 				setFocusedChild(interact); | ||||
| 				active.add(button); | ||||
| 				return true; | ||||
| 			} | ||||
| 		} | ||||
| 		if(active.isEmpty() && getFocusedChild() != null) setFocusedChild(null); | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	default boolean onMouseDragged(int mouseX, int mouseY, int diffX, int diffY) { | ||||
| 		return getFocusedChild() != null && getActiveButtons().contains(0) && getFocusedChild().onMouseDragged(mouseX, mouseY, diffX, diffY); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	default boolean onMouseReleased(int button, int mouseX, int mouseY) { | ||||
| 		getActiveButtons().remove(button); | ||||
| 		IInteractable interact = getChildAt(mouseX, mouseY); | ||||
| 		return interact != null && interact == getFocusedChild() && interact.onMouseReleased(button, mouseX, mouseY); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	default boolean onMouseScroll(int scroll, int mouseX, int mouseY) { | ||||
| 		IInteractable interact = getChildAt(mouseX, mouseY); | ||||
| 		return interact != null && interact.onMouseScroll(scroll, mouseX, mouseY); | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	default boolean onKeyPressed(int key, int mouseX, int mouseY) { | ||||
| 		IInteractable interact = getFocusedChild(); | ||||
| 		if(interact != null && (interact.onKeyPressed(key, mouseX, mouseY) || interact.isPriorityKeyTarget())) return true; | ||||
| 		List<? extends IInteractable> children = getChildren(); | ||||
| 		for(int i = 0,m=children.size();i<m;i++) { | ||||
| 			if(children.get(i).onKeyPressed(key, mouseX, mouseY)) return true; | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	default boolean onKeyReleased(int key, int mouseX, int mouseY) { | ||||
| 		IInteractable interact = getFocusedChild(); | ||||
| 		if(interact != null && (interact.onKeyReleased(key, mouseX, mouseY) || interact.isPriorityKeyTarget())) return true; | ||||
| 		List<? extends IInteractable> children = getChildren(); | ||||
| 		for(int i = 0,m=children.size();i<m;i++) { | ||||
| 			if(children.get(i).onKeyReleased(key, mouseX, mouseY)) return true; | ||||
| 		} | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	@Override | ||||
| 	default boolean onKeyTyped(char letter, int codepoint) { | ||||
| 		return getFocusedChild() != null && getFocusedChild().onKeyTyped(letter, codepoint); | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,64 @@ | ||||
| package speiger.src.coreengine.rendering.newGui.components.base; | ||||
| 
 | ||||
| import speiger.src.coreengine.rendering.gui.helper.box.IGuiBox; | ||||
| 
 | ||||
| public interface ILayoutComponent { | ||||
| 	public void calculateBounds(ILayoutScanner output); | ||||
| 	public IGuiBox getBox(); | ||||
| 	 | ||||
| 	public default float getX() { | ||||
| 		return getBox().getMinX(); | ||||
| 	} | ||||
| 	 | ||||
| 	public default float getY() { | ||||
| 		return getBox().getMinY(); | ||||
| 	} | ||||
| 	 | ||||
| 	public default float getWidth() { | ||||
| 		return getBox().getWidth(); | ||||
| 	} | ||||
| 	 | ||||
| 	public default float getHeight() { | ||||
| 		return getBox().getHeight(); | ||||
| 	} | ||||
| 	 | ||||
| 	public ILayoutComponent set(float x, float y); | ||||
| 	public ILayoutComponent bounds(float width, float height); | ||||
| 	public ILayoutComponent resize(float width, float height); | ||||
| 	public ILayoutComponent move(float moveX, float moveY); | ||||
| 	 | ||||
| 	public static interface ILayoutScanner { | ||||
| 		public default void accept(IGuiBox box) { accept(box.getMinX(), box.getMinY(), box.getMaxX(), box.getMaxY()); } | ||||
| 		public void accept(float minX, float minY, float maxX, float maxY); | ||||
| 		public boolean acceptsInvisble(); | ||||
| 		 | ||||
| 		public static ArrayFetcher of() { return new ArrayFetcher(false); } | ||||
| 		public static ArrayFetcher includeInvisible() { return new ArrayFetcher(true); } | ||||
| 	} | ||||
| 	 | ||||
| 	public static class ArrayFetcher implements ILayoutScanner { | ||||
| 		float[] result = new float[] {Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; | ||||
| 		boolean includeInvisible = false; | ||||
| 		 | ||||
| 		public ArrayFetcher(boolean includeInvisible) { | ||||
| 			this.includeInvisible = includeInvisible; | ||||
| 		} | ||||
| 
 | ||||
| 		@Override | ||||
| 		public boolean acceptsInvisble() { | ||||
| 			return includeInvisible; | ||||
| 		} | ||||
| 		 | ||||
| 		@Override | ||||
| 		public void accept(float minX, float minY, float maxX, float maxY) { | ||||
| 			result[0] = Math.min(minX, result[0]); | ||||
| 			result[1] = Math.min(minX, result[1]); | ||||
| 			result[2] = Math.max(minX, result[2]); | ||||
| 			result[3] = Math.max(minX, result[3]); | ||||
| 		} | ||||
| 		 | ||||
| 		public float[] getResult() { | ||||
| 			return result; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user