From de34b66fdebd23b0934816f16e53f4b62c23dbb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Tue, 15 Apr 2014 00:50:10 +0200 Subject: [PATCH] all compiles and "works" now. --- .../gamecore/control/AppSubModule.java | 2 +- .../gamecore/control/bus/clients/BusNode.java | 4 +- .../control/bus/clients/ClientHub.java | 42 +++++ .../gamecore/control/interf/Enableable.java | 25 +++ src/mightypork/gamecore/gui/Hideable.java | 15 ++ .../gui/components/AbstractComponent.java | 33 ---- .../gui/components/BusEnabledPainter.java | 163 ++++++++++++++++++ .../gamecore/gui/components/Component.java | 60 +++++++ ...bstractPainter.java => SimplePainter.java} | 6 +- .../gui/components/layout/AbstractLayout.java | 10 +- .../gui/components/layout/ColumnHolder.java | 18 +- .../gui/components/layout/RowHolder.java | 24 +-- .../gui/components/painters/ImagePainter.java | 3 +- .../gui/components/painters/QuadPainter.java | 3 +- .../gui/components/painters/TextPainter.java | 3 +- .../gamecore/gui/screens/ScreenLayer.java | 5 +- .../gamecore/input/InputSystem.java | 4 +- .../gamecore/loading/AsyncResourceLoader.java | 3 + src/mightypork/gamecore/render/Render.java | 59 +++---- .../render/fonts/impl/CachedFont.java | 3 +- .../gamecore/render/textures/TxQuad.java | 3 +- .../screens/test_bouncyboxes/BouncyBox.java | 39 ++--- .../test_bouncyboxes/LayerBouncyBoxes.java | 15 +- src/mightypork/test/TestConstr.java | 2 + src/mightypork/test/TestTiled.java | 44 +++++ .../utils/math/constraints/rect/Rect.java | 88 +++++++++- .../math/constraints/rect/RectConst.java | 14 +- .../math/constraints/rect/RectDigest.java | 7 + .../math/constraints/rect/RectProxy.java | 8 +- .../math/constraints/rect/TiledRect.java | 79 ++++++--- .../utils/math/constraints/vect/Vect.java | 63 ++++--- 31 files changed, 633 insertions(+), 214 deletions(-) create mode 100644 src/mightypork/gamecore/control/bus/clients/ClientHub.java create mode 100644 src/mightypork/gamecore/control/interf/Enableable.java create mode 100644 src/mightypork/gamecore/gui/Hideable.java delete mode 100644 src/mightypork/gamecore/gui/components/AbstractComponent.java create mode 100644 src/mightypork/gamecore/gui/components/BusEnabledPainter.java create mode 100644 src/mightypork/gamecore/gui/components/Component.java rename src/mightypork/gamecore/gui/components/{painters/AbstractPainter.java => SimplePainter.java} (62%) create mode 100644 src/mightypork/test/TestTiled.java diff --git a/src/mightypork/gamecore/control/AppSubModule.java b/src/mightypork/gamecore/control/AppSubModule.java index 24324f6..5f5727c 100644 --- a/src/mightypork/gamecore/control/AppSubModule.java +++ b/src/mightypork/gamecore/control/AppSubModule.java @@ -15,7 +15,7 @@ import mightypork.gamecore.render.DisplaySystem; * * @author MightyPork */ -public abstract class AppSubModule extends BusNode implements AppAccess { +public class AppSubModule extends BusNode implements AppAccess { private final AppAccess app; diff --git a/src/mightypork/gamecore/control/bus/clients/BusNode.java b/src/mightypork/gamecore/control/bus/clients/BusNode.java index 61f99b6..5ffe7b6 100644 --- a/src/mightypork/gamecore/control/bus/clients/BusNode.java +++ b/src/mightypork/gamecore/control/bus/clients/BusNode.java @@ -15,7 +15,7 @@ import mightypork.gamecore.control.bus.EventBus; * * @author MightyPork */ -public abstract class BusNode implements BusAccess, DelegatingClient, ToggleableClient { +public abstract class BusNode implements BusAccess, ClientHub { private final BusAccess busAccess; @@ -58,6 +58,7 @@ public abstract class BusNode implements BusAccess, DelegatingClient, Toggleable * * @param client */ + @Override public final void addChildClient(Object client) { if (client instanceof RootBusNode) { @@ -75,6 +76,7 @@ public abstract class BusNode implements BusAccess, DelegatingClient, Toggleable * * @param client subscriber to remove */ + @Override public final void removeChildClient(Object client) { if (client != null) { diff --git a/src/mightypork/gamecore/control/bus/clients/ClientHub.java b/src/mightypork/gamecore/control/bus/clients/ClientHub.java new file mode 100644 index 0000000..dfdabf2 --- /dev/null +++ b/src/mightypork/gamecore/control/bus/clients/ClientHub.java @@ -0,0 +1,42 @@ +package mightypork.gamecore.control.bus.clients; + + +import java.util.Collection; + +import mightypork.gamecore.control.bus.EventBus; + + +/** + * Common methods for client hubs (ie delegating vlient implementations) + * + * @author MightyPork + */ +public interface ClientHub extends DelegatingClient, ToggleableClient { + + @Override + public boolean doesDelegate(); + + + @Override + public Collection getChildClients(); + + + @Override + public boolean isListening(); + + + /** + * Add a child subscriber to the {@link EventBus}.
+ * + * @param client + */ + public void addChildClient(Object client); + + + /** + * Remove a child subscriber + * + * @param client subscriber to remove + */ + void removeChildClient(Object client); +} diff --git a/src/mightypork/gamecore/control/interf/Enableable.java b/src/mightypork/gamecore/control/interf/Enableable.java new file mode 100644 index 0000000..a7681ad --- /dev/null +++ b/src/mightypork/gamecore/control/interf/Enableable.java @@ -0,0 +1,25 @@ +package mightypork.gamecore.control.interf; + + +/** + * Can be enabled or disabled.
+ * Implementations should take appropriate action (ie. stop listening to events, + * updating etc.) + * + * @author MightyPork + */ +public interface Enableable { + + /** + * Change enabled state + * + * @param yes enabled + */ + public void enable(boolean yes); + + + /** + * @return true if enabled + */ + public boolean isEnabled(); +} diff --git a/src/mightypork/gamecore/gui/Hideable.java b/src/mightypork/gamecore/gui/Hideable.java new file mode 100644 index 0000000..62837c0 --- /dev/null +++ b/src/mightypork/gamecore/gui/Hideable.java @@ -0,0 +1,15 @@ +package mightypork.gamecore.gui; + + +/** + * Element that can be hidden or visible + * + * @author MightyPork + */ +public interface Hideable { + + void setVisible(boolean yes); + + + boolean isVisible(); +} diff --git a/src/mightypork/gamecore/gui/components/AbstractComponent.java b/src/mightypork/gamecore/gui/components/AbstractComponent.java deleted file mode 100644 index 250fabe..0000000 --- a/src/mightypork/gamecore/gui/components/AbstractComponent.java +++ /dev/null @@ -1,33 +0,0 @@ -package mightypork.gamecore.gui.components; - - -import mightypork.gamecore.control.AppAccess; -import mightypork.gamecore.control.AppSubModule; -import mightypork.utils.math.constraints.RectBound; -import mightypork.utils.math.constraints.rect.Rect; - - -public abstract class AbstractComponent extends AppSubModule implements PluggableRenderable { - - private RectBound context; - - - public AbstractComponent(AppAccess app) { - super(app); - } - - - @Override - public void setRect(RectBound context) - { - this.context = context; - } - - - @Override - public Rect getRect() - { - return context.getRect(); - } - -} diff --git a/src/mightypork/gamecore/gui/components/BusEnabledPainter.java b/src/mightypork/gamecore/gui/components/BusEnabledPainter.java new file mode 100644 index 0000000..bbbca2c --- /dev/null +++ b/src/mightypork/gamecore/gui/components/BusEnabledPainter.java @@ -0,0 +1,163 @@ +package mightypork.gamecore.gui.components; + + +import java.util.Collection; + +import mightypork.gamecore.audio.SoundSystem; +import mightypork.gamecore.control.AppAccess; +import mightypork.gamecore.control.AppSubModule; +import mightypork.gamecore.control.bus.EventBus; +import mightypork.gamecore.control.bus.clients.ClientHub; +import mightypork.gamecore.input.InputSystem; +import mightypork.gamecore.render.DisplaySystem; +import mightypork.utils.annotations.DefaultImpl; +import mightypork.utils.math.constraints.RectBound; +import mightypork.utils.math.constraints.rect.Rect; + + +public abstract class BusEnabledPainter extends SimplePainter implements ClientHub, Component, AppAccess { + + private RectBound context; + private boolean enabled; + private boolean visible = true; + + private final AppSubModule subModule; + + + public BusEnabledPainter(AppAccess app) { + this.subModule = new AppSubModule(app); + } + + + @Override + public void setRect(RectBound context) + { + this.context = context; + } + + + @Override + public Rect getRect() + { + return context.getRect(); + } + + + @Override + public EventBus getEventBus() + { + return subModule.getEventBus(); + } + + + @Override + public Collection getChildClients() + { + return subModule.getChildClients(); + } + + + @Override + public boolean doesDelegate() + { + return subModule.doesDelegate(); + } + + + @Override + public boolean isListening() + { + return subModule.isListening(); + } + + + @Override + public SoundSystem getSoundSystem() + { + return subModule.getSoundSystem(); + } + + + @Override + public InputSystem getInput() + { + return subModule.getInput(); + } + + + @Override + public DisplaySystem getDisplay() + { + return subModule.getDisplay(); + } + + + @Override + public void shutdown() + { + subModule.shutdown(); + } + + + @Override + public void addChildClient(Object client) + { + subModule.addChildClient(client); + } + + + @Override + public void removeChildClient(Object client) + { + subModule.removeChildClient(client); + } + + + @Override + public void enable(boolean yes) + { + subModule.setDelegating(yes); + subModule.setListening(yes); + enabled = yes; + } + + + @Override + public boolean isEnabled() + { + return enabled; + } + + + @Override + public void setVisible(boolean visible) + { + this.visible = visible; + } + + + @Override + public boolean isVisible() + { + return visible; + } + + + @Override + public final void render() + { + if (!visible) return; + paint(); + } + + + protected abstract void paint(); + + + @Override + @DefaultImpl + public void update(double delta) + { + } + +} diff --git a/src/mightypork/gamecore/gui/components/Component.java b/src/mightypork/gamecore/gui/components/Component.java new file mode 100644 index 0000000..c395dd4 --- /dev/null +++ b/src/mightypork/gamecore/gui/components/Component.java @@ -0,0 +1,60 @@ +package mightypork.gamecore.gui.components; + + +import mightypork.gamecore.control.bus.clients.ToggleableClient; +import mightypork.gamecore.control.interf.Enableable; +import mightypork.gamecore.control.timing.Updateable; +import mightypork.gamecore.gui.Hideable; +import mightypork.utils.math.constraints.RectBound; +import mightypork.utils.math.constraints.rect.Rect; + + +/** + * UI component interface + * + * @author MightyPork + */ +public interface Component extends Hideable, PluggableRenderable, Updateable, Enableable, ToggleableClient { + + /** + * Enable the component. This includes listening to event bus, and any + * event-related actions. + */ + @Override + void enable(boolean yes); + + + @Override + boolean isEnabled(); + + + /** + * Set visible. When not visible, the component should not render. + */ + @Override + void setVisible(boolean yes); + + + @Override + boolean isVisible(); + + + @Override + Rect getRect(); + + + @Override + void setRect(RectBound rect); + + + @Override + void render(); + + + @Override + void update(double delta); + + + @Override + public boolean isListening(); +} diff --git a/src/mightypork/gamecore/gui/components/painters/AbstractPainter.java b/src/mightypork/gamecore/gui/components/SimplePainter.java similarity index 62% rename from src/mightypork/gamecore/gui/components/painters/AbstractPainter.java rename to src/mightypork/gamecore/gui/components/SimplePainter.java index a3dae4a..bce8e6a 100644 --- a/src/mightypork/gamecore/gui/components/painters/AbstractPainter.java +++ b/src/mightypork/gamecore/gui/components/SimplePainter.java @@ -1,8 +1,6 @@ -package mightypork.gamecore.gui.components.painters; +package mightypork.gamecore.gui.components; -import mightypork.gamecore.gui.components.PluggableRenderable; -import mightypork.gamecore.gui.components.Renderable; import mightypork.utils.math.constraints.RectBound; import mightypork.utils.math.constraints.rect.Rect; import mightypork.utils.math.constraints.rect.RectBoundAdapter; @@ -13,7 +11,7 @@ import mightypork.utils.math.constraints.rect.RectBoundAdapter; * * @author MightyPork */ -public abstract class AbstractPainter extends RectBoundAdapter implements PluggableRenderable { +public abstract class SimplePainter extends RectBoundAdapter implements PluggableRenderable { @Override public abstract void render(); diff --git a/src/mightypork/gamecore/gui/components/layout/AbstractLayout.java b/src/mightypork/gamecore/gui/components/layout/AbstractLayout.java index b2e6b35..74c9aa0 100644 --- a/src/mightypork/gamecore/gui/components/layout/AbstractLayout.java +++ b/src/mightypork/gamecore/gui/components/layout/AbstractLayout.java @@ -5,20 +5,20 @@ import java.util.LinkedList; import mightypork.gamecore.control.AppAccess; import mightypork.gamecore.control.bus.EventBus; -import mightypork.gamecore.gui.components.AbstractComponent; +import mightypork.gamecore.gui.components.BusEnabledPainter; import mightypork.gamecore.gui.components.PluggableRenderable; import mightypork.gamecore.gui.components.Renderable; -import mightypork.gamecore.gui.components.painters.AbstractPainter; +import mightypork.gamecore.gui.components.SimplePainter; import mightypork.utils.math.constraints.RectBound; /** - * Bag for {@link AbstractPainter} elements with constraints.
+ * Bag for {@link SimplePainter} elements with constraints.
* Elements are exposed to {@link EventBus}. * * @author MightyPork */ -public abstract class AbstractLayout extends AbstractComponent { +public abstract class AbstractLayout extends BusEnabledPainter { final LinkedList elements = new LinkedList<>(); @@ -65,7 +65,7 @@ public abstract class AbstractLayout extends AbstractComponent { @Override - public void render() + public void paint() { for (final Renderable element : elements) { element.render(); diff --git a/src/mightypork/gamecore/gui/components/layout/ColumnHolder.java b/src/mightypork/gamecore/gui/components/layout/ColumnHolder.java index ab4cbcb..18b59f6 100644 --- a/src/mightypork/gamecore/gui/components/layout/ColumnHolder.java +++ b/src/mightypork/gamecore/gui/components/layout/ColumnHolder.java @@ -4,6 +4,7 @@ package mightypork.gamecore.gui.components.layout; import mightypork.gamecore.control.AppAccess; import mightypork.gamecore.gui.components.PluggableRenderable; import mightypork.utils.math.constraints.RectBound; +import mightypork.utils.math.constraints.rect.TiledRect; /** @@ -13,18 +14,18 @@ import mightypork.utils.math.constraints.RectBound; */ public class ColumnHolder extends AbstractLayout { - private final int cols; + private final TiledRect tiler; private int col = 0; /** * @param app app access * @param context context - * @param rows number of rows + * @param cols number of columns */ - public ColumnHolder(AppAccess app, RectBound context, int rows) { + public ColumnHolder(AppAccess app, RectBound context, int cols) { super(app, context); - this.cols = rows; + this.tiler = getRect().columns(cols).zeroBased(); } @@ -33,11 +34,10 @@ public class ColumnHolder extends AbstractLayout { * Context must be assigned before rendering. * * @param app app access - * @param rows number of rows + * @param cols number of columns */ - public ColumnHolder(AppAccess app, int rows) { - super(app); - this.cols = rows; + public ColumnHolder(AppAccess app, int cols) { + this(app, null, cols); } @@ -51,7 +51,7 @@ public class ColumnHolder extends AbstractLayout { { if (elem == null) return; - elem.setRect(column(this, cols, col++)); + elem.setRect(tiler.column(col++)); attach(elem); } diff --git a/src/mightypork/gamecore/gui/components/layout/RowHolder.java b/src/mightypork/gamecore/gui/components/layout/RowHolder.java index 2a6692d..ea03b6b 100644 --- a/src/mightypork/gamecore/gui/components/layout/RowHolder.java +++ b/src/mightypork/gamecore/gui/components/layout/RowHolder.java @@ -4,6 +4,7 @@ package mightypork.gamecore.gui.components.layout; import mightypork.gamecore.control.AppAccess; import mightypork.gamecore.gui.components.PluggableRenderable; import mightypork.utils.math.constraints.RectBound; +import mightypork.utils.math.constraints.rect.TiledRect; /** @@ -13,31 +14,30 @@ import mightypork.utils.math.constraints.RectBound; */ public class RowHolder extends AbstractLayout { - private final int rows; + private final TiledRect tiler; private int row = 0; /** + * Make a row holder.
+ * Context must be assigned before rendering. + * * @param app app access - * @param context bounding context * @param rows number of rows */ - public RowHolder(AppAccess app, RectBound context, int rows) { - super(app, context); - this.rows = rows; + public RowHolder(AppAccess app, int rows) { + this(app, null, rows); } /** - * Make a row holder.
- * Context must be assigned before rendering. - * * @param app app access + * @param context bounding context * @param rows number of rows */ - public RowHolder(AppAccess app, int rows) { - super(app); - this.rows = rows; + public RowHolder(AppAccess app, RectBound context, int rows) { + super(app, context); + this.tiler = getRect().rows(rows).zeroBased(); } @@ -51,7 +51,7 @@ public class RowHolder extends AbstractLayout { { if (elem == null) return; - elem.setRect(row(this, rows, row++)); + elem.setRect(tiler.row(row++)); attach(elem); } diff --git a/src/mightypork/gamecore/gui/components/painters/ImagePainter.java b/src/mightypork/gamecore/gui/components/painters/ImagePainter.java index 6b229bf..98a2f3c 100644 --- a/src/mightypork/gamecore/gui/components/painters/ImagePainter.java +++ b/src/mightypork/gamecore/gui/components/painters/ImagePainter.java @@ -1,6 +1,7 @@ package mightypork.gamecore.gui.components.painters; +import mightypork.gamecore.gui.components.SimplePainter; import mightypork.gamecore.render.Render; import mightypork.gamecore.render.textures.TxQuad; @@ -10,7 +11,7 @@ import mightypork.gamecore.render.textures.TxQuad; * * @author MightyPork */ -public class ImagePainter extends AbstractPainter { +public class ImagePainter extends SimplePainter { private TxQuad texture; diff --git a/src/mightypork/gamecore/gui/components/painters/QuadPainter.java b/src/mightypork/gamecore/gui/components/painters/QuadPainter.java index 34070ac..d77fea0 100644 --- a/src/mightypork/gamecore/gui/components/painters/QuadPainter.java +++ b/src/mightypork/gamecore/gui/components/painters/QuadPainter.java @@ -1,6 +1,7 @@ package mightypork.gamecore.gui.components.painters; +import mightypork.gamecore.gui.components.SimplePainter; import mightypork.gamecore.render.Render; import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.math.color.RGB; @@ -11,7 +12,7 @@ import mightypork.utils.math.color.RGB; * * @author MightyPork */ -public class QuadPainter extends AbstractPainter { +public class QuadPainter extends SimplePainter { private final RGB colorHMinVMin; private final RGB colorHMaxVMin; diff --git a/src/mightypork/gamecore/gui/components/painters/TextPainter.java b/src/mightypork/gamecore/gui/components/painters/TextPainter.java index 4f32e7b..4110308 100644 --- a/src/mightypork/gamecore/gui/components/painters/TextPainter.java +++ b/src/mightypork/gamecore/gui/components/painters/TextPainter.java @@ -1,6 +1,7 @@ package mightypork.gamecore.gui.components.painters; +import mightypork.gamecore.gui.components.SimplePainter; import mightypork.gamecore.render.fonts.FontRenderer; import mightypork.gamecore.render.fonts.FontRenderer.Align; import mightypork.gamecore.render.fonts.GLFont; @@ -19,7 +20,7 @@ import mightypork.utils.string.StringProvider.StringWrapper; * * @author MightyPork */ -public class TextPainter extends AbstractPainter { +public class TextPainter extends SimplePainter { private final FontRenderer font; private RGB color; diff --git a/src/mightypork/gamecore/gui/screens/ScreenLayer.java b/src/mightypork/gamecore/gui/screens/ScreenLayer.java index dfd7081..1b1a211 100644 --- a/src/mightypork/gamecore/gui/screens/ScreenLayer.java +++ b/src/mightypork/gamecore/gui/screens/ScreenLayer.java @@ -2,6 +2,7 @@ package mightypork.gamecore.gui.screens; import mightypork.gamecore.control.AppSubModule; +import mightypork.gamecore.gui.Hideable; import mightypork.gamecore.gui.components.Renderable; import mightypork.gamecore.input.KeyBinder; import mightypork.gamecore.input.KeyBindingPool; @@ -17,7 +18,7 @@ import mightypork.utils.math.constraints.vect.Vect; * * @author MightyPork */ -public abstract class ScreenLayer extends AppSubModule implements Comparable, Renderable, RectBound, KeyBinder { +public abstract class ScreenLayer extends AppSubModule implements Comparable, Renderable, RectBound, KeyBinder, Hideable { private final Screen screen; @@ -67,12 +68,14 @@ public abstract class ScreenLayer extends AppSubModule implements Comparable + * It's by default one-based, but this can be switched by calling the oneBased() + * and zeroBased() methods. * * @author MightyPork */ @@ -16,6 +18,8 @@ public class TiledRect extends RectProxy { final private Num perRow; final private Num perCol; + private int based = 1; + TiledRect(Rect source, int horizontal, int vertical) { super(source); @@ -28,15 +32,42 @@ public class TiledRect extends RectProxy { /** - * Get a tile. Tiles count from 0 to n-1 + * Set to one-based mode, and return itself (for chaining). + * + * @return this + */ + public TiledRect oneBased() + { + based = 1; + return this; + } + + + /** + * Set to zero-based mode, and return itself (for chaining). + * + * @return this + */ + public TiledRect zeroBased() + { + based = 0; + return this; + } + + + /** + * Get a tile. * - * @param x x position (zero based) - * @param y y position (zero based) + * @param x x position + * @param y y position * @return tile * @throws IndexOutOfBoundsException when invalid index is specified. */ public Rect tile(int x, int y) { + x -= based; + y -= based; + if (x >= tilesX || x < 0) { throw new IndexOutOfBoundsException("X coordinate out fo range."); } @@ -48,7 +79,7 @@ public class TiledRect extends RectProxy { final Num leftMove = left().add(perCol.mul(x)); final Num topMove = top().add(perRow.mul(y)); - return Rect.make(perCol,perRow).move(leftMove, topMove); + return Rect.make(perCol, perRow).move(leftMove, topMove); } @@ -56,57 +87,61 @@ public class TiledRect extends RectProxy { * Get a span (tile spanning across multiple cells) * * @param x_from x start position - * @param x_to x end position (included) * @param y_from y start position - * @param y_to y end position (included) + * @param size_x horizontal size (columns) + * @param size_y vertical size (rows) * @return tile the tile * @throws IndexOutOfBoundsException when invalid index is specified. */ - public Rect span(int x_from, int x_to, int y_from, int y_to) + public Rect span(int x_from, int y_from, int size_x, int size_y) { + x_from -= based; + y_from -= based; + + final int x_to = x_from + size_x; + final int y_to = y_from + size_y; + + if (size_x <= 0 || size_y <= 0) { + throw new IndexOutOfBoundsException("Size must be > 0."); + } + if (x_from >= tilesX || x_from < 0 || x_to >= tilesX || x_to < 0) { throw new IndexOutOfBoundsException("X coordinate(s) out of range."); } + if (y_from >= tilesY || y_from < 0 || y_to >= tilesY || y_to < 0) { throw new IndexOutOfBoundsException("Y coordinate(s) out of range."); } - if (x_from > x_to) { - throw new IndexOutOfBoundsException("x_from > x_to"); - } - if (y_from > y_to) { - throw new IndexOutOfBoundsException("y_from > y_to"); - } - final Num leftMove = left().add(perCol.mul(x_from)); final Num topMove = top().add(perRow.mul(y_from)); - return Rect.make(perCol.mul(x_to - x_from + 1), perRow.mul(x_to - x_from + 1)).move(leftMove, topMove); + return Rect.make(perCol.mul(size_x), perRow.mul(size_y)).move(leftMove, topMove); } /** - * Get n-th column (tile n,1) + * Get n-th column * - * @param n column index (zero based) + * @param n column index * @return the column tile * @throws IndexOutOfBoundsException when invalid index is specified. */ public Rect column(int n) { - return tile(n, 1); + return tile(n, based); } /** - * Get n-th row (tile 1,n) + * Get n-th row * - * @param n row index (zero based) + * @param n row index * @return the row rect * @throws IndexOutOfBoundsException when invalid index is specified. */ public Rect row(int n) { - return tile(1, n); + return tile(based, n); } } diff --git a/src/mightypork/utils/math/constraints/vect/Vect.java b/src/mightypork/utils/math/constraints/vect/Vect.java index a739c9c..eb5ff18 100644 --- a/src/mightypork/utils/math/constraints/vect/Vect.java +++ b/src/mightypork/utils/math/constraints/vect/Vect.java @@ -3,7 +3,6 @@ package mightypork.utils.math.constraints.vect; import mightypork.utils.annotations.DefaultImpl; import mightypork.utils.annotations.FactoryMethod; -import mightypork.utils.math.Calc; import mightypork.utils.math.constraints.VectBound; import mightypork.utils.math.constraints.num.Num; import mightypork.utils.math.constraints.num.NumConst; @@ -107,13 +106,6 @@ public abstract class Vect implements VectBound { private Num p_zc; - @Override - public String toString() - { - return String.format("(%s,%s,%s)", Calc.toString(x()), Calc.toString(y()), Calc.toString(z())); - } - - /** * @return X coordinate */ @@ -1099,30 +1091,6 @@ public abstract class Vect implements VectBound { } - @Override - public int hashCode() - { - final int prime = 31; - int result = 1; - result = prime * result + Double.valueOf(x()).hashCode(); - result = prime * result + Double.valueOf(y()).hashCode(); - result = prime * result + Double.valueOf(z()).hashCode(); - return result; - } - - - @Override - public boolean equals(Object obj) - { - if (this == obj) return true; - if (obj == null) return false; - if (!(obj instanceof Vect)) return false; - final Vect other = (Vect) obj; - - return x() == other.x() && y() == other.y() && z() == other.z(); - } - - /** * Expand to a rect, with given growth to each side. * @@ -1151,4 +1119,35 @@ public abstract class Vect implements VectBound { { return Rect.make(this, Vect.ZERO).grow(left, right, top, bottom); } + + + @Override + public int hashCode() + { + final int prime = 31; + int result = 1; + result = prime * result + Double.valueOf(x()).hashCode(); + result = prime * result + Double.valueOf(y()).hashCode(); + result = prime * result + Double.valueOf(z()).hashCode(); + return result; + } + + + @Override + public boolean equals(Object obj) + { + if (this == obj) return true; + if (obj == null) return false; + if (!(obj instanceof Vect)) return false; + final Vect other = (Vect) obj; + + return x() == other.x() && y() == other.y() && z() == other.z(); + } + + + @Override + public String toString() + { + return String.format("(%.1f, %.1f, %.1f)", x(), y(), z()); + } }