Renamed constraints to bounds.

v5stable
Ondřej Hruška 10 years ago
parent 4816e0b539
commit e1d87df697
  1. 2
      src/mightypork/gamecore/audio/SoundSystem.java
  2. 6
      src/mightypork/gamecore/control/bus/events/MouseButtonEvent.java
  3. 4
      src/mightypork/gamecore/control/bus/events/MouseMotionEvent.java
  4. 2
      src/mightypork/gamecore/control/bus/events/ScreenChangeEvent.java
  5. 4
      src/mightypork/gamecore/gui/components/PluggableRenderable.java
  6. 4
      src/mightypork/gamecore/gui/components/PluggableRenderer.java
  7. 8
      src/mightypork/gamecore/gui/components/layout/ColumnHolder.java
  8. 8
      src/mightypork/gamecore/gui/components/layout/ElementHolder.java
  9. 8
      src/mightypork/gamecore/gui/components/layout/RowHolder.java
  10. 6
      src/mightypork/gamecore/gui/screens/Screen.java
  11. 4
      src/mightypork/gamecore/gui/screens/ScreenLayer.java
  12. 2
      src/mightypork/gamecore/input/InputSystem.java
  13. 4
      src/mightypork/gamecore/render/DisplaySystem.java
  14. 34
      src/mightypork/gamecore/render/Render.java
  15. 12
      src/mightypork/gamecore/render/fonts/FontRenderer.java
  16. 1
      src/mightypork/gamecore/render/fonts/impl/CachedFont.java
  17. 6
      src/mightypork/rogue/screens/LayerFps.java
  18. 20
      src/mightypork/rogue/screens/test_bouncyboxes/BouncyBox.java
  19. 6
      src/mightypork/rogue/screens/test_bouncyboxes/LayerBouncyBoxes.java
  20. 9
      src/mightypork/rogue/screens/test_cat_sound/LayerFlyingCat.java
  21. 10
      src/mightypork/rogue/screens/test_font/ScreenTestFont.java
  22. 12
      src/mightypork/rogue/screens/test_render/LayerTestGradient.java
  23. 8
      src/mightypork/test/TestConstr.java
  24. 4
      src/mightypork/utils/math/animation/AnimDouble.java
  25. 919
      src/mightypork/utils/math/constraints/Bounds.java
  26. 952
      src/mightypork/utils/math/constraints/Constraints.java
  27. 4
      src/mightypork/utils/math/constraints/ContextAdapter.java
  28. 20
      src/mightypork/utils/math/constraints/NumberBound.java
  29. 6
      src/mightypork/utils/math/constraints/NumberConst.java
  30. 20
      src/mightypork/utils/math/constraints/NumberConstraint.java
  31. 4
      src/mightypork/utils/math/constraints/PluggableRect.java
  32. 2
      src/mightypork/utils/math/constraints/RectBound.java
  33. 14
      src/mightypork/utils/math/constraints/RectCache.java
  34. 18
      src/mightypork/utils/math/constraints/VectConstraint.java
  35. 115
      src/mightypork/utils/math/rect/AbstractRect.java
  36. 51
      src/mightypork/utils/math/rect/Rect.java
  37. 4
      src/mightypork/utils/math/rect/RectMutable.java
  38. 8
      src/mightypork/utils/math/rect/RectMutableImpl.java
  39. 9
      src/mightypork/utils/math/rect/RectProxy.java
  40. 7
      src/mightypork/utils/math/rect/RectVal.java
  41. 16
      src/mightypork/utils/math/rect/RectView.java
  42. 39
      src/mightypork/utils/math/vect/AbstractVect.java
  43. 16
      src/mightypork/utils/math/vect/NumConstrVect.java
  44. 23
      src/mightypork/utils/math/vect/Vect.java
  45. 2
      src/mightypork/utils/math/vect/VectAdapter.java
  46. 2
      src/mightypork/utils/math/vect/VectMutableAnim.java
  47. 4
      src/mightypork/utils/math/vect/VectVal.java
  48. 14
      src/mightypork/utils/math/vect/VectView.java
  49. 6
      src/mightypork/utils/objects/Convert.java

