Minor vect/rect changes
This commit is contained in:
@@ -62,7 +62,7 @@ public class SoundSystem extends RootBusNode implements Updateable {
|
|||||||
*/
|
*/
|
||||||
public static VectView getListener()
|
public static VectView getListener()
|
||||||
{
|
{
|
||||||
return listener.getView();
|
return listener.view();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- instance --
|
// -- instance --
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ public class MouseButtonEvent implements Event<MouseButtonEvent.Listener> {
|
|||||||
*/
|
*/
|
||||||
public VectView getPos()
|
public VectView getPos()
|
||||||
{
|
{
|
||||||
return pos.getView();
|
return pos.view();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ public class MouseMotionEvent implements Event<MouseMotionEvent.Listener> {
|
|||||||
* @param move move vector
|
* @param move move vector
|
||||||
*/
|
*/
|
||||||
public MouseMotionEvent(Vect pos, Vect move) {
|
public MouseMotionEvent(Vect pos, Vect move) {
|
||||||
this.move = move.getValue();
|
this.move = move.copy();
|
||||||
this.pos = pos.getValue();
|
this.pos = pos.copy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class ScreenChangeEvent implements Event<ScreenChangeEvent.Listener> {
|
|||||||
*/
|
*/
|
||||||
public VectView getScreenSize()
|
public VectView getScreenSize()
|
||||||
{
|
{
|
||||||
return screenSize.getView();
|
return screenSize.view();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package mightypork.gamecore.gui.components.layout;
|
package mightypork.gamecore.gui.components.layout;
|
||||||
|
|
||||||
|
|
||||||
import static mightypork.utils.math.constraints.Bounds.*;
|
import static mightypork.utils.math.constraints.ConstraintFactory.*;
|
||||||
import mightypork.gamecore.control.AppAccess;
|
import mightypork.gamecore.control.AppAccess;
|
||||||
import mightypork.gamecore.gui.components.PluggableRenderable;
|
import mightypork.gamecore.gui.components.PluggableRenderable;
|
||||||
import mightypork.utils.math.constraints.RectBound;
|
import mightypork.utils.math.constraints.RectBound;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package mightypork.gamecore.gui.components.layout;
|
package mightypork.gamecore.gui.components.layout;
|
||||||
|
|
||||||
|
|
||||||
import static mightypork.utils.math.constraints.Bounds.*;
|
import static mightypork.utils.math.constraints.ConstraintFactory.*;
|
||||||
import mightypork.gamecore.control.AppAccess;
|
import mightypork.gamecore.control.AppAccess;
|
||||||
import mightypork.gamecore.gui.components.PluggableRenderable;
|
import mightypork.gamecore.gui.components.PluggableRenderable;
|
||||||
import mightypork.utils.math.constraints.RectBound;
|
import mightypork.utils.math.constraints.RectBound;
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ public class InputSystem extends RootBusNode implements Updateable, KeyBinder {
|
|||||||
move.mul(1, -1, 1);
|
move.mul(1, -1, 1);
|
||||||
|
|
||||||
if (button != -1 || wheeld != 0) {
|
if (button != -1 || wheeld != 0) {
|
||||||
getEventBus().send(new MouseButtonEvent(pos.getValue(), button, down, wheeld));
|
getEventBus().send(new MouseButtonEvent(pos.copy(), button, down, wheeld));
|
||||||
}
|
}
|
||||||
|
|
||||||
moveSum.add(move);
|
moveSum.add(move);
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ public class Render {
|
|||||||
*/
|
*/
|
||||||
public static void rotate(double angle, Vect axis)
|
public static void rotate(double angle, Vect axis)
|
||||||
{
|
{
|
||||||
final Vect vec = axis.getView().norm(1);
|
final Vect vec = axis.view().norm(1);
|
||||||
glRotated(angle, vec.x(), vec.y(), vec.z());
|
glRotated(angle, vec.x(), vec.y(), vec.z());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -351,7 +351,7 @@ public class Render {
|
|||||||
*/
|
*/
|
||||||
public static void quad(Rect quad)
|
public static void quad(Rect quad)
|
||||||
{
|
{
|
||||||
final double x1 = quad.getLeft();
|
final double x1 = quad.left();
|
||||||
final double y1 = quad.top();
|
final double y1 = quad.top();
|
||||||
final double x2 = quad.right();
|
final double x2 = quad.right();
|
||||||
final double y2 = quad.bottom();
|
final double y2 = quad.bottom();
|
||||||
@@ -391,12 +391,12 @@ public class Render {
|
|||||||
*/
|
*/
|
||||||
public static void quadUV_nobound(Rect quad, Rect uvs)
|
public static void quadUV_nobound(Rect quad, Rect uvs)
|
||||||
{
|
{
|
||||||
final double x1 = quad.getLeft();
|
final double x1 = quad.left();
|
||||||
final double y1 = quad.top();
|
final double y1 = quad.top();
|
||||||
final double x2 = quad.right();
|
final double x2 = quad.right();
|
||||||
final double y2 = quad.bottom();
|
final double y2 = quad.bottom();
|
||||||
|
|
||||||
final double tx1 = uvs.getLeft();
|
final double tx1 = uvs.left();
|
||||||
final double ty1 = uvs.top();
|
final double ty1 = uvs.top();
|
||||||
final double tx2 = uvs.right();
|
final double tx2 = uvs.right();
|
||||||
final double ty2 = uvs.bottom();
|
final double ty2 = uvs.bottom();
|
||||||
@@ -437,7 +437,7 @@ public class Render {
|
|||||||
*/
|
*/
|
||||||
public static void quadColor(Rect quad, RGB colorHMinVMin, RGB colorHMaxVMin, RGB colorHMaxVMax, RGB colorHMinVMax)
|
public static void quadColor(Rect quad, RGB colorHMinVMin, RGB colorHMaxVMin, RGB colorHMaxVMax, RGB colorHMinVMax)
|
||||||
{
|
{
|
||||||
final double x1 = quad.getLeft();
|
final double x1 = quad.left();
|
||||||
final double y1 = quad.top();
|
final double y1 = quad.top();
|
||||||
final double x2 = quad.right();
|
final double x2 = quad.right();
|
||||||
final double y2 = quad.bottom();
|
final double y2 = quad.bottom();
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ public class FontRenderer {
|
|||||||
{
|
{
|
||||||
Render.pushMatrix();
|
Render.pushMatrix();
|
||||||
|
|
||||||
Render.translate(pos.getValue().round());
|
Render.translate(pos.copy().round());
|
||||||
Render.scaleXY(getScale(height));
|
Render.scaleXY(getScale(height));
|
||||||
|
|
||||||
font.draw(text, color);
|
font.draw(text, color);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package mightypork.rogue.screens;
|
package mightypork.rogue.screens;
|
||||||
|
|
||||||
|
|
||||||
import static mightypork.utils.math.constraints.Bounds.*;
|
import static mightypork.utils.math.constraints.ConstraintFactory.*;
|
||||||
import mightypork.gamecore.gui.Action;
|
import mightypork.gamecore.gui.Action;
|
||||||
import mightypork.gamecore.gui.components.painters.TextPainter;
|
import mightypork.gamecore.gui.components.painters.TextPainter;
|
||||||
import mightypork.gamecore.gui.screens.Screen;
|
import mightypork.gamecore.gui.screens.Screen;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package mightypork.rogue.screens.test_bouncyboxes;
|
package mightypork.rogue.screens.test_bouncyboxes;
|
||||||
|
|
||||||
|
|
||||||
import static mightypork.utils.math.constraints.Bounds.*;
|
import static mightypork.utils.math.constraints.ConstraintFactory.*;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ import mightypork.gamecore.render.Render;
|
|||||||
import mightypork.utils.math.animation.AnimDouble;
|
import mightypork.utils.math.animation.AnimDouble;
|
||||||
import mightypork.utils.math.animation.Easing;
|
import mightypork.utils.math.animation.Easing;
|
||||||
import mightypork.utils.math.color.RGB;
|
import mightypork.utils.math.color.RGB;
|
||||||
import mightypork.utils.math.constraints.NumberBound;
|
import mightypork.utils.math.constraints.NumBound;
|
||||||
import mightypork.utils.math.constraints.RectBound;
|
import mightypork.utils.math.constraints.RectBound;
|
||||||
|
|
||||||
|
|
||||||
@@ -26,15 +26,28 @@ public class BouncyBox extends PluggableRenderer implements Updateable {
|
|||||||
|
|
||||||
public BouncyBox() {
|
public BouncyBox() {
|
||||||
// create box
|
// create box
|
||||||
final NumberBound side = height(this);
|
final NumBound side = height(this);
|
||||||
RectBound abox = box(this, side, side);
|
RectBound abox = box(this, side, side);
|
||||||
|
|
||||||
// move
|
// move
|
||||||
final NumberBound move_length = sub(width(this), side);
|
final NumBound move_length = sub(width(this), side);
|
||||||
final NumberBound offset = mul(move_length, pos);
|
final NumBound offset = mul(move_length, pos);
|
||||||
abox = move(abox, offset, 0);
|
abox = move(abox, offset, 0);
|
||||||
|
|
||||||
// add padding
|
// add padding
|
||||||
|
/*
|
||||||
|
* leftEdge(this)
|
||||||
|
* .growRight(height(this))
|
||||||
|
* .move(
|
||||||
|
* width(this)
|
||||||
|
* .sub(height(this))
|
||||||
|
* .mul(pos),
|
||||||
|
* 0)
|
||||||
|
* .shrink(
|
||||||
|
* height(this)
|
||||||
|
* .perc(10)
|
||||||
|
* )
|
||||||
|
*/
|
||||||
abox = shrink(abox, perc(side, 10));
|
abox = shrink(abox, perc(side, 10));
|
||||||
|
|
||||||
box = abox;
|
box = abox;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package mightypork.rogue.screens.test_bouncyboxes;
|
package mightypork.rogue.screens.test_bouncyboxes;
|
||||||
|
|
||||||
|
|
||||||
import static mightypork.utils.math.constraints.Bounds.*;
|
import static mightypork.utils.math.constraints.ConstraintFactory.*;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package mightypork.rogue.screens.test_cat_sound;
|
package mightypork.rogue.screens.test_cat_sound;
|
||||||
|
|
||||||
|
|
||||||
import static mightypork.utils.math.constraints.Bounds.*;
|
import static mightypork.utils.math.constraints.ConstraintFactory.*;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
@@ -19,17 +19,15 @@ import mightypork.rogue.Res;
|
|||||||
import mightypork.utils.math.animation.AnimDouble;
|
import mightypork.utils.math.animation.AnimDouble;
|
||||||
import mightypork.utils.math.animation.Easing;
|
import mightypork.utils.math.animation.Easing;
|
||||||
import mightypork.utils.math.color.RGB;
|
import mightypork.utils.math.color.RGB;
|
||||||
import mightypork.utils.math.constraints.Bounds;
|
|
||||||
import mightypork.utils.math.vect.Vect;
|
import mightypork.utils.math.vect.Vect;
|
||||||
import mightypork.utils.math.vect.VectMutable;
|
import mightypork.utils.math.vect.VectAnimated;
|
||||||
import mightypork.utils.math.vect.VectMutableAnim;
|
|
||||||
import mightypork.utils.math.vect.VectVal;
|
import mightypork.utils.math.vect.VectVal;
|
||||||
|
|
||||||
|
|
||||||
public class LayerFlyingCat extends ScreenLayer implements Updateable, MouseButtonEvent.Listener {
|
public class LayerFlyingCat extends ScreenLayer implements Updateable, MouseButtonEvent.Listener {
|
||||||
|
|
||||||
private final AnimDouble size = new AnimDouble(400, Easing.SINE_BOTH);
|
private final AnimDouble size = new AnimDouble(400, Easing.SINE_BOTH);
|
||||||
private final VectMutableAnim pos = VectMutable.makeAnim(Easing.ELASTIC_OUT);
|
private final VectAnimated pos = VectAnimated.make(Easing.ELASTIC_OUT);
|
||||||
|
|
||||||
private final Random rand = new Random();
|
private final Random rand = new Random();
|
||||||
|
|
||||||
@@ -46,6 +44,7 @@ public class LayerFlyingCat extends ScreenLayer implements Updateable, MouseButt
|
|||||||
|
|
||||||
cat = new ImagePainter(Res.getTxQuad("test.kitten"));
|
cat = new ImagePainter(Res.getTxQuad("test.kitten"));
|
||||||
|
|
||||||
|
// Bounds.box(size,size).centerTo(pos)
|
||||||
cat.setContext(centerTo(box(size, size), pos));
|
cat.setContext(centerTo(box(size, size), pos));
|
||||||
|
|
||||||
tp = new TextPainter(Res.getFont("default"));
|
tp = new TextPainter(Res.getFont("default"));
|
||||||
@@ -54,9 +53,12 @@ public class LayerFlyingCat extends ScreenLayer implements Updateable, MouseButt
|
|||||||
tp.setText("Meow!");
|
tp.setText("Meow!");
|
||||||
tp.setShadow(RGB.dark(0.8), VectVal.make(2, 2));
|
tp.setShadow(RGB.dark(0.8), VectVal.make(2, 2));
|
||||||
|
|
||||||
|
// Bounds.box(64,64).centerTo(cMousePos)
|
||||||
tp.setContext(centerTo(box(64, 64), cMousePos));
|
tp.setContext(centerTo(box(64, 64), cMousePos));
|
||||||
|
|
||||||
qp = QuadPainter.gradV(RGB.YELLOW, RGB.RED);
|
qp = QuadPainter.gradV(RGB.YELLOW, RGB.RED);
|
||||||
|
|
||||||
|
// Bounds.wrap(cat).bottomLeft().expand(0,0,50,50)
|
||||||
qp.setContext(expand(bottomLeft(cat), 0, 0, 50, 50));
|
qp.setContext(expand(bottomLeft(cat), 0, 0, 50, 50));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
package mightypork.rogue.screens.test_font;
|
package mightypork.rogue.screens.test_font;
|
||||||
|
|
||||||
|
|
||||||
import static mightypork.utils.math.constraints.Bounds.*;
|
import static mightypork.utils.math.constraints.ConstraintFactory.*;
|
||||||
import mightypork.gamecore.control.AppAccess;
|
import mightypork.gamecore.control.AppAccess;
|
||||||
import mightypork.gamecore.gui.components.painters.TextPainter;
|
import mightypork.gamecore.gui.components.painters.TextPainter;
|
||||||
import mightypork.gamecore.gui.screens.Screen;
|
import mightypork.gamecore.gui.screens.Screen;
|
||||||
import mightypork.gamecore.render.fonts.FontRenderer.Align;
|
import mightypork.gamecore.render.fonts.FontRenderer.Align;
|
||||||
import mightypork.rogue.Res;
|
import mightypork.rogue.Res;
|
||||||
import mightypork.utils.math.color.RGB;
|
import mightypork.utils.math.color.RGB;
|
||||||
import mightypork.utils.math.constraints.NumberBound;
|
import mightypork.utils.math.constraints.NumBound;
|
||||||
import mightypork.utils.math.constraints.RectBound;
|
import mightypork.utils.math.constraints.RectBound;
|
||||||
|
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ public class ScreenTestFont extends Screen {
|
|||||||
tp = new TextPainter(Res.getFont("default"), Align.CENTER, RGB.GREEN);
|
tp = new TextPainter(Res.getFont("default"), Align.CENTER, RGB.GREEN);
|
||||||
tp.setText("Hello World!");
|
tp.setText("Hello World!");
|
||||||
|
|
||||||
final NumberBound fontHeight = mul(getDisplay().getSize().yc(), 0.1);
|
final NumBound fontHeight = mul(getDisplay().getSize().yc(), 0.1);
|
||||||
|
|
||||||
final RectBound strbox = centerTo(box(fontHeight), this);
|
final RectBound strbox = centerTo(box(fontHeight), this);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package mightypork.rogue.screens.test_render;
|
package mightypork.rogue.screens.test_render;
|
||||||
|
|
||||||
|
|
||||||
import static mightypork.utils.math.constraints.Bounds.*;
|
import static mightypork.utils.math.constraints.ConstraintFactory.*;
|
||||||
import mightypork.gamecore.control.timing.Poller;
|
import mightypork.gamecore.control.timing.Poller;
|
||||||
import mightypork.gamecore.gui.screens.Screen;
|
import mightypork.gamecore.gui.screens.Screen;
|
||||||
import mightypork.gamecore.gui.screens.ScreenLayer;
|
import mightypork.gamecore.gui.screens.ScreenLayer;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package mightypork.test;
|
package mightypork.test;
|
||||||
|
|
||||||
|
|
||||||
import static mightypork.utils.math.constraints.Bounds.*;
|
import static mightypork.utils.math.constraints.ConstraintFactory.*;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package mightypork.test;
|
||||||
|
|
||||||
|
|
||||||
|
import mightypork.utils.objects.Convert;
|
||||||
|
|
||||||
|
|
||||||
|
public class TestConvert {
|
||||||
|
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
System.out.println(Convert.toVect("(10:20:30)"));
|
||||||
|
System.out.println(Convert.toVect("30.6 ; 80"));
|
||||||
|
System.out.println(Convert.toVect("30.6"));
|
||||||
|
|
||||||
|
System.out.println(Convert.toRange("10"));
|
||||||
|
System.out.println(Convert.toRange("10..60"));
|
||||||
|
System.out.println(Convert.toRange("10-60"));
|
||||||
|
System.out.println(Convert.toRange("10--60"));
|
||||||
|
System.out.println(Convert.toRange("-10--60"));
|
||||||
|
System.out.println(Convert.toRange("3.1;22"));
|
||||||
|
System.out.println(Convert.toRange("3.1|22"));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -364,7 +364,7 @@ public class PropertyManager {
|
|||||||
*/
|
*/
|
||||||
public VectView getCoord(String n)
|
public VectView getCoord(String n)
|
||||||
{
|
{
|
||||||
return Convert.toCoord(get(n).value);
|
return Convert.toVect(get(n).value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,11 @@ import java.util.Random;
|
|||||||
*/
|
*/
|
||||||
public class Range {
|
public class Range {
|
||||||
|
|
||||||
|
public static Range make(double low, double high)
|
||||||
|
{
|
||||||
|
return new Range(low, high);
|
||||||
|
}
|
||||||
|
|
||||||
private double min = 0;
|
private double min = 0;
|
||||||
private double max = 1;
|
private double max = 1;
|
||||||
|
|
||||||
@@ -132,7 +137,7 @@ public class Range {
|
|||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return String.format("( %.2f : %.2f )", min, max);
|
return String.format("Range(%.1f|%.1f)", min, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ package mightypork.utils.math.animation;
|
|||||||
import mightypork.gamecore.control.timing.Pauseable;
|
import mightypork.gamecore.control.timing.Pauseable;
|
||||||
import mightypork.gamecore.control.timing.Updateable;
|
import mightypork.gamecore.control.timing.Updateable;
|
||||||
import mightypork.utils.math.Calc;
|
import mightypork.utils.math.Calc;
|
||||||
import mightypork.utils.math.constraints.NumberBound;
|
import mightypork.utils.math.constraints.NumBound;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -12,7 +12,7 @@ import mightypork.utils.math.constraints.NumberBound;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public class AnimDouble implements Updateable, Pauseable, NumberBound {
|
public class AnimDouble implements Updateable, Pauseable, NumBound {
|
||||||
|
|
||||||
/** target double */
|
/** target double */
|
||||||
protected double to = 0;
|
protected double to = 0;
|
||||||
|
|||||||
+42
-42
@@ -16,7 +16,7 @@ import mightypork.utils.math.vect.VectView;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public class Bounds {
|
public class ConstraintFactory {
|
||||||
|
|
||||||
public static RectCache cached(final Poller poller, final RectBound rc)
|
public static RectCache cached(final Poller poller, final RectBound rc)
|
||||||
{
|
{
|
||||||
@@ -25,16 +25,16 @@ public class Bounds {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert {@link Number} to {@link NumberBound} if needed
|
* Convert {@link Number} to {@link NumBound} if needed
|
||||||
*
|
*
|
||||||
* @param o unknown numeric value
|
* @param o unknown numeric value
|
||||||
* @return converted
|
* @return converted
|
||||||
*/
|
*/
|
||||||
private static NumberBound toNumberBound(final Object o)
|
private static NumBound toNumberBound(final Object o)
|
||||||
{
|
{
|
||||||
if (o instanceof NumberBound) return (NumberBound) o;
|
if (o instanceof NumBound) return (NumBound) o;
|
||||||
|
|
||||||
if (o instanceof Number) return new NumberBound() {
|
if (o instanceof Number) return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -48,7 +48,7 @@ public class Bounds {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert {@link Number} or {@link NumberBound} to double (current value)
|
* Convert {@link Number} or {@link NumBound} to double (current value)
|
||||||
*
|
*
|
||||||
* @param o unknown numeric value
|
* @param o unknown numeric value
|
||||||
* @return double value
|
* @return double value
|
||||||
@@ -59,9 +59,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound min(final Object a, final Object b)
|
public static NumBound min(final Object a, final Object b)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -72,9 +72,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound max(final Object a, final Object b)
|
public static NumBound max(final Object a, final Object b)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -85,9 +85,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound abs(final NumberBound a)
|
public static NumBound abs(final NumBound a)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -98,9 +98,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound half(final NumberBound a)
|
public static NumBound half(final NumBound a)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -111,9 +111,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound round(final NumberBound a)
|
public static NumBound round(final NumBound a)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -137,9 +137,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound ceil(final NumberBound a)
|
public static NumBound ceil(final NumBound a)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -150,9 +150,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound floor(final NumberBound a)
|
public static NumBound floor(final NumBound a)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -163,9 +163,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound neg(final NumberBound a)
|
public static NumBound neg(final NumBound a)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -176,9 +176,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound add(final Object a, final Object b)
|
public static NumBound add(final Object a, final Object b)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -189,9 +189,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound sub(final Object a, final Object b)
|
public static NumBound sub(final Object a, final Object b)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -202,9 +202,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound mul(final Object a, final Object b)
|
public static NumBound mul(final Object a, final Object b)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -215,15 +215,15 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound half(final Object a)
|
public static NumBound half(final Object a)
|
||||||
{
|
{
|
||||||
return mul(a, 0.5);
|
return mul(a, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound div(final Object a, final Object b)
|
public static NumBound div(final Object a, final Object b)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -234,9 +234,9 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound perc(final Object whole, final Object percent)
|
public static NumBound perc(final Object whole, final Object percent)
|
||||||
{
|
{
|
||||||
return new NumberBound() {
|
return new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -546,7 +546,7 @@ public class Bounds {
|
|||||||
{
|
{
|
||||||
final VectView size = r.getRect().size();
|
final VectView size = r.getRect().size();
|
||||||
|
|
||||||
return RectVal.make(centerTo.getValue().sub(size.half()), size);
|
return RectVal.make(centerTo.copy().sub(size.half()), size);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -720,7 +720,7 @@ public class Bounds {
|
|||||||
@Override
|
@Override
|
||||||
public VectView getSource()
|
public VectView getSource()
|
||||||
{
|
{
|
||||||
return c1.getValue().add(c2);
|
return c1.copy().add(c2);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -739,7 +739,7 @@ public class Bounds {
|
|||||||
@Override
|
@Override
|
||||||
public VectView getSource()
|
public VectView getSource()
|
||||||
{
|
{
|
||||||
return c.getValue().add(eval(x), eval(y), eval(z));
|
return c.copy().add(eval(x), eval(y), eval(z));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -752,7 +752,7 @@ public class Bounds {
|
|||||||
@Override
|
@Override
|
||||||
public VectView getSource()
|
public VectView getSource()
|
||||||
{
|
{
|
||||||
return c1.getValue().sub(c2);
|
return c1.copy().sub(c2);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -771,7 +771,7 @@ public class Bounds {
|
|||||||
@Override
|
@Override
|
||||||
public VectView getSource()
|
public VectView getSource()
|
||||||
{
|
{
|
||||||
return c.getValue().sub(eval(x), eval(y), eval(z));
|
return c.copy().sub(eval(x), eval(y), eval(z));
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -785,7 +785,7 @@ public class Bounds {
|
|||||||
@Override
|
@Override
|
||||||
public VectView getSource()
|
public VectView getSource()
|
||||||
{
|
{
|
||||||
return c.getValue().mul(eval(mul));
|
return c.copy().mul(eval(mul));
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -799,7 +799,7 @@ public class Bounds {
|
|||||||
@Override
|
@Override
|
||||||
public VectView getSource()
|
public VectView getSource()
|
||||||
{
|
{
|
||||||
return c.getValue().norm(eval(norm));
|
return c.copy().norm(eval(norm));
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -832,13 +832,13 @@ public class Bounds {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound height(final RectBound r)
|
public static NumBound height(final RectBound r)
|
||||||
{
|
{
|
||||||
return size(r).yc();
|
return size(r).yc();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static NumberBound width(final RectBound r)
|
public static NumBound width(final RectBound r)
|
||||||
{
|
{
|
||||||
return size(r).xc();
|
return size(r).xc();
|
||||||
}
|
}
|
||||||
+3
-3
@@ -6,10 +6,10 @@ package mightypork.utils.math.constraints;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public interface NumberBound {
|
public interface NumBound {
|
||||||
|
|
||||||
public static final NumberBound ZERO = new NumberConst(0);
|
public static final NumBound ZERO = new NumberConst(0);
|
||||||
public static final NumberBound ONE = new NumberConst(1);
|
public static final NumBound ONE = new NumberConst(1);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2,11 +2,11 @@ package mightypork.utils.math.constraints;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constant number {@link NumberBound}
|
* Constant number {@link NumBound}
|
||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public class NumberConst implements NumberBound {
|
public class NumberConst implements NumBound {
|
||||||
|
|
||||||
private final double value;
|
private final double value;
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public class RectCache implements RectBound, Pollable {
|
|||||||
@Override
|
@Override
|
||||||
public RectView getRect()
|
public RectView getRect()
|
||||||
{
|
{
|
||||||
return cached.getView();
|
return cached.view();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package mightypork.utils.math.constraints;
|
||||||
|
|
||||||
|
|
||||||
|
import mightypork.utils.math.vect.Vect;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Element holding a vector, used for constraint building.
|
||||||
|
*
|
||||||
|
* @author MightyPork
|
||||||
|
*/
|
||||||
|
public interface VectBound {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the current vector.
|
||||||
|
*/
|
||||||
|
public Vect getVect();
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package mightypork.utils.math.constraints.builder;
|
||||||
|
|
||||||
|
|
||||||
|
import mightypork.utils.math.constraints.RectBound;
|
||||||
|
|
||||||
|
|
||||||
|
public class Bounds {
|
||||||
|
|
||||||
|
public static class RectBB {
|
||||||
|
|
||||||
|
private final RectBound parent;
|
||||||
|
|
||||||
|
|
||||||
|
public RectBB(RectBound parent) {
|
||||||
|
this.parent = parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,119 +16,133 @@ public abstract class AbstractRect implements Rect {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final RectView getRect()
|
public RectView getRect()
|
||||||
{
|
{
|
||||||
return this.getView();
|
return this.view();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final VectVal topLeft()
|
public VectVal topLeft()
|
||||||
{
|
{
|
||||||
return origin();
|
return origin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final VectVal topCenter()
|
public VectVal topCenter()
|
||||||
{
|
{
|
||||||
return origin().add(size().x() / 2, 0);
|
return origin().add(size().x() / 2, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final VectVal topRight()
|
public VectVal topRight()
|
||||||
{
|
{
|
||||||
return origin().add(size().x(), 0);
|
return origin().add(size().x(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final VectVal centerLeft()
|
public VectVal centerLeft()
|
||||||
{
|
{
|
||||||
return origin().add(0, size().y() / 2);
|
return origin().add(0, size().y() / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final VectVal center()
|
public VectVal center()
|
||||||
{
|
{
|
||||||
return origin().add(size().half());
|
return origin().add(size().half());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final VectVal centerRight()
|
public VectVal centerRight()
|
||||||
{
|
{
|
||||||
return origin().add(size().x(), size().y() / 2);
|
return origin().add(size().x(), size().y() / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final VectVal bottomLeft()
|
public VectVal bottomLeft()
|
||||||
{
|
{
|
||||||
return origin().add(0, size().y());
|
return origin().add(0, size().y());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final VectVal bottomCenter()
|
public VectVal bottomCenter()
|
||||||
{
|
{
|
||||||
return origin().add(size().x() / 2, size().y());
|
return origin().add(size().x() / 2, size().y());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final VectVal bottomRight()
|
public VectVal bottomRight()
|
||||||
{
|
{
|
||||||
return origin().add(size().x(), size().y());
|
return origin().add(size().x(), size().y());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final double width()
|
public double x()
|
||||||
{
|
|
||||||
return size().x();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final double height()
|
|
||||||
{
|
|
||||||
return size().y();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final double getLeft()
|
|
||||||
{
|
{
|
||||||
return origin().x();
|
return origin().x();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final double right()
|
public double y()
|
||||||
{
|
|
||||||
return origin().x() + size().x();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final double top()
|
|
||||||
{
|
{
|
||||||
return origin().y();
|
return origin().y();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final double bottom()
|
public double width()
|
||||||
|
{
|
||||||
|
return size().x();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double height()
|
||||||
|
{
|
||||||
|
return size().y();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double left()
|
||||||
|
{
|
||||||
|
return origin().x();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double right()
|
||||||
|
{
|
||||||
|
return origin().x() + size().x();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double top()
|
||||||
|
{
|
||||||
|
return origin().y();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double bottom()
|
||||||
{
|
{
|
||||||
return origin().y() + size().y();
|
return origin().y() + size().y();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RectProxy getView()
|
public RectView view()
|
||||||
{
|
{
|
||||||
if (proxy == null) proxy = new RectProxy(this);
|
if (proxy == null) proxy = new RectProxy(this);
|
||||||
|
|
||||||
@@ -137,14 +151,14 @@ public abstract class AbstractRect implements Rect {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RectVal getValue()
|
public RectVal copy()
|
||||||
{
|
{
|
||||||
return RectVal.make(origin(), size());
|
return new RectVal(x(), y(), width(), height());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean contains(Vect point)
|
public boolean contains(Vect point)
|
||||||
{
|
{
|
||||||
final double x = point.x();
|
final double x = point.x();
|
||||||
final double y = point.y();
|
final double y = point.y();
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public interface Rect extends RectBound {
|
|||||||
*
|
*
|
||||||
* @return copy
|
* @return copy
|
||||||
*/
|
*/
|
||||||
RectVal getValue();
|
RectVal copy();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -30,63 +30,123 @@ public interface Rect extends RectBound {
|
|||||||
*
|
*
|
||||||
* @return proxy
|
* @return proxy
|
||||||
*/
|
*/
|
||||||
RectProxy getView();
|
RectView view();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return origin
|
* @return origin (top left)
|
||||||
*/
|
*/
|
||||||
VectVal origin();
|
VectVal origin();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return size vector
|
||||||
|
*/
|
||||||
VectVal size();
|
VectVal size();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return current width
|
||||||
|
*/
|
||||||
double width();
|
double width();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return current height
|
||||||
|
*/
|
||||||
double height();
|
double height();
|
||||||
|
|
||||||
|
|
||||||
VectVal topLeft();
|
/**
|
||||||
|
* @return origin X
|
||||||
|
*/
|
||||||
|
double x();
|
||||||
|
|
||||||
|
|
||||||
VectVal topCenter();
|
/**
|
||||||
|
* @return origin Y
|
||||||
|
*/
|
||||||
|
double y();
|
||||||
|
|
||||||
|
|
||||||
VectVal topRight();
|
/**
|
||||||
|
* @return left X (low)
|
||||||
|
*/
|
||||||
VectVal centerLeft();
|
double left();
|
||||||
|
|
||||||
|
|
||||||
VectVal center();
|
|
||||||
|
|
||||||
|
|
||||||
VectVal centerRight();
|
|
||||||
|
|
||||||
|
|
||||||
VectVal bottomLeft();
|
|
||||||
|
|
||||||
|
|
||||||
VectVal bottomCenter();
|
|
||||||
|
|
||||||
|
|
||||||
VectVal bottomRight();
|
|
||||||
|
|
||||||
|
|
||||||
double getLeft();
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return right X (high)
|
||||||
|
*/
|
||||||
double right();
|
double right();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return top Y (low)
|
||||||
|
*/
|
||||||
double top();
|
double top();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bottom Y (high)
|
||||||
|
*/
|
||||||
double bottom();
|
double bottom();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return top left corner position
|
||||||
|
*/
|
||||||
|
VectVal topLeft();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return top center position
|
||||||
|
*/
|
||||||
|
VectVal topCenter();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return top right corner position
|
||||||
|
*/
|
||||||
|
VectVal topRight();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return left center position
|
||||||
|
*/
|
||||||
|
VectVal centerLeft();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return center position
|
||||||
|
*/
|
||||||
|
VectVal center();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return right center position
|
||||||
|
*/
|
||||||
|
VectVal centerRight();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bottom left corner position
|
||||||
|
*/
|
||||||
|
VectVal bottomLeft();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bottom center position
|
||||||
|
*/
|
||||||
|
VectVal bottomCenter();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bottom right corner position
|
||||||
|
*/
|
||||||
|
VectVal bottomRight();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if point is inside this rectangle
|
* Check if point is inside this rectangle
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -94,14 +94,14 @@ class RectMutableImpl extends RectMutable {
|
|||||||
@Override
|
@Override
|
||||||
public VectVal origin()
|
public VectVal origin()
|
||||||
{
|
{
|
||||||
return pos.getValue();
|
return pos.copy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VectVal size()
|
public VectVal size()
|
||||||
{
|
{
|
||||||
return size.getValue();
|
return size.copy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,25 @@ import mightypork.utils.math.vect.Vect;
|
|||||||
import mightypork.utils.math.vect.VectVal;
|
import mightypork.utils.math.vect.VectVal;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rectangle with constant bounds, that can never change.
|
||||||
|
*
|
||||||
|
* @author MightyPork
|
||||||
|
*/
|
||||||
public class RectVal extends RectView {
|
public class RectVal extends RectView {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a proxy at given rect
|
||||||
|
*
|
||||||
|
* @param observed observed rect
|
||||||
|
* @return view
|
||||||
|
*/
|
||||||
|
public static RectVal make(Rect observed)
|
||||||
|
{
|
||||||
|
return observed.copy();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create at 0,0 with zero size
|
* Create at 0,0 with zero size
|
||||||
*
|
*
|
||||||
@@ -114,7 +131,7 @@ public class RectVal extends RectView {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RectVal getValue()
|
public RectVal copy()
|
||||||
{
|
{
|
||||||
return this; // nothing can change.
|
return this; // nothing can change.
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ public abstract class RectView extends RectMath<RectVal> {
|
|||||||
*/
|
*/
|
||||||
public static RectView make(Rect observed)
|
public static RectView make(Rect observed)
|
||||||
{
|
{
|
||||||
return observed.getView();
|
return observed.view();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
package mightypork.utils.math.vect;
|
package mightypork.utils.math.vect;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.utils.math.constraints.NumberBound;
|
import mightypork.utils.math.constraints.NumBound;
|
||||||
|
|
||||||
|
|
||||||
public abstract class AbstractVect implements Vect {
|
public abstract class AbstractVect implements Vect {
|
||||||
|
|
||||||
private VectView proxy;
|
private VectView proxy;
|
||||||
private NumberBound xc;
|
private NumBound xc;
|
||||||
private NumberBound yc;
|
private NumBound yc;
|
||||||
private NumberBound zc;
|
private NumBound zc;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -46,9 +46,9 @@ public abstract class AbstractVect implements Vect {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final NumberBound xc()
|
public final NumBound xc()
|
||||||
{
|
{
|
||||||
if (xc == null) xc = new NumberBound() {
|
if (xc == null) xc = new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -62,9 +62,9 @@ public abstract class AbstractVect implements Vect {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final NumberBound yc()
|
public final NumBound yc()
|
||||||
{
|
{
|
||||||
if (yc == null) yc = new NumberBound() {
|
if (yc == null) yc = new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -78,9 +78,9 @@ public abstract class AbstractVect implements Vect {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final NumberBound zc()
|
public final NumBound zc()
|
||||||
{
|
{
|
||||||
if (zc == null) zc = new NumberBound() {
|
if (zc == null) zc = new NumBound() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getValue()
|
public double getValue()
|
||||||
@@ -93,6 +93,13 @@ public abstract class AbstractVect implements Vect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final Vect getVect()
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final double size()
|
public final double size()
|
||||||
{
|
{
|
||||||
@@ -109,62 +116,14 @@ public abstract class AbstractVect implements Vect {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VectVal getValue()
|
public VectVal copy()
|
||||||
{
|
{
|
||||||
return new VectVal(this);
|
return new VectVal(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final double distTo(Vect point)
|
public VectView view()
|
||||||
{
|
|
||||||
final double dx = x() - point.x();
|
|
||||||
final double dy = y() - point.y();
|
|
||||||
final double dz = z() - point.z();
|
|
||||||
|
|
||||||
return Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final VectVal midTo(Vect point)
|
|
||||||
{
|
|
||||||
final double dx = (point.x() - x()) * 0.5;
|
|
||||||
final double dy = (point.y() - y()) * 0.5;
|
|
||||||
final double dz = (point.z() - z()) * 0.5;
|
|
||||||
|
|
||||||
return VectVal.make(dx, dy, dz);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final VectVal vecTo(Vect point)
|
|
||||||
{
|
|
||||||
return VectVal.make(point.x() - x(), point.y() - y(), point.z() - z());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final VectVal cross(Vect vec)
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
return VectVal.make(
|
|
||||||
y() * vec.z() - z() * vec.y(),
|
|
||||||
z() * vec.x() - x() * vec.z(),
|
|
||||||
x() * vec.y() - y() * vec.x());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final double dot(Vect vec)
|
|
||||||
{
|
|
||||||
return x() * vec.x() + y() * vec.y() + z() * vec.z();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VectView getView()
|
|
||||||
{
|
{
|
||||||
if (proxy == null) proxy = new VectProxy(this);
|
if (proxy == null) proxy = new VectProxy(this);
|
||||||
|
|
||||||
@@ -199,6 +158,6 @@ public abstract class AbstractVect implements Vect {
|
|||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return String.format("(%.1f %.1f %.1f)", x(), y(), z());
|
return String.format("(%.1f|%.1f|%.1f)", x(), y(), z());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,32 @@
|
|||||||
package mightypork.utils.math.vect;
|
package mightypork.utils.math.vect;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.utils.math.constraints.NumberBound;
|
import mightypork.utils.math.constraints.NumBound;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Coord view composed of given {@link NumberBound}s, using their current
|
* Coord view composed of given {@link NumBound}s, using their current values.
|
||||||
* values.
|
|
||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
class NumConstrVect extends VectView {
|
class NumConstrVect extends VectView {
|
||||||
|
|
||||||
private final NumberBound constrX;
|
private final NumBound constrX;
|
||||||
private final NumberBound constrY;
|
private final NumBound constrY;
|
||||||
private final NumberBound constrZ;
|
private final NumBound constrZ;
|
||||||
|
|
||||||
|
|
||||||
public NumConstrVect(NumberBound x, NumberBound y, NumberBound z) {
|
public NumConstrVect(NumBound x, NumBound y, NumBound z) {
|
||||||
this.constrX = x;
|
this.constrX = x;
|
||||||
this.constrY = y;
|
this.constrY = y;
|
||||||
this.constrZ = z;
|
this.constrZ = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public NumConstrVect(NumberBound x, NumberBound y) {
|
public NumConstrVect(NumBound x, NumBound y) {
|
||||||
this.constrX = x;
|
this.constrX = x;
|
||||||
this.constrY = y;
|
this.constrY = y;
|
||||||
this.constrZ = NumberBound.ZERO;
|
this.constrZ = NumBound.ZERO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package mightypork.utils.math.vect;
|
package mightypork.utils.math.vect;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.utils.math.constraints.NumberBound;
|
import mightypork.utils.math.constraints.NumBound;
|
||||||
|
import mightypork.utils.math.constraints.VectBound;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -9,7 +10,7 @@ import mightypork.utils.math.constraints.NumberBound;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public interface Vect {
|
public interface Vect extends VectBound {
|
||||||
|
|
||||||
public static final VectVal ZERO = new VectVal(0, 0, 0);
|
public static final VectVal ZERO = new VectVal(0, 0, 0);
|
||||||
public static final VectVal ONE = new VectVal(0, 0, 0);
|
public static final VectVal ONE = new VectVal(0, 0, 0);
|
||||||
@@ -54,19 +55,19 @@ public interface Vect {
|
|||||||
/**
|
/**
|
||||||
* @return X constraint
|
* @return X constraint
|
||||||
*/
|
*/
|
||||||
NumberBound xc();
|
NumBound xc();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Y constraint
|
* @return Y constraint
|
||||||
*/
|
*/
|
||||||
NumberBound yc();
|
NumBound yc();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Z constraint
|
* @return Z constraint
|
||||||
*/
|
*/
|
||||||
NumberBound zc();
|
NumBound zc();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -83,57 +84,12 @@ public interface Vect {
|
|||||||
public boolean isZero();
|
public boolean isZero();
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get distance to other point
|
|
||||||
*
|
|
||||||
* @param point other point
|
|
||||||
* @return distance
|
|
||||||
*/
|
|
||||||
double distTo(Vect point);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get middle of line to other point
|
|
||||||
*
|
|
||||||
* @param point other point
|
|
||||||
* @return result
|
|
||||||
*/
|
|
||||||
VectVal midTo(Vect point);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create vector from this point to other point
|
|
||||||
*
|
|
||||||
* @param point second point
|
|
||||||
* @return result
|
|
||||||
*/
|
|
||||||
VectVal vecTo(Vect point);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cross product (vector multiplication)
|
|
||||||
*
|
|
||||||
* @param vec other vector
|
|
||||||
* @return result
|
|
||||||
*/
|
|
||||||
VectVal cross(Vect vec);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get dot product (scalar multiplication)
|
|
||||||
*
|
|
||||||
* @param vec other vector
|
|
||||||
* @return dot product
|
|
||||||
*/
|
|
||||||
double dot(Vect vec);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a view at current state, not propagating further changes.
|
* Get a view at current state, not propagating further changes.
|
||||||
*
|
*
|
||||||
* @return a immutable copy
|
* @return a immutable copy
|
||||||
*/
|
*/
|
||||||
VectVal getValue();
|
VectVal copy();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -141,5 +97,5 @@ public interface Vect {
|
|||||||
*
|
*
|
||||||
* @return immutable view
|
* @return immutable view
|
||||||
*/
|
*/
|
||||||
VectView getView();
|
VectView view();
|
||||||
}
|
}
|
||||||
|
|||||||
+61
-8
@@ -12,20 +12,73 @@ import mightypork.utils.math.animation.Easing;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
public class VectMutableAnim extends VectMutable implements Pauseable, Updateable {
|
public class VectAnimated extends VectMutable implements Pauseable, Updateable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an animated vector; This way different easing / settings can be
|
||||||
|
* specified for each coordinate.
|
||||||
|
*
|
||||||
|
* @param x x animator
|
||||||
|
* @param y y animator
|
||||||
|
* @param z z animator
|
||||||
|
* @return animated mutable vector
|
||||||
|
*/
|
||||||
|
public static VectAnimated make(AnimDouble x, AnimDouble y, AnimDouble z)
|
||||||
|
{
|
||||||
|
return new VectAnimated(x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an animated vector
|
||||||
|
*
|
||||||
|
* @param start initial positioon
|
||||||
|
* @param easing animation easing
|
||||||
|
* @return animated mutable vector
|
||||||
|
*/
|
||||||
|
public static VectAnimated make(Vect start, Easing easing)
|
||||||
|
{
|
||||||
|
return new VectAnimated(start, easing);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an animated vector, initialized at 0,0,0
|
||||||
|
*
|
||||||
|
* @param easing animation easing
|
||||||
|
* @return animated mutable vector
|
||||||
|
*/
|
||||||
|
public static VectAnimated make(Easing easing)
|
||||||
|
{
|
||||||
|
return new VectAnimated(Vect.ZERO, easing);
|
||||||
|
}
|
||||||
|
|
||||||
private final AnimDouble x, y, z;
|
private final AnimDouble x, y, z;
|
||||||
private double defaultDuration = 0;
|
private double defaultDuration = 0;
|
||||||
|
|
||||||
|
|
||||||
VectMutableAnim(AnimDouble x, AnimDouble y, AnimDouble z) {
|
/**
|
||||||
|
* Create an animated vector; This way different easing / settings can be
|
||||||
|
* specified for each coordinate.
|
||||||
|
*
|
||||||
|
* @param x x animator
|
||||||
|
* @param y y animator
|
||||||
|
* @param z z animator
|
||||||
|
*/
|
||||||
|
public VectAnimated(AnimDouble x, AnimDouble y, AnimDouble z) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.z = z;
|
this.z = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VectMutableAnim(Vect start, Easing easing) {
|
/**
|
||||||
|
* Create an animated vector
|
||||||
|
*
|
||||||
|
* @param start initial positioon
|
||||||
|
* @param easing animation easing
|
||||||
|
*/
|
||||||
|
public VectAnimated(Vect start, Easing easing) {
|
||||||
x = new AnimDouble(start.x(), easing);
|
x = new AnimDouble(start.x(), easing);
|
||||||
y = new AnimDouble(start.y(), easing);
|
y = new AnimDouble(start.y(), easing);
|
||||||
z = new AnimDouble(start.z(), easing);
|
z = new AnimDouble(start.z(), easing);
|
||||||
@@ -74,7 +127,7 @@ public class VectMutableAnim extends VectMutable implements Pauseable, Updateabl
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VectMutableAnim result(double x, double y, double z)
|
public VectAnimated result(double x, double y, double z)
|
||||||
{
|
{
|
||||||
this.x.animate(x, defaultDuration);
|
this.x.animate(x, defaultDuration);
|
||||||
this.y.animate(y, defaultDuration);
|
this.y.animate(y, defaultDuration);
|
||||||
@@ -84,14 +137,14 @@ public class VectMutableAnim extends VectMutable implements Pauseable, Updateabl
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public VectMutableAnim add(Vect offset, double speed)
|
public VectAnimated add(Vect offset, double speed)
|
||||||
{
|
{
|
||||||
animate(getView().add(offset), speed);
|
animate(view().add(offset), speed);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public VectMutableAnim animate(double x, double y, double z, double duration)
|
public VectAnimated animate(double x, double y, double z, double duration)
|
||||||
{
|
{
|
||||||
this.x.animate(x, duration);
|
this.x.animate(x, duration);
|
||||||
this.y.animate(y, duration);
|
this.y.animate(y, duration);
|
||||||
@@ -100,7 +153,7 @@ public class VectMutableAnim extends VectMutable implements Pauseable, Updateabl
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public VectMutableAnim animate(Vect target, double duration)
|
public VectAnimated animate(Vect target, double duration)
|
||||||
{
|
{
|
||||||
animate(target.x(), target.y(), target.z(), duration);
|
animate(target.x(), target.y(), target.z(), duration);
|
||||||
return this;
|
return this;
|
||||||
@@ -274,4 +274,77 @@ abstract class VectMath<V extends Vect> extends AbstractVect {
|
|||||||
|
|
||||||
return mul(k);
|
return mul(k);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get distance to other point
|
||||||
|
*
|
||||||
|
* @param point other point
|
||||||
|
* @return distance
|
||||||
|
*/
|
||||||
|
public final double distTo(Vect point)
|
||||||
|
{
|
||||||
|
final double dx = x() - point.x();
|
||||||
|
final double dy = y() - point.y();
|
||||||
|
final double dz = z() - point.z();
|
||||||
|
|
||||||
|
return Math.sqrt(dx * dx + dy * dy + dz * dz);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get middle of line to other point
|
||||||
|
*
|
||||||
|
* @param point other point
|
||||||
|
* @return result
|
||||||
|
*/
|
||||||
|
public final VectVal midTo(Vect point)
|
||||||
|
{
|
||||||
|
final double dx = (point.x() - x()) * 0.5;
|
||||||
|
final double dy = (point.y() - y()) * 0.5;
|
||||||
|
final double dz = (point.z() - z()) * 0.5;
|
||||||
|
|
||||||
|
return VectVal.make(dx, dy, dz);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create vector from this point to other point
|
||||||
|
*
|
||||||
|
* @param point second point
|
||||||
|
* @return result
|
||||||
|
*/
|
||||||
|
public final VectVal vectTo(Vect point)
|
||||||
|
{
|
||||||
|
return VectVal.make(point.x() - x(), point.y() - y(), point.z() - z());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get cross product (vector multiplication)
|
||||||
|
*
|
||||||
|
* @param vec other vector
|
||||||
|
* @return result
|
||||||
|
*/
|
||||||
|
public final VectVal cross(Vect vec)
|
||||||
|
{
|
||||||
|
//@formatter:off
|
||||||
|
return VectVal.make(
|
||||||
|
y() * vec.z() - z() * vec.y(),
|
||||||
|
z() * vec.x() - x() * vec.z(),
|
||||||
|
x() * vec.y() - y() * vec.x());
|
||||||
|
//@formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get dot product (scalar multiplication)
|
||||||
|
*
|
||||||
|
* @param vec other vector
|
||||||
|
* @return dot product
|
||||||
|
*/
|
||||||
|
public final double dot(Vect vec)
|
||||||
|
{
|
||||||
|
return x() * vec.x() + y() * vec.y() + z() * vec.z();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package mightypork.utils.math.vect;
|
package mightypork.utils.math.vect;
|
||||||
|
|
||||||
|
|
||||||
import mightypork.utils.math.animation.AnimDouble;
|
|
||||||
import mightypork.utils.math.animation.Easing;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -69,66 +67,10 @@ public abstract class VectMutable extends VectMath<VectMutable> { // returns its
|
|||||||
*/
|
*/
|
||||||
public static VectMutable make(double x, double y, double z)
|
public static VectMutable make(double x, double y, double z)
|
||||||
{
|
{
|
||||||
return new VectMutableImpl(x, y, z);
|
return new VectMutableVariable(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an animated vector; This way different easing / settings can be
|
|
||||||
* specified for each coordinate.
|
|
||||||
*
|
|
||||||
* @param animX x animator
|
|
||||||
* @param animY y animator
|
|
||||||
* @param animZ z animator
|
|
||||||
* @return animated mutable vector
|
|
||||||
*/
|
|
||||||
public static VectMutableAnim makeAnim(AnimDouble animX, AnimDouble animY, AnimDouble animZ)
|
|
||||||
{
|
|
||||||
return new VectMutableAnim(animX, animY, animZ);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an animated vector
|
|
||||||
*
|
|
||||||
* @param animStart initial positioon
|
|
||||||
* @param easing animation easing
|
|
||||||
* @return animated mutable vector
|
|
||||||
*/
|
|
||||||
public static VectMutableAnim makeAnim(Vect animStart, Easing easing)
|
|
||||||
{
|
|
||||||
return new VectMutableAnim(animStart, easing);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an animated vector, initialized at 0,0,0
|
|
||||||
*
|
|
||||||
* @param easing animation easing
|
|
||||||
* @return animated mutable vector
|
|
||||||
*/
|
|
||||||
public static VectMutableAnim makeAnim(Easing easing)
|
|
||||||
{
|
|
||||||
return new VectMutableAnim(Vect.ZERO, easing);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public abstract VectMutable result(double x, double y, double z);
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public abstract double x();
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public abstract double y();
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public abstract double z();
|
|
||||||
|
|
||||||
|
|
||||||
public VectMutable reset()
|
public VectMutable reset()
|
||||||
{
|
{
|
||||||
return result(0, 0, 0);
|
return result(0, 0, 0);
|
||||||
|
|||||||
+3
-3
@@ -7,7 +7,7 @@ package mightypork.utils.math.vect;
|
|||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
class VectMutableImpl extends VectMutable {
|
class VectMutableVariable extends VectMutable {
|
||||||
|
|
||||||
private double x, y, z;
|
private double x, y, z;
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ class VectMutableImpl extends VectMutable {
|
|||||||
* @param y Y coordinate
|
* @param y Y coordinate
|
||||||
* @param z Z coordinate
|
* @param z Z coordinate
|
||||||
*/
|
*/
|
||||||
public VectMutableImpl(double x, double y, double z) {
|
public VectMutableVariable(double x, double y, double z) {
|
||||||
super();
|
super();
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
@@ -47,7 +47,7 @@ class VectMutableImpl extends VectMutable {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public VectMutableImpl result(double x, double y, double z)
|
public VectMutable result(double x, double y, double z)
|
||||||
{
|
{
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
@@ -3,8 +3,7 @@ package mightypork.utils.math.vect;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Coordinate with immutable numeric values.<br>
|
* Coordinate with immutable numeric values.<br>
|
||||||
* This coordinate is guaranteed to never change, as opposed to view, which can
|
* This coordinate is guaranteed to never change, as opposed to view.
|
||||||
* be a proxy or a synthetic vector.
|
|
||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
@@ -18,7 +17,7 @@ public final class VectVal extends VectView {
|
|||||||
*/
|
*/
|
||||||
public static VectVal make(Vect value)
|
public static VectVal make(Vect value)
|
||||||
{
|
{
|
||||||
return value.getValue();
|
return value.copy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -51,12 +50,12 @@ public final class VectVal extends VectView {
|
|||||||
private final double x, y, z;
|
private final double x, y, z;
|
||||||
|
|
||||||
|
|
||||||
protected VectVal(Vect other) {
|
public VectVal(Vect other) {
|
||||||
this(other.x(), other.y(), other.z());
|
this(other.x(), other.y(), other.z());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected VectVal(double x, double y, double z) {
|
public VectVal(double x, double y, double z) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.z = z;
|
this.z = z;
|
||||||
@@ -84,12 +83,8 @@ public final class VectVal extends VectView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated It's constant already.
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@Deprecated
|
public VectVal copy()
|
||||||
public VectVal getValue()
|
|
||||||
{
|
{
|
||||||
return this; // it's constant already
|
return this; // it's constant already
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,12 @@ package mightypork.utils.math.vect;
|
|||||||
|
|
||||||
|
|
||||||
import mightypork.gamecore.control.interf.DefaultImpl;
|
import mightypork.gamecore.control.interf.DefaultImpl;
|
||||||
import mightypork.utils.math.constraints.NumberBound;
|
import mightypork.utils.math.constraints.NumBound;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read-only coordinate.
|
* Read-only coordinate, whose values cannot be changed directly. To keep
|
||||||
|
* current state, use the value() method.
|
||||||
*
|
*
|
||||||
* @author MightyPork
|
* @author MightyPork
|
||||||
*/
|
*/
|
||||||
@@ -20,7 +21,7 @@ public abstract class VectView extends VectMath<VectVal> { // returns constant v
|
|||||||
*/
|
*/
|
||||||
public static VectView make(Vect observed)
|
public static VectView make(Vect observed)
|
||||||
{
|
{
|
||||||
return observed.getView();
|
return observed.view();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -31,7 +32,7 @@ public abstract class VectView extends VectMath<VectVal> { // returns constant v
|
|||||||
* @param yc Y value
|
* @param yc Y value
|
||||||
* @return view at the values
|
* @return view at the values
|
||||||
*/
|
*/
|
||||||
public static VectView make(NumberBound xc, NumberBound yc)
|
public static VectView make(NumBound xc, NumBound yc)
|
||||||
{
|
{
|
||||||
return new NumConstrVect(xc, yc);
|
return new NumConstrVect(xc, yc);
|
||||||
}
|
}
|
||||||
@@ -45,7 +46,7 @@ public abstract class VectView extends VectMath<VectVal> { // returns constant v
|
|||||||
* @param zc Z value
|
* @param zc Z value
|
||||||
* @return view at the values
|
* @return view at the values
|
||||||
*/
|
*/
|
||||||
public static VectView make(NumberBound xc, NumberBound yc, NumberBound zc)
|
public static VectView make(NumBound xc, NumBound yc, NumBound zc)
|
||||||
{
|
{
|
||||||
return new NumConstrVect(xc, yc, zc);
|
return new NumConstrVect(xc, yc, zc);
|
||||||
}
|
}
|
||||||
@@ -58,14 +59,10 @@ public abstract class VectView extends VectMath<VectVal> { // returns constant v
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated VecView is not mutable, making a proxy has no effect.
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
@Deprecated
|
public VectView view()
|
||||||
public VectView getView()
|
|
||||||
{
|
{
|
||||||
return this; // already not mutable
|
return this; // already a view
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -154,16 +154,24 @@ public class Convert {
|
|||||||
public static VectVal toVect(Object o, Vect def)
|
public static VectVal toVect(Object o, Vect def)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
if (o == null) return def.getValue();
|
if (o == null) return def.copy();
|
||||||
if (o instanceof Vect) return ((Vect) o).getValue();
|
if (o instanceof Vect) return ((Vect) o).copy();
|
||||||
if (o instanceof String) {
|
if (o instanceof String) {
|
||||||
String s = ((String) o).trim().toUpperCase();
|
String s = ((String) o).trim();
|
||||||
|
|
||||||
// colon to semicolon
|
// drop whitespace
|
||||||
s = s.replace(':', ';');
|
s = s.replaceAll("\\s", "");
|
||||||
// remove brackets if any
|
|
||||||
|
// drop brackets
|
||||||
s = s.replaceAll("[\\(\\[\\{\\)\\]\\}]", "");
|
s = s.replaceAll("[\\(\\[\\{\\)\\]\\}]", "");
|
||||||
final String[] parts = s.split("[;]");
|
|
||||||
|
// norm separators
|
||||||
|
s = s.replaceAll("[:;]", "|");
|
||||||
|
|
||||||
|
// norm floating point
|
||||||
|
s = s.replaceAll("[,]", ".");
|
||||||
|
|
||||||
|
final String[] parts = s.split("[|]");
|
||||||
|
|
||||||
if (parts.length >= 2) {
|
if (parts.length >= 2) {
|
||||||
|
|
||||||
@@ -183,7 +191,7 @@ public class Convert {
|
|||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
|
|
||||||
return def.getValue();
|
return def.copy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -203,18 +211,34 @@ public class Convert {
|
|||||||
if (o instanceof String) {
|
if (o instanceof String) {
|
||||||
String s = ((String) o).trim();
|
String s = ((String) o).trim();
|
||||||
|
|
||||||
// colon to semicolon
|
// drop whitespace
|
||||||
s = s.replace(',', ':');
|
s = s.replaceAll("\\s", "");
|
||||||
// comma to dot.
|
|
||||||
s = s.replace(';', ':');
|
|
||||||
// dash
|
|
||||||
s = s.replaceAll("([0-9])\\s?[\\-]", "$1:");
|
|
||||||
// remove brackets if any
|
|
||||||
s = s.replaceAll("[\\(\\[\\{\\)\\]\\}]", "");
|
|
||||||
final String[] parts = s.split("[:]");
|
|
||||||
if (parts.length == 2) return new Range(Double.parseDouble(parts[0].trim()), Double.parseDouble(parts[1].trim()));
|
|
||||||
return new Range(Double.parseDouble(parts[0].trim()), Double.parseDouble(parts[0].trim()));
|
|
||||||
|
|
||||||
|
// drop brackets
|
||||||
|
s = s.replaceAll("[\\(\\[\\{\\)\\]\\}]", "");
|
||||||
|
|
||||||
|
// norm separators
|
||||||
|
s = s.replaceAll("[:;]", "|").replace("..", "|");
|
||||||
|
|
||||||
|
// norm floating point
|
||||||
|
s = s.replaceAll("[,]", ".");
|
||||||
|
|
||||||
|
// dash to pipe, if not a minus sign
|
||||||
|
s = s.replaceAll("([0-9])\\s?[\\-]", "$1|");
|
||||||
|
|
||||||
|
final String[] parts = s.split("[|]");
|
||||||
|
|
||||||
|
if (parts.length >= 1) {
|
||||||
|
|
||||||
|
final double low = Double.parseDouble(parts[0].trim());
|
||||||
|
|
||||||
|
if (parts.length == 2) {
|
||||||
|
final double high = Double.parseDouble(parts[1].trim());
|
||||||
|
return Range.make(low, high);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Range.make(low, low);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (final NumberFormatException e) {
|
} catch (final NumberFormatException e) {
|
||||||
// ignore
|
// ignore
|
||||||
@@ -284,12 +308,12 @@ public class Convert {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Coord
|
* Get a vector of two or three coordinates
|
||||||
*
|
*
|
||||||
* @param o object
|
* @param o object
|
||||||
* @return Coord
|
* @return Coord
|
||||||
*/
|
*/
|
||||||
public static VectView toCoord(Object o)
|
public static VectView toVect(Object o)
|
||||||
{
|
{
|
||||||
return toVect(o, Vect.ZERO);
|
return toVect(o, Vect.ZERO);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user