package mightypork.utils.math.rect; import mightypork.utils.annotations.FactoryMethod; import mightypork.utils.math.vect.Vect; import mightypork.utils.math.vect.VectVal; /** * Mutable rectangle; operations change it's state. * * @author MightyPork */ public abstract class RectMutable extends RectView { /** * Create at 0,0 with zero size * * @return new mutable rect */ @FactoryMethod public static RectMutable zero() { return make(0, 0, 0, 0); } /** * Create at 1,1 with zero size * * @return new mutable rect */ @FactoryMethod public static RectMutable one() { return make(0, 0, 1, 1); } /** * Create at 0,0 with given size * * @param width * @param height * @return new mutable rect */ public static RectMutable make(double width, double height) { return make(0, 0, width, height); } /** * Create at given origin, with given size. * * @param origin * @param width * @param height * @return new mutable rect */ @FactoryMethod public static RectMutable make(Vect origin, double width, double height) { return make(origin, VectVal.make(width, height)); } /** * Create at 0,0 with given size. * * @param size * @return new mutable rect */ @FactoryMethod public static RectMutable make(Vect size) { return make(Vect.ZERO, size); } /** * Create at given origin, with given size. * * @param x * @param y * @param width * @param height * @return new mutable rect */ @FactoryMethod public static RectMutable make(double x, double y, double width, double height) { return make(x, y, width, height); } /** * Create as copy of another * * @param other copied * @return new mutable rect */ @FactoryMethod public static RectMutable make(Rect other) { return make(other.origin(), other.size()); } /** * Create at given origin, with given size. * * @param origin * @param size * @return new mutable rect */ @FactoryMethod public static RectMutable make(Vect origin, Vect size) { return make(origin.x(), origin.y(), size.x(), size.y()); } /** * Set to other rect's coordinates * * @param rect other rect */ public void setTo(Rect rect) { setTo(rect.origin(), rect.size()); } /** * Set to given size and position * * @param origin new origin * @param width new width * @param height new height */ public void setTo(Vect origin, double width, double height) { setTo(origin, VectVal.make(width, height)); } /** * Set to given size and position * * @param x origin.x * @param y origin.y * @param width new width * @param height new height */ public void setTo(double x, double y, double width, double height) { setTo(VectVal.make(x, y), VectVal.make(width, height)); } /** * Set to given size and position * * @param origin new origin * @param size new size */ public void setTo(Vect origin, Vect size) { setOrigin(origin); setSize(size); } /** * Set to zero */ public void reset() { setTo(Vect.ZERO, Vect.ZERO); } /** * Set new origin * * @param origin new origin */ public abstract void setOrigin(Vect origin); /** * Set new size * * @param size new size */ public abstract void setSize(Vect size); }