@ -62,7 +62,7 @@ public class SoundSystem extends RootBusNode implements Updateable {
*/ */
public static VectView getListener() public static VectView getListener()
{ {
return listener.view(); return listener.getView();
} }
// -- instance -- // -- instance --

@ -1,7 +1,7 @@
package mightypork.gamecore.control.bus.events; package mightypork.gamecore.control.bus.events;
import mightypork.utils.math.constraints.RectConstraint; import mightypork.utils.math.constraints.RectBound;
import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.Vect;
import mightypork.utils.math.vect.VectView; import mightypork.utils.math.vect.VectView;
@ -80,7 +80,7 @@ public class MouseButtonEvent implements Event<MouseButtonEvent.Listener> {
*/ */
public VectView getPos() public VectView getPos()
{ {
return pos.view(); return pos.getView();
} }
@ -108,7 +108,7 @@ public class MouseButtonEvent implements Event<MouseButtonEvent.Listener> {
* @param rect rect region * @param rect rect region
* @return was over * @return was over
*/ */
public boolean isOver(RectConstraint rect) public boolean isOver(RectBound rect)
{ {
return rect.getRect().contains(pos); return rect.getRect().contains(pos);
} }

@ -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.value(); this.move = move.getValue();
this.pos = pos.value(); this.pos = pos.getValue();
} }

@ -52,7 +52,7 @@ public class ScreenChangeEvent implements Event<ScreenChangeEvent.Listener> {
*/ */
public VectView getScreenSize() public VectView getScreenSize()
{ {
return screenSize.view(); return screenSize.getView();
} }

@ -2,7 +2,7 @@ package mightypork.gamecore.gui.components;
import mightypork.utils.math.constraints.PluggableRect; import mightypork.utils.math.constraints.PluggableRect;
import mightypork.utils.math.constraints.RectConstraint; import mightypork.utils.math.constraints.RectBound;
import mightypork.utils.math.rect.RectView; import mightypork.utils.math.rect.RectView;
@ -22,6 +22,6 @@ public interface PluggableRenderable extends Renderable, PluggableRect {
@Override @Override
void setContext(RectConstraint rect); void setContext(RectBound rect);
} }

@ -2,7 +2,7 @@ package mightypork.gamecore.gui.components;
import mightypork.utils.math.constraints.ContextAdapter; import mightypork.utils.math.constraints.ContextAdapter;
import mightypork.utils.math.constraints.RectConstraint; import mightypork.utils.math.constraints.RectBound;
import mightypork.utils.math.rect.RectView; import mightypork.utils.math.rect.RectView;
@ -25,7 +25,7 @@ public abstract class PluggableRenderer extends ContextAdapter implements Plugga
@Override @Override
public void setContext(RectConstraint rect) public void setContext(RectBound rect)
{ {
super.setContext(rect); super.setContext(rect);
} }

@ -1,10 +1,10 @@
package mightypork.gamecore.gui.components.layout; package mightypork.gamecore.gui.components.layout;
import static mightypork.utils.math.constraints.Constraints.*; import static mightypork.utils.math.constraints.Bounds.*;
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.RectConstraint; import mightypork.utils.math.constraints.RectBound;
/** /**
@ -23,7 +23,7 @@ public class ColumnHolder extends ElementHolder {
* @param context context * @param context context
* @param rows number of rows * @param rows number of rows
*/ */
public ColumnHolder(AppAccess app, RectConstraint context, int rows) { public ColumnHolder(AppAccess app, RectBound context, int rows) {
super(app, context); super(app, context);
this.cols = rows; this.cols = rows;
} }
@ -52,7 +52,7 @@ public class ColumnHolder extends ElementHolder {
{ {
if (elem == null) return; if (elem == null) return;
elem.setContext(cColumn(this, cols, col++)); elem.setContext(column(this, cols, col++));
attach(elem); attach(elem);
} }

@ -9,7 +9,7 @@ import mightypork.gamecore.control.bus.clients.BusNode;
import mightypork.gamecore.gui.components.PluggableRenderable; import mightypork.gamecore.gui.components.PluggableRenderable;
import mightypork.gamecore.gui.components.PluggableRenderer; import mightypork.gamecore.gui.components.PluggableRenderer;
import mightypork.gamecore.gui.components.Renderable; import mightypork.gamecore.gui.components.Renderable;
import mightypork.utils.math.constraints.RectConstraint; import mightypork.utils.math.constraints.RectBound;
import mightypork.utils.math.rect.RectView; import mightypork.utils.math.rect.RectView;
@ -22,7 +22,7 @@ import mightypork.utils.math.rect.RectView;
public abstract class ElementHolder extends BusNode implements PluggableRenderable { public abstract class ElementHolder extends BusNode implements PluggableRenderable {
private final LinkedList<PluggableRenderable> elements = new LinkedList<>(); private final LinkedList<PluggableRenderable> elements = new LinkedList<>();
private RectConstraint context; private RectBound context;
/** /**
@ -37,14 +37,14 @@ public abstract class ElementHolder extends BusNode implements PluggableRenderab
* @param app app access * @param app app access
* @param context boudning context * @param context boudning context
*/ */
public ElementHolder(AppAccess app, RectConstraint context) { public ElementHolder(AppAccess app, RectBound context) {
super(app); super(app);
setContext(context); setContext(context);
} }
@Override @Override
public void setContext(RectConstraint context) public void setContext(RectBound context)
{ {
this.context = context; this.context = context;
} }

@ -1,10 +1,10 @@
package mightypork.gamecore.gui.components.layout; package mightypork.gamecore.gui.components.layout;
import static mightypork.utils.math.constraints.Constraints.*; import static mightypork.utils.math.constraints.Bounds.*;
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.RectConstraint; import mightypork.utils.math.constraints.RectBound;
/** /**
@ -23,7 +23,7 @@ public class RowHolder extends ElementHolder {
* @param context bounding context * @param context bounding context
* @param rows number of rows * @param rows number of rows
*/ */
public RowHolder(AppAccess app, RectConstraint context, int rows) { public RowHolder(AppAccess app, RectBound context, int rows) {
super(app, context); super(app, context);
this.rows = rows; this.rows = rows;
} }
@ -52,7 +52,7 @@ public class RowHolder extends ElementHolder {
{ {
if (elem == null) return; if (elem == null) return;
elem.setContext(cRow(this, rows, row++)); elem.setContext(row(this, rows, row++));
attach(elem); attach(elem);
} }

@ -10,7 +10,7 @@ import mightypork.gamecore.input.KeyBinder;
import mightypork.gamecore.input.KeyBindingPool; import mightypork.gamecore.input.KeyBindingPool;
import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.KeyStroke;
import mightypork.gamecore.render.Render; import mightypork.gamecore.render.Render;
import mightypork.utils.math.constraints.RectConstraint; import mightypork.utils.math.constraints.RectBound;
import mightypork.utils.math.rect.RectView; import mightypork.utils.math.rect.RectView;
import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.Vect;
@ -20,7 +20,7 @@ import mightypork.utils.math.vect.Vect;
* *
* @author MightyPork * @author MightyPork
*/ */
public abstract class Screen extends AppSubModule implements Renderable, KeyBinder, RectConstraint, ScreenChangeEvent.Listener { public abstract class Screen extends AppSubModule implements Renderable, KeyBinder, RectBound, ScreenChangeEvent.Listener {
private final KeyBindingPool keybindings = new KeyBindingPool(); private final KeyBindingPool keybindings = new KeyBindingPool();
@ -66,7 +66,7 @@ public abstract class Screen extends AppSubModule implements Renderable, KeyBind
active = true; active = true;
needSetupViewport = true; needSetupViewport = true;
onSizeChanged(getRect().getSize()); onSizeChanged(getRect().size());
onScreenEnter(); onScreenEnter();
// enable events // enable events

@ -7,7 +7,7 @@ import mightypork.gamecore.gui.components.Renderable;
import mightypork.gamecore.input.KeyBinder; import mightypork.gamecore.input.KeyBinder;
import mightypork.gamecore.input.KeyBindingPool; import mightypork.gamecore.input.KeyBindingPool;
import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.KeyStroke;
import mightypork.utils.math.constraints.RectConstraint; import mightypork.utils.math.constraints.RectBound;
import mightypork.utils.math.rect.RectView; import mightypork.utils.math.rect.RectView;
import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.Vect;
import mightypork.utils.math.vect.VectView; import mightypork.utils.math.vect.VectView;
@ -18,7 +18,7 @@ import mightypork.utils.math.vect.VectView;
* *
* @author MightyPork * @author MightyPork
*/ */
public abstract class ScreenLayer extends AppSubModule implements Comparable<ScreenLayer>, Renderable, RectConstraint, KeyBinder { public abstract class ScreenLayer extends AppSubModule implements Comparable<ScreenLayer>, Renderable, RectBound, KeyBinder {
private final Screen screen; private final Screen screen;

@ -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.value(), button, down, wheeld)); getEventBus().send(new MouseButtonEvent(pos.getValue(), button, down, wheeld));
} }
moveSum.add(move); moveSum.add(move);

@ -10,7 +10,7 @@ import mightypork.gamecore.control.AppModule;
import mightypork.gamecore.control.bus.events.ScreenChangeEvent; import mightypork.gamecore.control.bus.events.ScreenChangeEvent;
import mightypork.gamecore.control.timing.FpsMeter; import mightypork.gamecore.control.timing.FpsMeter;
import mightypork.utils.logging.Log; import mightypork.utils.logging.Log;
import mightypork.utils.math.constraints.RectConstraint; import mightypork.utils.math.constraints.RectBound;
import mightypork.utils.math.rect.RectVal; import mightypork.utils.math.rect.RectVal;
import mightypork.utils.math.rect.RectView; import mightypork.utils.math.rect.RectView;
import mightypork.utils.math.vect.VectView; import mightypork.utils.math.vect.VectView;
@ -26,7 +26,7 @@ import org.lwjgl.opengl.DisplayMode;
* *
* @author MightyPork * @author MightyPork
*/ */
public class DisplaySystem extends AppModule implements RectConstraint { public class DisplaySystem extends AppModule implements RectBound {
private DisplayMode windowDisplayMode; private DisplayMode windowDisplayMode;
private int targetFps; private int targetFps;

@ -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.view().norm(1); final Vect vec = axis.getView().norm(1);
glRotated(angle, vec.x(), vec.y(), vec.z()); glRotated(angle, vec.x(), vec.y(), vec.z());
} }
@ -351,10 +351,10 @@ public class Render {
*/ */
public static void quad(Rect quad) public static void quad(Rect quad)
{ {
final double x1 = quad.xMin(); final double x1 = quad.getLeft();
final double y1 = quad.yMin(); final double y1 = quad.top();
final double x2 = quad.xMax(); final double x2 = quad.right();
final double y2 = quad.yMax(); final double y2 = quad.bottom();
// draw with color // draw with color
unbindTexture(); unbindTexture();
@ -391,15 +391,15 @@ 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.xMin(); final double x1 = quad.getLeft();
final double y1 = quad.yMin(); final double y1 = quad.top();
final double x2 = quad.xMax(); final double x2 = quad.right();
final double y2 = quad.yMax(); final double y2 = quad.bottom();
final double tx1 = uvs.xMin(); final double tx1 = uvs.getLeft();
final double ty1 = uvs.yMin(); final double ty1 = uvs.top();
final double tx2 = uvs.xMax(); final double tx2 = uvs.right();
final double ty2 = uvs.yMax(); final double ty2 = uvs.bottom();
// quad with texture // quad with texture
glTexCoord2d(tx1, ty2); glTexCoord2d(tx1, ty2);
@ -437,10 +437,10 @@ 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.xMin(); final double x1 = quad.getLeft();
final double y1 = quad.yMin(); final double y1 = quad.top();
final double x2 = quad.xMax(); final double x2 = quad.right();
final double y2 = quad.yMax(); final double y2 = quad.bottom();
// draw with color // draw with color
unbindTexture(); unbindTexture();

@ -110,7 +110,7 @@ public class FontRenderer {
{ {
Render.pushMatrix(); Render.pushMatrix();
Render.translate(pos.value().round()); Render.translate(pos.getValue().round());
Render.scaleXY(getScale(height)); Render.scaleXY(getScale(height));
font.draw(text, color); font.draw(text, color);
@ -148,20 +148,20 @@ public class FontRenderer {
switch (align) { switch (align) {
case LEFT: case LEFT:
start = bounds.getTopLeft(); start = bounds.topLeft();
break; break;
case CENTER: case CENTER:
start = bounds.getTopCenter(); start = bounds.topCenter();
break; break;
case RIGHT: case RIGHT:
default: default:
start = bounds.getTopRight(); start = bounds.topRight();
break; break;
} }
draw(text, start, bounds.getHeight(), align, color); draw(text, start, bounds.height(), align, color);
} }
@ -193,7 +193,7 @@ public class FontRenderer {
final double w = getWidth(text, height); final double w = getWidth(text, height);
final VectMutable start = pos.mutable(); final VectMutable start = VectMutable.make(pos);
switch (align) { switch (align) {
case LEFT: case LEFT:

@ -24,7 +24,6 @@ import mightypork.gamecore.render.textures.FilterMode;
import mightypork.utils.logging.Log; import mightypork.utils.logging.Log;
import mightypork.utils.math.color.RGB; import mightypork.utils.math.color.RGB;
import mightypork.utils.math.vect.VectVal; import mightypork.utils.math.vect.VectVal;
import mightypork.utils.math.vect.VectView;
import org.lwjgl.BufferUtils; import org.lwjgl.BufferUtils;
import org.lwjgl.util.glu.GLU; import org.lwjgl.util.glu.GLU;

@ -1,7 +1,7 @@
package mightypork.rogue.screens; package mightypork.rogue.screens;
import static mightypork.utils.math.constraints.Constraints.*; import static mightypork.utils.math.constraints.Bounds.*;
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;
@ -12,7 +12,7 @@ import mightypork.gamecore.render.fonts.FontRenderer.Align;
import mightypork.gamecore.render.fonts.GLFont; import mightypork.gamecore.render.fonts.GLFont;
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.RectConstraint; import mightypork.utils.math.constraints.RectBound;
import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.Vect;
import mightypork.utils.string.StringProvider; import mightypork.utils.string.StringProvider;
@ -39,7 +39,7 @@ public class LayerFps extends ScreenLayer {
final GLFont font = Res.getFont("default"); final GLFont font = Res.getFont("default");
final RectConstraint constraint = cBox(cAdd(cTopRight(this), -8, 8), 0, 32); final RectBound constraint = box(add(topRight(this), -8, 8), 0, 32);
tp = new TextPainter(font, Align.RIGHT, RGB.WHITE, new StringProvider() { tp = new TextPainter(font, Align.RIGHT, RGB.WHITE, new StringProvider() {

@ -1,7 +1,7 @@
package mightypork.rogue.screens.test_bouncyboxes; package mightypork.rogue.screens.test_bouncyboxes;
import static mightypork.utils.math.constraints.Constraints.*; import static mightypork.utils.math.constraints.Bounds.*;
import java.util.Random; import java.util.Random;
@ -11,31 +11,31 @@ 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.NumberConstraint; import mightypork.utils.math.constraints.NumberBound;
import mightypork.utils.math.constraints.RectConstraint; import mightypork.utils.math.constraints.RectBound;
public class BouncyBox extends PluggableRenderer implements Updateable { public class BouncyBox extends PluggableRenderer implements Updateable {
private final Random rand = new Random(); private final Random rand = new Random();
private final RectConstraint box; private final RectBound box;
private final AnimDouble pos = new AnimDouble(0, Easing.BOUNCE_OUT); private final AnimDouble pos = new AnimDouble(0, Easing.BOUNCE_OUT);
public BouncyBox() { public BouncyBox() {
// create box // create box
final NumberConstraint side = cHeight(this); final NumberBound side = height(this);
RectConstraint abox = cBox(this, side, side); RectBound abox = box(this, side, side);
// move // move
final NumberConstraint move_length = cSub(cWidth(this), side); final NumberBound move_length = sub(width(this), side);
final NumberConstraint offset = cMul(move_length, pos); final NumberBound offset = mul(move_length, pos);
abox = cMove(abox, offset, 0); abox = move(abox, offset, 0);
// add padding // add padding
abox = cShrink(abox, cPerc(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.Constraints.*; import static mightypork.utils.math.constraints.Bounds.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -15,7 +15,7 @@ import mightypork.gamecore.input.Keys;
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.RectConstraint; import mightypork.utils.math.constraints.RectBound;
import mightypork.utils.math.vect.VectVal; import mightypork.utils.math.vect.VectVal;
@ -47,7 +47,7 @@ public class LayerBouncyBoxes extends ScreenLayer {
}); });
// shrink screen rect by 8% on all sides // shrink screen rect by 8% on all sides
final RectConstraint holder_rect = cShrink(this, cPerc(cWidth(this), 4)); final RectBound holder_rect = shrink(this, perc(width(this), 4));
addChildClient(layout = new RowHolder(screen, holder_rect, 11)); addChildClient(layout = new RowHolder(screen, holder_rect, 11));

@ -1,7 +1,7 @@
package mightypork.rogue.screens.test_cat_sound; package mightypork.rogue.screens.test_cat_sound;
import static mightypork.utils.math.constraints.Constraints.*; import static mightypork.utils.math.constraints.Bounds.*;
import java.util.Random; import java.util.Random;
@ -19,6 +19,7 @@ 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.VectMutable;
import mightypork.utils.math.vect.VectMutableAnim; import mightypork.utils.math.vect.VectMutableAnim;
@ -45,7 +46,7 @@ public class LayerFlyingCat extends ScreenLayer implements Updateable, MouseButt
cat = new ImagePainter(Res.getTxQuad("test.kitten")); cat = new ImagePainter(Res.getTxQuad("test.kitten"));
cat.setContext(cCenterTo(cBox(size, size), pos)); cat.setContext(centerTo(box(size, size), pos));
tp = new TextPainter(Res.getFont("default")); tp = new TextPainter(Res.getFont("default"));
tp.setAlign(Align.CENTER); tp.setAlign(Align.CENTER);
@ -53,10 +54,10 @@ 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));
tp.setContext(cCenterTo(cBox(64, 64), cMousePos)); tp.setContext(centerTo(box(64, 64), cMousePos));
qp = QuadPainter.gradV(RGB.YELLOW, RGB.RED); qp = QuadPainter.gradV(RGB.YELLOW, RGB.RED);
qp.setContext(cExpand(cBottomLeft(cat), 0, 0, 50, 50)); qp.setContext(expand(bottomLeft(cat), 0, 0, 50, 50));
/* /*
* Register keys * Register keys

@ -1,15 +1,15 @@
package mightypork.rogue.screens.test_font; package mightypork.rogue.screens.test_font;
import static mightypork.utils.math.constraints.Constraints.*; import static mightypork.utils.math.constraints.Bounds.*;
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.NumberConstraint; import mightypork.utils.math.constraints.NumberBound;
import mightypork.utils.math.constraints.RectConstraint; import mightypork.utils.math.constraints.RectBound;
public class ScreenTestFont extends Screen { public class ScreenTestFont extends Screen {
@ -23,9 +23,9 @@ 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 NumberConstraint fontHeight = cMul(getDisplay().getSize().yc(), 0.1); final NumberBound fontHeight = mul(getDisplay().getSize().yc(), 0.1);
final RectConstraint strbox = cCenterTo(cBox(fontHeight), this); final RectBound strbox = centerTo(box(fontHeight), this);
tp.setContext(strbox); tp.setContext(strbox);
} }

@ -1,13 +1,13 @@
package mightypork.rogue.screens.test_render; package mightypork.rogue.screens.test_render;
import static mightypork.utils.math.constraints.Constraints.*; import static mightypork.utils.math.constraints.Bounds.*;
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;
import mightypork.gamecore.render.Render; import mightypork.gamecore.render.Render;
import mightypork.utils.math.color.RGB; import mightypork.utils.math.color.RGB;
import mightypork.utils.math.constraints.RectConstraint; import mightypork.utils.math.constraints.RectBound;
import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.Vect;
@ -15,15 +15,15 @@ public class LayerTestGradient extends ScreenLayer {
private final Poller p = new Poller(); private final Poller p = new Poller();
private final RectConstraint pos1; private final RectBound pos1;
private final RectConstraint pos2; private final RectBound pos2;
public LayerTestGradient(Screen screen) { public LayerTestGradient(Screen screen) {
super(screen); super(screen);
pos1 = cCached(p, cGrowDown(cTopEdge(this), 64)); pos1 = cached(p, growDown(edgeTop(this), 64));
pos2 = cCached(p, cShrinkTop(cGrowRight(cLeftEdge(this), 64), 64)); pos2 = cached(p, shrinkTop(growRight(edgeLeft(this), 64), 64));
} }

@ -1,12 +1,13 @@
package mightypork.test; package mightypork.test;
import static mightypork.utils.math.constraints.Bounds.*;
import java.util.Locale; import java.util.Locale;
import mightypork.utils.math.rect.RectVal; import mightypork.utils.math.rect.RectVal;
import mightypork.utils.math.rect.RectView; import mightypork.utils.math.rect.RectView;
import mightypork.utils.math.vect.VectVal; import mightypork.utils.math.vect.VectVal;
import static mightypork.utils.math.constraints.Constraints.*;
public class TestConstr { public class TestConstr {
@ -16,12 +17,11 @@ public class TestConstr {
Locale.setDefault(Locale.ENGLISH); Locale.setDefault(Locale.ENGLISH);
final RectView rect = RectVal.make(0, 0, 10, 10); final RectView rect = RectVal.make(0, 0, 10, 10);
final VectVal point = VectVal.make(50,50); final VectVal point = VectVal.make(50, 50);
System.out.println(rect); System.out.println(rect);
System.out.println(point); System.out.println(point);
System.out.println(cCenterTo(rect, point).getRect()); System.out.println(centerTo(rect, point).getRect());
// final RectValue rm = RectValue.make(0, 0, 100, 100); // final RectValue rm = RectValue.make(0, 0, 100, 100);
// System.out.println(rm); // System.out.println(rm);

@ -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.NumberConstraint; import mightypork.utils.math.constraints.NumberBound;
/** /**
@ -12,7 +12,7 @@ import mightypork.utils.math.constraints.NumberConstraint;
* *
* @author MightyPork * @author MightyPork
*/ */
public class AnimDouble implements Updateable, Pauseable, NumberConstraint { public class AnimDouble implements Updateable, Pauseable, NumberBound {
/** target double */ /** target double */
protected double to = 0; protected double to = 0;

@ -0,0 +1,919 @@
package mightypork.utils.math.constraints;
import mightypork.gamecore.control.timing.Poller;
import mightypork.utils.math.rect.RectVal;
import mightypork.utils.math.rect.RectView;
import mightypork.utils.math.vect.Vect;
import mightypork.utils.math.vect.VectAdapter;
import mightypork.utils.math.vect.VectVal;
import mightypork.utils.math.vect.VectView;
/**
* Constraint factory.<br>
* Import statically for best experience.
*
* @author MightyPork
*/
public class Bounds {
public static RectCache cached(final Poller poller, final RectBound rc)
{
return new RectCache(poller, rc);
}
/**
* Convert {@link Number} to {@link NumberBound} if needed
*
* @param o unknown numeric value
* @return converted
*/
private static NumberBound toNumberBound(final Object o)
{
if (o instanceof NumberBound) return (NumberBound) o;
if (o instanceof Number) return new NumberBound() {
@Override
public double getValue()
{
return ((Number) o).doubleValue();
}
};
throw new IllegalArgumentException("Invalid numeric type.");
}
/**
* Convert {@link Number} or {@link NumberBound} to double (current value)
*
* @param o unknown numeric value
* @return double value
*/
private static double eval(final Object o)
{
return toNumberBound(o).getValue();
}
public static NumberBound min(final Object a, final Object b)
{
return new NumberBound() {
@Override
public double getValue()
{
return Math.min(eval(a), eval(b));
}
};
}
public static NumberBound max(final Object a, final Object b)
{
return new NumberBound() {
@Override
public double getValue()
{
return Math.max(eval(a), eval(b));
}
};
}
public static NumberBound abs(final NumberBound a)
{
return new NumberBound() {
@Override
public double getValue()
{
return Math.abs(a.getValue());
}
};
}
public static NumberBound half(final NumberBound a)
{
return new NumberBound() {
@Override
public double getValue()
{
return a.getValue() / 2;
}
};
}
public static NumberBound round(final NumberBound a)
{
return new NumberBound() {
@Override
public double getValue()
{
return Math.round(a.getValue());
}
};
}
public static RectBound round(final RectBound r)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().round();
}
};
}
public static NumberBound ceil(final NumberBound a)
{
return new NumberBound() {
@Override
public double getValue()
{
return Math.ceil(a.getValue());
}
};
}
public static NumberBound floor(final NumberBound a)
{
return new NumberBound() {
@Override
public double getValue()
{
return Math.floor(a.getValue());
}
};
}
public static NumberBound neg(final NumberBound a)
{
return new NumberBound() {
@Override
public double getValue()
{
return -a.getValue();
}
};
}
public static NumberBound add(final Object a, final Object b)
{
return new NumberBound() {
@Override
public double getValue()
{
return eval(a) + eval(b);
}
};
}
public static NumberBound sub(final Object a, final Object b)
{
return new NumberBound() {
@Override
public double getValue()
{
return eval(a) - eval(b);
}
};
}
public static NumberBound mul(final Object a, final Object b)
{
return new NumberBound() {
@Override
public double getValue()
{
return eval(a) * eval(b);
}
};
}
public static NumberBound half(final Object a)
{
return mul(a, 0.5);
}
public static NumberBound div(final Object a, final Object b)
{
return new NumberBound() {
@Override
public double getValue()
{
return eval(a) / eval(b);
}
};
}
public static NumberBound perc(final Object whole, final Object percent)
{
return new NumberBound() {
@Override
public double getValue()
{
return eval(whole) * (eval(percent) / 100);
}
};
}
public static RectBound row(final RectBound r, final int rows, final int index)
{
return new RectBound() {
@Override
public RectView getRect()
{
final double height = r.getRect().height();
final double perRow = height / rows;
final Vect origin = r.getRect().origin().add(0, perRow * index);
final Vect size = r.getRect().size().setY(perRow);
return RectVal.make(origin, size);
}
};
}
public static RectBound column(final RectBound r, final int columns, final int index)
{
return new RectBound() {
@Override
public RectView getRect()
{
final double width = r.getRect().width();
final double perCol = width / columns;
final Vect origin = r.getRect().origin().add(perCol * index, 0);
final Vect size = r.getRect().size().setX(perCol);
return RectVal.make(origin, size);
}
};
}
public static RectBound tile(final RectBound r, final int rows, final int cols, final int left, final int top)
{
return new RectBound() {
@Override
public RectView getRect()
{
final double height = r.getRect().height();
final double width = r.getRect().height();
final double perRow = height / rows;
final double perCol = width / cols;
final Vect origin = r.getRect().origin().add(perCol * left, perRow * (rows - top - 1));
return RectVal.make(origin, perCol, perRow);
}
};
}
public static RectBound shrink(RectBound r, Object shrink)
{
return shrink(r, shrink, shrink, shrink, shrink);
}
public static RectBound shrink(RectBound context, Object horiz, Object vert)
{
return shrink(context, horiz, vert, horiz, vert);
}
public static RectBound shrink(final RectBound r, final Object left, final Object top, final Object right, final Object bottom)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().shrink(eval(left), eval(top), eval(right), eval(bottom));
}
};
}
public static RectBound shrinkTop(final RectBound r, final Object shrink)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, eval(shrink), 0, 0);
}
};
}
public static RectBound shrinkBottom(final RectBound r, final Object shrink)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, 0, 0, eval(shrink));
}
};
}
public static RectBound shrinkLeft(final RectBound r, final Object shrink)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().shrink(eval(shrink), 0, 0, 0);
}
};
}
public static RectBound shrinkRight(final RectBound r, final Object shrink)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, 0, eval(shrink), 0);
}
};
}
public static RectBound grow(RectBound r, Object grow)
{
return grow(r, grow, grow, grow, grow);
}
public static RectBound grow(RectBound r, Object horiz, Object vert)
{
return grow(r, horiz, vert, horiz, vert);
}
public static RectBound grow(final RectBound r, final Object left, final Object right, final Object top, final Object bottom)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().grow(eval(left), eval(right), eval(top), eval(bottom));
}
};
}
public static RectBound growUp(final RectBound r, final Object grow)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().grow(0, eval(grow), 0, 0);
}
};
}
public static RectBound growDown(final RectBound r, final Object grow)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().grow(0, 0, 0, eval(grow));
}
};
}
public static RectBound growLeft(final RectBound r, final Object grow)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().grow(eval(grow), 0, 0, 0);
}
};
}
public static RectBound growRight(final RectBound r, final Object grow)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().grow(0, 0, eval(grow), 0);
}
};
}
public static RectBound box(final Object side)
{
return box(side, side);
}
public static RectBound box(final Vect origin, final Object width, final Object height)
{
return new RectBound() {
@Override
public RectView getRect()
{
return RectVal.make(origin, eval(width), eval(height));
}
};
}
public static RectBound box(final Object width, final Object height)
{
return new RectBound() {
@Override
public RectView getRect()
{
return RectVal.make(0, 0, eval(width), eval(height));
}
};
}
public static RectBound box(final RectBound r, final Object width, final Object height)
{
return new RectBound() {
@Override
public RectView getRect()
{
final Vect origin = r.getRect().origin();
return RectVal.make(origin.x(), origin.y(), eval(width), eval(height));
}
};
}
public static RectBound box(final RectBound r, final Object x, final Object y, final Object width, final Object height)
{
return new RectBound() {
@Override
public RectView getRect()
{
final Vect origin = r.getRect().origin();
return RectVal.make(origin.x() + eval(x), origin.y() + eval(y), eval(width), eval(height));
}
};
}
public static RectBound centerTo(final RectBound r, final RectBound centerTo)
{
return new RectBound() {
@Override
public RectView getRect()
{
final VectView size = r.getRect().size();
final VectView center = centerTo.getRect().center();
return RectVal.make(center.sub(size.half()), size);
}
};
}
public static RectBound centerTo(final RectBound r, final Vect centerTo)
{
return new RectBound() {
@Override
public RectView getRect()
{
final VectView size = r.getRect().size();
return RectVal.make(centerTo.getValue().sub(size.half()), size);
}
};
}
public static RectBound centerTo(final RectBound r, final Object x, final Object y)
{
return new RectBound() {
@Override
public RectView getRect()
{
final VectView size = r.getRect().size();
final VectView v = VectVal.make(eval(x), eval(y));
return RectVal.make(v.sub(size.half()), size);
}
};
}
public static RectBound move(final RectBound r, final Vect move)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().move(move);
}
};
}
public static RectBound move(final RectBound r, final Object x, final Object y)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().move(eval(x), eval(y));
}
};
}
/**
* Make a rect around coord
*
* @param c coord
* @param allSides size to grow on all sides
* @return rect constraint
*/
public static RectBound expand(final Vect c, final Object allSides)
{
return expand(c, allSides, allSides, allSides, allSides);
}
/**
* Make a rect around coord
*
* @param c coord
* @param horizontal horisontal grow (left, right)
* @param vertical vertical grow (top, bottom)
* @return rect constraint
*/
public static RectBound expand(final Vect c, final Object horizontal, final Object vertical)
{
return expand(c, horizontal, vertical, horizontal, vertical);
}
/**
* Make a rect around coord, growing by given amounts
*
* @param c coord
* @param top
* @param right
* @param bottom
* @param left
* @return rect constraint
*/
public static RectBound expand(final Vect c, final Object top, final Object right, final Object bottom, final Object left)
{
return new RectBound() {
@Override
public RectView getRect()
{
final double t = eval(top);
final double r = eval(right);
final double b = eval(bottom);
final double l = eval(left);
return RectVal.make(c.x() - l, c.y() - t, l + r, t + b);
}
};
}
public static RectBound edgeLeft(final RectBound r)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, 0, r.getRect().width(), 0);
}
};
}
public static RectBound edgeTop(final RectBound r)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, 0, 0, r.getRect().height());
}
};
}
public static RectBound edgeRight(final RectBound r)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().shrink(r.getRect().width(), 0, 0, 0);
}
};
}
public static RectBound edgeBottom(final RectBound r)
{
return new RectBound() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, r.getRect().height(), 0, 0);
}
};
}
public static VectView neg(final Vect c)
{
return mul(c, -1);
}
public static VectView half(final Vect c)
{
return mul(c, 0.5);
}
public static VectView add(final Vect c1, final Vect c2)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return c1.getValue().add(c2);
}
};
}
public static VectView add(final Vect c, final Object x, final Object y)
{
return add(c, x, y, 0);
}
public static VectView add(final Vect c, final Object x, final Object y, final Object z)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return c.getValue().add(eval(x), eval(y), eval(z));
}
};
}
public static VectView sub(final Vect c1, final Vect c2)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return c1.getValue().sub(c2);
}
};
}
public static VectView sub(final Vect c, final Object x, final Object y)
{
return sub(c, x, y, 0);
}
public static VectView sub(final Vect c, final Object x, final Object y, final Object z)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return c.getValue().sub(eval(x), eval(y), eval(z));
}
};
}
public static VectView mul(final Vect c, final Object mul)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return c.getValue().mul(eval(mul));
}
};
}
public static VectView norm(final Vect c, final Object norm)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return c.getValue().norm(eval(norm));
}
};
}
public static VectView origin(final RectBound r)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return r.getRect().origin();
}
};
}
public static VectView size(final RectBound r)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return r.getRect().size();
}
};
}
public static NumberBound height(final RectBound r)
{
return size(r).yc();
}
public static NumberBound width(final RectBound r)
{
return size(r).xc();
}
public static VectView center(final RectBound r)
{
return add(origin(r), half(size(r)));
}
public static VectView topLeft(final RectBound r)
{
return origin(r);
}
public static VectView topRight(final RectBound r)
{
return add(origin(r), width(r), 0);
}
public static VectView bottomLeft(final RectBound r)
{
return add(origin(r), 0, width(r));
}
public static VectView bottomRight(final RectBound r)
{
return add(origin(r), size(r));
}
public static VectView topCenter(final RectBound r)
{
return add(origin(r), half(width(r)), 0);
}
public static VectView bottomCenter(final RectBound r)
{
return add(origin(r), half(width(r)), width(r));
}
public static VectView centerLeft(final RectBound r)
{
return add(origin(r), 0, half(width(r)));
}
public static VectView centerRight(final RectBound r)
{
return add(origin(r), width(r), half(width(r)));
}
/**
* Zero-sized RectView at given coord
*
* @param c coord
* @return rect
*/
public static RectBound zeroRect(final Vect c)
{
return new RectBound() {
@Override
public RectView getRect()
{
return RectVal.make(c.x(), c.y(), 0, 0);
}
};
}
}

@ -1,952 +0,0 @@
package mightypork.utils.math.constraints;
import mightypork.gamecore.control.timing.Poller;
import mightypork.utils.math.rect.RectVal;
import mightypork.utils.math.rect.RectView;
import mightypork.utils.math.vect.VectAdapter;
import mightypork.utils.math.vect.Vect;
import mightypork.utils.math.vect.VectVal;
import mightypork.utils.math.vect.VectView;
/**
* Constraint factory.<br>
* Import statically for best experience.
*
* @author MightyPork
*/
public class Constraints {
public static RectCache cCached(final Poller poller, final RectConstraint rc)
{
return new RectCache(poller, rc);
}
/**
* Convert {@link Number} to {@link NumberConstraint} if needed
*
* @param o unknown numeric value
* @return converted
*/
private static NumberConstraint toConstraint(final Object o)
{
if (o instanceof NumberConstraint) return (NumberConstraint) o;
if (o instanceof Number) return new NumberConstraint() {
@Override
public double getValue()
{
return ((Number) o).doubleValue();
}
};
throw new IllegalArgumentException("Invalid numeric type.");
}
/**
* Convert {@link Number} or {@link NumberConstraint} to double (current
* value)
*
* @param o unknown numeric value
* @return double value
*/
private static double toDouble(final Object o)
{
return toConstraint(o).getValue();
}
public static NumberConstraint cMin(final Object a, final Object b)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return Math.min(toDouble(a), toDouble(b));
}
};
}
public static NumberConstraint cMax(final Object a, final Object b)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return Math.max(toDouble(a), toDouble(b));
}
};
}
public static NumberConstraint cAbs(final NumberConstraint a)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return Math.abs(a.getValue());
}
};
}
public static NumberConstraint cHalf(final NumberConstraint a)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return a.getValue() / 2;
}
};
}
public static NumberConstraint cRound(final NumberConstraint a)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return Math.round(a.getValue());
}
};
}
public static RectConstraint cRound(final RectConstraint r)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().round();
}
};
}
public static NumberConstraint cCeil(final NumberConstraint a)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return Math.ceil(a.getValue());
}
};
}
public static NumberConstraint cFloor(final NumberConstraint a)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return Math.floor(a.getValue());
}
};
}
public static NumberConstraint cNeg(final NumberConstraint a)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return -a.getValue();
}
};
}
public static NumberConstraint cAdd(final Object a, final Object b)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return toDouble(a) + toDouble(b);
}
};
}
public static NumberConstraint cSub(final Object a, final Object b)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return toDouble(a) - toDouble(b);
}
};
}
public static NumberConstraint cMul(final Object a, final Object b)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return toDouble(a) * toDouble(b);
}
};
}
public static NumberConstraint cHalf(final Object a)
{
return cMul(a, 0.5);
}
public static NumberConstraint cDiv(final Object a, final Object b)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return toDouble(a) / toDouble(b);
}
};
}
public static NumberConstraint cPerc(final Object whole, final Object percent)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return toDouble(whole) * (toDouble(percent) / 100);
}
};
}
public static RectConstraint cRow(final RectConstraint r, final int rows, final int index)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
final double height = r.getRect().getHeight();
final double perRow = height / rows;
final Vect origin = r.getRect().getOrigin().add(0, perRow * index);
final Vect size = r.getRect().getSize().setY(perRow);
return RectVal.make(origin, size);
}
};
}
public static RectConstraint cColumn(final RectConstraint r, final int columns, final int index)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
final double width = r.getRect().getWidth();
final double perCol = width / columns;
final Vect origin = r.getRect().getOrigin().add(perCol * index, 0);
final Vect size = r.getRect().getSize().setX(perCol);
return RectVal.make(origin, size);
}
};
}
public static RectConstraint cTile(final RectConstraint r, final int rows, final int cols, final int left, final int top)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
final double height = r.getRect().getHeight();
final double width = r.getRect().getHeight();
final double perRow = height / rows;
final double perCol = width / cols;
final Vect origin = r.getRect().getOrigin().add(perCol * left, perRow * (rows - top - 1));
return RectVal.make(origin, perCol, perRow);
}
};
}
public static RectConstraint cShrink(RectConstraint r, Object shrink)
{
final NumberConstraint n = toConstraint(shrink);
return cShrink(r, n, n, n, n);
}
public static RectConstraint cShrink(RectConstraint context, Object horiz, Object vert)
{
return cShrink(context, horiz, vert, horiz, vert);
}
public static RectConstraint cShrink(final RectConstraint r, final Object left, final Object top, final Object right, final Object bottom)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().shrink(toDouble(left), toDouble(top), toDouble(right), toDouble(bottom));
}
};
}
public static RectConstraint cShrinkTop(final RectConstraint r, final Object shrink)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, toDouble(shrink), 0, 0);
}
};
}
public static RectConstraint cShrinkBottom(final RectConstraint r, final Object shrink)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, 0, 0, toDouble(shrink));
}
};
}
public static RectConstraint cShrinkLeft(final RectConstraint r, final Object shrink)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().shrink(toDouble(shrink), 0, 0, 0);
}
};
}
public static RectConstraint cShrinkRight(final RectConstraint r, final Object shrink)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, 0, toDouble(shrink), 0);
}
};
}
public static RectConstraint cGrow(RectConstraint r, Object grow)
{
final NumberConstraint n = toConstraint(grow);
return cGrow(r, n, n, n, n);
}
public static RectConstraint cGrow(RectConstraint r, Object horiz, Object vert)
{
return cGrow(r, horiz, vert, horiz, vert);
}
public static RectConstraint cGrow(final RectConstraint r, final Object left, final Object right, final Object top, final Object bottom)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().grow(toDouble(left), toDouble(right), toDouble(top), toDouble(bottom));
}
};
}
public static RectConstraint cGrowUp(final RectConstraint r, final Object grow)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().grow(0, toDouble(grow), 0, 0);
}
};
}
public static RectConstraint cGrowDown(final RectConstraint r, final Object grow)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().grow(0, 0, 0, toDouble(grow));
}
};
}
public static RectConstraint cGrowLeft(final RectConstraint r, final Object grow)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().grow(toDouble(grow), 0, 0, 0);
}
};
}
public static RectConstraint cGrowRight(final RectConstraint r, final Object grow)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().grow(0, 0, toDouble(grow), 0);
}
};
}
public static RectConstraint cBox(final Object side)
{
return cBox(side, side);
}
public static RectConstraint cBox(final VectConstraint origin, final Object width, final Object height)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return RectVal.make(origin.getVec(), toDouble(width), toDouble(height));
}
};
}
public static RectConstraint cBox(final Object width, final Object height)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return RectVal.make(0, 0, toDouble(width), toDouble(height));
}
};
}
public static RectConstraint cBox(final RectConstraint r, final Object width, final Object height)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
final Vect origin = r.getRect().getOrigin();
return RectVal.make(origin.x(), origin.y(), toDouble(width), toDouble(height));
}
};
}
public static RectConstraint cBox(final RectConstraint r, final Object x, final Object y, final Object width, final Object height)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
final Vect origin = r.getRect().getOrigin();
return RectVal.make(origin.x() + toDouble(x), origin.y() + toDouble(y), toDouble(width), toDouble(height));
}
};
}
public static RectConstraint cCenterTo(final RectConstraint r, final RectConstraint centerTo)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
final VectView size = r.getRect().getSize();
final VectView center = centerTo.getRect().getCenter();
return RectVal.make(center.sub(size.half()), size);
}
};
}
public static RectConstraint cCenterTo(final RectConstraint r, final VectConstraint centerTo)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
final VectView size = r.getRect().getSize();
return RectVal.make(centerTo.getVec().sub(size.half()), size);
}
};
}
public static RectConstraint cCenterTo(final RectConstraint r, final Object x, final Object y)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
final VectView size = r.getRect().getSize();
final VectView v = VectVal.make(toDouble(x), toDouble(y));
return RectVal.make(v.sub(size.half()), size);
}
};
}
public static RectConstraint cMove(final RectConstraint r, final VectConstraint move)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().move(move.getVec());
}
};
}
public static RectConstraint cMove(final RectConstraint r, final Object x, final Object y)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().move(toDouble(x), toDouble(y));
}
};
}
/**
* Make a rect around coord
*
* @param c coord
* @param allSides size to grow on all sides
* @return rect constraint
*/
public static RectConstraint cExpand(final VectConstraint c, final Object allSides)
{
return cExpand(c, allSides, allSides, allSides, allSides);
}
/**
* Make a rect around coord
*
* @param c coord
* @param horizontal horisontal grow (left, right)
* @param vertical vertical grow (top, bottom)
* @return rect constraint
*/
public static RectConstraint cExpand(final VectConstraint c, final Object horizontal, final Object vertical)
{
return cExpand(c, horizontal, vertical, horizontal, vertical);
}
/**
* Make a rect around coord, growing by given amounts
*
* @param c coord
* @param top
* @param right
* @param bottom
* @param left
* @return rect constraint
*/
public static RectConstraint cExpand(final VectConstraint c, final Object top, final Object right, final Object bottom, final Object left)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
final double t = toDouble(top);
final double r = toDouble(right);
final double b = toDouble(bottom);
final double l = toDouble(left);
final double x = c.getVec().x();
final double y = c.getVec().y();
return RectVal.make(x - l, y - t, l + r, t + b);
}
};
}
public static RectConstraint cLeftEdge(final RectConstraint r)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, 0, r.getRect().getWidth(), 0);
}
};
}
public static RectConstraint cTopEdge(final RectConstraint r)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, 0, 0, r.getRect().getHeight());
}
};
}
public static RectConstraint cRightEdge(final RectConstraint r)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().shrink(r.getRect().getWidth(), 0, 0, 0);
}
};
}
public static RectConstraint cBottomEdge(final RectConstraint r)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
return r.getRect().shrink(0, r.getRect().getHeight(), 0, 0);
}
};
}
public static NumberConstraint cX(final VectConstraint c)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return c.getVec().x();
}
};
}
public static NumberConstraint cY(final VectConstraint c)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return c.getVec().y();
}
};
}
public static NumberConstraint cZ(final VectConstraint c)
{
return new NumberConstraint() {
@Override
public double getValue()
{
return c.getVec().z();
}
};
}
public static VectConstraint cNeg(final VectConstraint c)
{
return cMul(c, -1);
}
public static VectConstraint cHalf(final VectConstraint c)
{
return cMul(c, 0.5);
}
public static VectConstraint cAdd(final VectConstraint c1, final VectConstraint c2)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return c1.getVec().add(c2.getVec());
}
};
}
public static VectConstraint cAdd(final VectConstraint c, final Object x, final Object y)
{
return cAdd(c, x, y, 0);
}
public static VectConstraint cAdd(final VectConstraint c, final Object x, final Object y, final Object z)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return c.getVec().add(toDouble(x), toDouble(y), toDouble(z));
}
};
}
public static VectConstraint cSub(final VectConstraint c1, final VectConstraint c2)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return c1.getVec().sub(c2.getVec());
}
};
}
public static VectConstraint cSub(final VectConstraint c, final Object x, final Object y)
{
return cSub(c, x, y, 0);
}
public static VectConstraint cSub(final VectConstraint c, final Object x, final Object y, final Object z)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return c.getVec().sub(toDouble(x), toDouble(y), toDouble(z));
}
};
}
public static VectConstraint cMul(final VectConstraint c, final Object mul)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return c.getVec().mul(toDouble(mul));
}
};
}
public static VectConstraint cOrigin(final RectConstraint r)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return r.getRect().getOrigin();
}
};
}
public static VectConstraint cSize(final RectConstraint r)
{
return new VectAdapter() {
@Override
public VectView getSource()
{
return r.getRect().getSize();
}
};
}
public static NumberConstraint cHeight(final RectConstraint r)
{
return cY(cSize(r));
}
public static NumberConstraint cWidth(final RectConstraint r)
{
return cX(cSize(r));
}
public static VectConstraint cCenter(final RectConstraint r)
{
return cAdd(cOrigin(r), cHalf(cSize(r)));
}
public static VectConstraint cTopLeft(final RectConstraint r)
{
return cOrigin(r);
}
public static VectConstraint cTopRight(final RectConstraint r)
{
return cAdd(cOrigin(r), cWidth(r), 0);
}
public static VectConstraint cBottomLeft(final RectConstraint r)
{
return cAdd(cOrigin(r), 0, cWidth(r));
}
public static VectConstraint cBottomRight(final RectConstraint r)
{
return cAdd(cOrigin(r), cSize(r));
}
public static VectConstraint cTopCenter(final RectConstraint r)
{
return cAdd(cOrigin(r), cHalf(cWidth(r)), 0);
}
public static VectConstraint cBottomCenter(final RectConstraint r)
{
return cAdd(cOrigin(r), cHalf(cWidth(r)), cWidth(r));
}
public static VectConstraint cCenterLeft(final RectConstraint r)
{
return cAdd(cOrigin(r), 0, cHalf(cWidth(r)));
}
public static VectConstraint cCenterRight(final RectConstraint r)
{
return cAdd(cOrigin(r), cWidth(r), cHalf(cWidth(r)));
}
/**
* Zero-sized RectView at given coord
*
* @param c coord
* @return rect
*/
public static RectConstraint cZeroRect(final VectConstraint c)
{
return new RectConstraint() {
@Override
public RectView getRect()
{
final Vect v = c.getVec();
return RectVal.make(v.x(), v.y(), 0, 0);
}
};
}
}

@ -11,11 +11,11 @@ import mightypork.utils.math.rect.RectView;
*/ */
public abstract class ContextAdapter implements PluggableRect { public abstract class ContextAdapter implements PluggableRect {
private RectConstraint backing = null; private RectBound backing = null;
@Override @Override
public void setContext(RectConstraint rect) public void setContext(RectBound rect)
{ {
this.backing = rect; this.backing = rect;
} }

@ -0,0 +1,20 @@
package mightypork.utils.math.constraints;
/**
* Numeric constraint
*
* @author MightyPork
*/
public interface NumberBound {
public static final NumberBound ZERO = new NumberConst(0);
public static final NumberBound ONE = new NumberConst(1);
/**
* @return current value
*/
double getValue();
}

@ -2,16 +2,16 @@ package mightypork.utils.math.constraints;
/** /**
* Constant number {@link NumberConstraint} * Constant number {@link NumberBound}
* *
* @author MightyPork * @author MightyPork
*/ */
public class FixedNumberConstraint implements NumberConstraint { public class NumberConst implements NumberBound {
private final double value; private final double value;
public FixedNumberConstraint(double value) { public NumberConst(double value) {
this.value = value; this.value = value;
} }

@ -1,20 +0,0 @@
package mightypork.utils.math.constraints;
/**
* Numeric constraint
*
* @author MightyPork
*/
public interface NumberConstraint {
public static final NumberConstraint ZERO = new FixedNumberConstraint(0);
public static final NumberConstraint ONE = new FixedNumberConstraint(1);
/**
* @return current value
*/
double getValue();
}

@ -9,12 +9,12 @@ import mightypork.utils.math.rect.RectView;
* *
* @author MightyPork * @author MightyPork
*/ */
public interface PluggableRect extends RectConstraint { public interface PluggableRect extends RectBound {
/** /**
* @param rect context to set * @param rect context to set
*/ */
abstract void setContext(RectConstraint rect); abstract void setContext(RectBound rect);
@Override @Override

@ -9,7 +9,7 @@ import mightypork.utils.math.rect.RectView;
* *
* @author MightyPork * @author MightyPork
*/ */
public interface RectConstraint { public interface RectBound {
/** /**
* @return rect region * @return rect region

@ -8,22 +8,22 @@ import mightypork.utils.math.rect.RectView;
/** /**
* {@link RectConstraint} cache, used for caching computed Rect from a complex * {@link RectBound} cache, used for caching computed Rect from a complex
* {@link RectConstraint}.<br> * {@link RectBound}.<br>
* Calculates only when polled. * Calculates only when polled.
* *
* @author MightyPork * @author MightyPork
*/ */
public class RectCache implements RectConstraint, Pollable { public class RectCache implements RectBound, Pollable {
private final RectConstraint observed; private final RectBound observed;
private final RectMutable cached = RectMutable.zero(); private final RectMutable cached = RectMutable.zero();
/** /**
* @param observed cached constraint * @param observed cached constraint
*/ */
public RectCache(RectConstraint observed) { public RectCache(RectBound observed) {
this.observed = observed; this.observed = observed;
poll(); poll();
} }
@ -35,7 +35,7 @@ public class RectCache implements RectConstraint, Pollable {
* @param poller poller to join * @param poller poller to join
* @param rc observed constraint * @param rc observed constraint
*/ */
public RectCache(Poller poller, RectConstraint rc) { public RectCache(Poller poller, RectBound rc) {
this(rc); this(rc);
poller.add(this); poller.add(this);
} }
@ -44,7 +44,7 @@ public class RectCache implements RectConstraint, Pollable {
@Override @Override
public RectView getRect() public RectView getRect()
{ {
return cached.view(); return cached.getView();
} }

@ -1,18 +0,0 @@
package mightypork.utils.math.constraints;
import mightypork.utils.math.vect.VectVal;
/**
* Vector constraint.
*
* @author MightyPork
*/
public interface VectConstraint {
/**
* @return the constraint vec
*/
VectVal getVec();
}

@ -1,11 +1,8 @@
package mightypork.utils.math.rect; package mightypork.utils.math.rect;
import static mightypork.utils.math.constraints.Constraints.*;
import mightypork.utils.math.constraints.VectConstraint;
import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.Vect;
import mightypork.utils.math.vect.VectVal; import mightypork.utils.math.vect.VectVal;
import mightypork.utils.math.vect.VectView;
/** /**
@ -16,149 +13,122 @@ import mightypork.utils.math.vect.VectView;
public abstract class AbstractRect implements Rect { public abstract class AbstractRect implements Rect {
private RectProxy proxy; private RectProxy proxy;
private VectConstraint tl;
private VectConstraint tc;
private VectConstraint tr;
private VectConstraint cl;
private VectConstraint c;
private VectConstraint cr;
private VectConstraint bl;
private VectConstraint bc;
private VectConstraint br;
@Override @Override
public final RectView getRect() public final RectView getRect()
{ {
return this.view(); return this.getView();
} }
@Override @Override
public final VectVal getTopLeft() public final VectVal topLeft()
{ {
// lazy init return origin();
if (tl == null) tl = cTopLeft(this);
return tl.getVec();
} }
@Override @Override
public final VectVal getTopCenter() public final VectVal topCenter()
{ {
// lazy init return origin().add(size().x() / 2, 0);
if (tc == null) tc = cTopCenter(this);
return tc.getVec();
} }
@Override @Override
public final VectVal getTopRight() public final VectVal topRight()
{ {
// lazy init return origin().add(size().x(), 0);
if (tr == null) tr = cTopRight(this);
return tr.getVec();
} }
@Override @Override
public final VectVal getCenterLeft() public final VectVal centerLeft()
{ {
// lazy init return origin().add(0, size().y() / 2);
if (cl == null) cl = cCenterLeft(this);
return cl.getVec();
} }
@Override @Override
public final VectVal getCenter() public final VectVal center()
{ {
// lazy init return origin().add(size().half());
if (c == null) c = cCenter(this);
return c.getVec();
} }
@Override @Override
public final VectVal getCenterRight() public final VectVal centerRight()
{ {
// lazy init return origin().add(size().x(), size().y() / 2);
if (cr == null) cr = cCenterRight(this);
return cr.getVec();
} }
@Override @Override
public final VectVal getBottomLeft() public final VectVal bottomLeft()
{ {
// lazy init return origin().add(0, size().y());
if (bl == null) bl = cBottomLeft(this);
return bl.getVec();
} }
@Override @Override
public final VectVal getBottomCenter() public final VectVal bottomCenter()
{ {
// lazy init return origin().add(size().x() / 2, size().y());
if (bc == null) bc = cBottomCenter(this);
return bc.getVec();
} }
@Override @Override
public final VectVal getBottomRight() public final VectVal bottomRight()
{ {
// lazy init return origin().add(size().x(), size().y());
if (br == null) br = cBottomRight(this);
return br.getVec();
} }
@Override @Override
public final double getWidth() public final double width()
{ {
return getSize().x(); return size().x();
} }
@Override @Override
public final double getHeight() public final double height()
{ {
return getSize().y(); return size().y();
} }
@Override @Override
public final double xMin() public final double getLeft()
{ {
return getOrigin().x(); return origin().x();
} }
@Override @Override
public final double xMax() public final double right()
{ {
return getOrigin().x() + getSize().x(); return origin().x() + size().x();
} }
@Override @Override
public final double yMin() public final double top()
{ {
return getOrigin().y(); return origin().y();
} }
@Override @Override
public final double yMax() public final double bottom()
{ {
return getOrigin().y() + getSize().y(); return origin().y() + size().y();
} }
@Override @Override
public RectProxy view() public RectProxy getView()
{ {
if (proxy == null) proxy = new RectProxy(this); if (proxy == null) proxy = new RectProxy(this);
@ -167,16 +137,9 @@ public abstract class AbstractRect implements Rect {
@Override @Override
public RectMutable mutable() public RectVal getValue()
{ {
return RectMutable.make(this); return RectVal.make(origin(), size());
}
@Override
public RectVal value()
{
return RectVal.make(getOrigin(), getSize());
} }
@ -186,10 +149,10 @@ public abstract class AbstractRect implements Rect {
final double x = point.x(); final double x = point.x();
final double y = point.y(); final double y = point.y();
final double x1 = getOrigin().x(); final double x1 = origin().x();
final double y1 = getOrigin().y(); final double y1 = origin().y();
final double x2 = x1 + getSize().x(); final double x2 = x1 + size().x();
final double y2 = y1 + getSize().y(); final double y2 = y1 + size().y();
return x >= x1 && y >= y1 && x <= x2 && y <= y2; return x >= x1 && y >= y1 && x <= x2 && y <= y2;
} }
@ -198,7 +161,7 @@ public abstract class AbstractRect implements Rect {
@Override @Override
public String toString() public String toString()
{ {
return String.format("Rect { %s - %s }", getTopLeft(), getBottomRight()); return String.format("Rect { %s - %s }", topLeft(), bottomRight());
} }
} }

@ -1,10 +1,9 @@
package mightypork.utils.math.rect; package mightypork.utils.math.rect;
import mightypork.utils.math.constraints.RectConstraint; import mightypork.utils.math.constraints.RectBound;
import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.Vect;
import mightypork.utils.math.vect.VectVal; import mightypork.utils.math.vect.VectVal;
import mightypork.utils.math.vect.VectView;
/** /**
@ -12,26 +11,18 @@ import mightypork.utils.math.vect.VectView;
* *
* @author MightyPork * @author MightyPork
*/ */
public interface Rect extends RectConstraint { public interface Rect extends RectBound {
RectVal ONE = new RectVal(0, 0, 1, 1); RectVal ONE = new RectVal(0, 0, 1, 1);
RectVal ZERO = new RectVal(0, 0, 0, 0); RectVal ZERO = new RectVal(0, 0, 0, 0);
/**
* Get a writable copy
*
* @return writable copy
*/
RectMutable mutable();
/** /**
* Get a copy of current value * Get a copy of current value
* *
* @return copy * @return copy
*/ */
RectVal value(); RectVal getValue();
/** /**
@ -39,61 +30,61 @@ public interface Rect extends RectConstraint {
* *
* @return proxy * @return proxy
*/ */
RectProxy view(); RectProxy getView();
/** /**
* @return origin * @return origin
*/ */
VectVal getOrigin(); VectVal origin();
VectVal getSize(); VectVal size();
double getWidth(); double width();
double getHeight(); double height();
VectVal getTopLeft(); VectVal topLeft();
VectVal getTopCenter(); VectVal topCenter();
VectVal getTopRight(); VectVal topRight();
VectVal getCenterLeft(); VectVal centerLeft();
VectVal getCenter(); VectVal center();
VectVal getCenterRight(); VectVal centerRight();
VectVal getBottomLeft(); VectVal bottomLeft();
VectVal getBottomCenter(); VectVal bottomCenter();
VectVal getBottomRight(); VectVal bottomRight();
double xMin(); double getLeft();
double xMax(); double right();
double yMin(); double top();
double yMax(); double bottom();
/** /**

@ -96,7 +96,7 @@ public abstract class RectMutable extends RectMath<RectMutable> {
*/ */
public static RectMutable make(Rect other) public static RectMutable make(Rect other)
{ {
return make(other.getOrigin(), other.getSize()); return make(other.origin(), other.size());
} }
@ -121,7 +121,7 @@ public abstract class RectMutable extends RectMath<RectMutable> {
*/ */
public RectMutable setTo(Rect rect) public RectMutable setTo(Rect rect)
{ {
return setTo(rect.getOrigin(), rect.getSize()); return setTo(rect.origin(), rect.size());
} }

@ -92,16 +92,16 @@ class RectMutableImpl extends RectMutable {
@Override @Override
public VectVal getOrigin() public VectVal origin()
{ {
return pos.value(); return pos.getValue();
} }
@Override @Override
public VectVal getSize() public VectVal size()
{ {
return size.value(); return size.getValue();
} }

@ -2,7 +2,6 @@ package mightypork.utils.math.rect;
import mightypork.utils.math.vect.VectVal; import mightypork.utils.math.vect.VectVal;
import mightypork.utils.math.vect.VectView;
/** /**
@ -21,16 +20,16 @@ public class RectProxy extends RectView {
@Override @Override
public VectVal getOrigin() public VectVal origin()
{ {
return observed.getOrigin(); return observed.origin();
} }
@Override @Override
public VectVal getSize() public VectVal size()
{ {
return observed.getSize(); return observed.size();
} }
} }

@ -3,7 +3,6 @@ package mightypork.utils.math.rect;
import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.Vect;
import mightypork.utils.math.vect.VectVal; import mightypork.utils.math.vect.VectVal;
import mightypork.utils.math.vect.VectView;
public class RectVal extends RectView { public class RectVal extends RectView {
@ -115,21 +114,21 @@ public class RectVal extends RectView {
@Override @Override
public RectVal value() public RectVal getValue()
{ {
return this; // nothing can change. return this; // nothing can change.
} }
@Override @Override
public VectVal getOrigin() public VectVal origin()
{ {
return pos; return pos;
} }
@Override @Override
public VectVal getSize() public VectVal size()
{ {
return size; return size;
} }

@ -1,8 +1,6 @@
package mightypork.utils.math.rect; package mightypork.utils.math.rect;
/** /**
* Immutable rect * Immutable rect
* *
@ -16,35 +14,37 @@ public abstract class RectView extends RectMath<RectVal> {
* @param observed observed rect * @param observed observed rect
* @return view * @return view
*/ */
public static RectView make(Rect observed) { public static RectView make(Rect observed)
return observed.view(); {
return observed.getView();
} }
@Override @Override
public RectVal move(double x, double y) public RectVal move(double x, double y)
{ {
return RectVal.make(getOrigin().add(x, y), getSize()); return RectVal.make(origin().add(x, y), size());
} }
@Override @Override
public RectVal shrink(double left, double right, double top, double bottom) public RectVal shrink(double left, double right, double top, double bottom)
{ {
return RectVal.make(getOrigin().add(left, top), getSize().sub(left + right, top + bottom)); return RectVal.make(origin().add(left, top), size().sub(left + right, top + bottom));
} }
@Override @Override
public RectVal grow(double left, double right, double top, double bottom) public RectVal grow(double left, double right, double top, double bottom)
{ {
return RectVal.make(getOrigin().sub(left, top), getSize().add(left + right, top + bottom)); return RectVal.make(origin().sub(left, top), size().add(left + right, top + bottom));
} }
@Override @Override
public RectVal round() public RectVal round()
{ {
return RectVal.make(getOrigin().round(), getSize().round()); return RectVal.make(origin().round(), size().round());
} }
} }

@ -1,22 +1,15 @@
package mightypork.utils.math.vect; package mightypork.utils.math.vect;
import mightypork.utils.math.constraints.NumberConstraint; import mightypork.utils.math.constraints.NumberBound;
public abstract class AbstractVect implements Vect { public abstract class AbstractVect implements Vect {
private VectView proxy; private VectView proxy;
private NumberConstraint xc; private NumberBound xc;
private NumberConstraint yc; private NumberBound yc;
private NumberConstraint zc; private NumberBound zc;
@Override
public final VectVal getVec()
{
return value();
}
@Override @Override
@ -53,9 +46,9 @@ public abstract class AbstractVect implements Vect {
@Override @Override
public final NumberConstraint xc() public final NumberBound xc()
{ {
if (xc == null) xc = new NumberConstraint() { if (xc == null) xc = new NumberBound() {
@Override @Override
public double getValue() public double getValue()
@ -69,9 +62,9 @@ public abstract class AbstractVect implements Vect {
@Override @Override
public final NumberConstraint yc() public final NumberBound yc()
{ {
if (yc == null) yc = new NumberConstraint() { if (yc == null) yc = new NumberBound() {
@Override @Override
public double getValue() public double getValue()
@ -85,9 +78,9 @@ public abstract class AbstractVect implements Vect {
@Override @Override
public final NumberConstraint zc() public final NumberBound zc()
{ {
if (zc == null) zc = new NumberConstraint() { if (zc == null) zc = new NumberBound() {
@Override @Override
public double getValue() public double getValue()
@ -116,7 +109,7 @@ public abstract class AbstractVect implements Vect {
@Override @Override
public VectVal value() public VectVal getValue()
{ {
return new VectVal(this); return new VectVal(this);
} }
@ -171,20 +164,12 @@ public abstract class AbstractVect implements Vect {
@Override @Override
public VectMutable mutable() public VectView getView()
{
return VectMutable.make(this);
}
@Override
public VectView view()
{ {
if (proxy == null) proxy = new VectProxy(this); if (proxy == null) proxy = new VectProxy(this);
return proxy; return proxy;
} }
@Override @Override

@ -1,33 +1,33 @@
package mightypork.utils.math.vect; package mightypork.utils.math.vect;
import mightypork.utils.math.constraints.NumberConstraint; import mightypork.utils.math.constraints.NumberBound;
/** /**
* Coord view composed of given {@link NumberConstraint}s, using their current * Coord view composed of given {@link NumberBound}s, using their current
* values. * values.
* *
* @author MightyPork * @author MightyPork
*/ */
class NumConstrVect extends VectView { class NumConstrVect extends VectView {
private final NumberConstraint constrX; private final NumberBound constrX;
private final NumberConstraint constrY; private final NumberBound constrY;
private final NumberConstraint constrZ; private final NumberBound constrZ;
public NumConstrVect(NumberConstraint x, NumberConstraint y, NumberConstraint z) { public NumConstrVect(NumberBound x, NumberBound y, NumberBound z) {
this.constrX = x; this.constrX = x;
this.constrY = y; this.constrY = y;
this.constrZ = z; this.constrZ = z;
} }
public NumConstrVect(NumberConstraint x, NumberConstraint y) { public NumConstrVect(NumberBound x, NumberBound y) {
this.constrX = x; this.constrX = x;
this.constrY = y; this.constrY = y;
this.constrZ = NumberConstraint.ZERO; this.constrZ = NumberBound.ZERO;
} }

@ -1,8 +1,7 @@
package mightypork.utils.math.vect; package mightypork.utils.math.vect;
import mightypork.utils.math.constraints.NumberConstraint; import mightypork.utils.math.constraints.NumberBound;
import mightypork.utils.math.constraints.VectConstraint;
/** /**
@ -10,7 +9,7 @@ import mightypork.utils.math.constraints.VectConstraint;
* *
* @author MightyPork * @author MightyPork
*/ */
public interface Vect extends VectConstraint { public interface Vect {
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);
@ -55,19 +54,19 @@ public interface Vect extends VectConstraint {
/** /**
* @return X constraint * @return X constraint
*/ */
NumberConstraint xc(); NumberBound xc();
/** /**
* @return Y constraint * @return Y constraint
*/ */
NumberConstraint yc(); NumberBound yc();
/** /**
* @return Z constraint * @return Z constraint
*/ */
NumberConstraint zc(); NumberBound zc();
/** /**
@ -134,7 +133,7 @@ public interface Vect extends VectConstraint {
* *
* @return a immutable copy * @return a immutable copy
*/ */
VectVal value(); VectVal getValue();
/** /**
@ -142,13 +141,5 @@ public interface Vect extends VectConstraint {
* *
* @return immutable view * @return immutable view
*/ */
VectView view(); VectView getView();
/**
* Get a mutable copy of current values.
*
* @return mutable copy
*/
VectMutable mutable();
} }

@ -7,7 +7,7 @@ public abstract class VectAdapter extends VectView {
* @return the proxied coord * @return the proxied coord
*/ */
protected abstract Vect getSource(); protected abstract Vect getSource();
@Override @Override
public double x() public double x()

@ -86,7 +86,7 @@ public class VectMutableAnim extends VectMutable implements Pauseable, Updateabl
public VectMutableAnim add(Vect offset, double speed) public VectMutableAnim add(Vect offset, double speed)
{ {
animate(view().add(offset), speed); animate(getView().add(offset), speed);
return this; return this;
} }

@ -18,7 +18,7 @@ public final class VectVal extends VectView {
*/ */
public static VectVal make(Vect value) public static VectVal make(Vect value)
{ {
return value.value(); return value.getValue();
} }
@ -89,7 +89,7 @@ public final class VectVal extends VectView {
*/ */
@Override @Override
@Deprecated @Deprecated
public VectVal value() public VectVal getValue()
{ {
return this; // it's constant already return this; // it's constant already
} }

@ -2,7 +2,7 @@ package mightypork.utils.math.vect;
import mightypork.gamecore.control.interf.DefaultImpl; import mightypork.gamecore.control.interf.DefaultImpl;
import mightypork.utils.math.constraints.NumberConstraint; import mightypork.utils.math.constraints.NumberBound;
/** /**
@ -11,7 +11,7 @@ import mightypork.utils.math.constraints.NumberConstraint;
* @author MightyPork * @author MightyPork
*/ */
public abstract class VectView extends VectMath<VectVal> { // returns constant value on edit public abstract class VectView extends VectMath<VectVal> { // returns constant value on edit
/** /**
* Make a proxy view at a vector. * Make a proxy view at a vector.
* *
@ -20,7 +20,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.view(); return observed.getView();
} }
@ -31,7 +31,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(NumberConstraint xc, NumberConstraint yc) public static VectView make(NumberBound xc, NumberBound yc)
{ {
return new NumConstrVect(xc, yc); return new NumConstrVect(xc, yc);
} }
@ -45,7 +45,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(NumberConstraint xc, NumberConstraint yc, NumberConstraint zc) public static VectView make(NumberBound xc, NumberBound yc, NumberBound zc)
{ {
return new NumConstrVect(xc, yc, zc); return new NumConstrVect(xc, yc, zc);
} }
@ -63,7 +63,7 @@ public abstract class VectView extends VectMath<VectVal> { // returns constant v
*/ */
@Override @Override
@Deprecated @Deprecated
public VectView view() public VectView getView()
{ {
return this; // already not mutable return this; // already not mutable
} }
@ -75,5 +75,5 @@ public abstract class VectView extends VectMath<VectVal> { // returns constant v
{ {
return 0; // implemented for ease with 2D anonymous subtypes return 0; // implemented for ease with 2D anonymous subtypes
} }
} }

@ -154,8 +154,8 @@ 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.value(); if (o == null) return def.getValue();
if (o instanceof Vect) return ((Vect) o).value(); if (o instanceof Vect) return ((Vect) o).getValue();
if (o instanceof String) { if (o instanceof String) {
String s = ((String) o).trim().toUpperCase(); String s = ((String) o).trim().toUpperCase();
@ -183,7 +183,7 @@ public class Convert {
// ignore // ignore
} }
return def.value(); return def.getValue();
} }

Loading…
Cancel
Save