Rogue: Savage Rats, a retro-themed dungeon crawler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rogue-savage-rats/src/mightypork/utils/math/rect/RectMathStatic.java

190 lines
2.6 KiB

package mightypork.utils.math.rect;
import mightypork.utils.math.num.NumVal;
import mightypork.utils.math.vect.Vect;
import mightypork.utils.math.vect.VectVal;
import mightypork.utils.math.vect.VectView;
abstract class RectMathStatic<R extends RectMathStatic<R>> extends RectMath<R> {
@Override
public abstract VectVal origin();
@Override
public abstract VectVal size();
@Override
public R move(Vect move)
{
return move(move.x(), move.y());
}
@Override
public R move(double x, double y)
{
return result(origin().add(x, y), size());
}
@Override
public R shrink(double left, double right, double top, double bottom)
{
return result(origin().add(left, top), size().sub(left + right, top + bottom));
}
@Override
public R grow(double left, double right, double top, double bottom)
{
return result(origin().sub(left, top), size().add(left + right, top + bottom));
}
@Override
public R centerTo(final Vect point)
{
final VectView s = size().view();
final VectView o = origin().view();
return result(o.sub(s.half()), s);
}
@Override
public R round()
{
final VectView s = size().view();
final VectView o = origin().view();
return result(o.round(), s.round());
}
protected abstract R result(Vect newOrigin, Vect newSize);
@Override
public NumVal x()
{
return origin().xn();
}
@Override
public NumVal y()
{
return origin().yn();
}
@Override
public NumVal width()
{
return size().xn();
}
@Override
public NumVal height()
{
return size().yn();
}
@Override
public NumVal left()
{
return origin().xn();
}
@Override
public NumVal right()
{
return origin().xn().add(size().xn());
}
@Override
public NumVal top()
{
return origin().yn();
}
@Override
public NumVal bottom()
{
return origin().yn().add(size().yn());
}
@Override
public VectVal topLeft()
{
return origin();
}
@Override
public VectVal topCenter()
{
return origin().add(size().x() / 2, 0);
}
@Override
public VectVal topRight()
{
return origin().add(size().x(), 0);
}
@Override
public VectVal centerLeft()
{
return origin().add(0, size().y() / 2);
}
@Override
public VectVal center()
{
return origin().add(size().view().half());
}
@Override
public VectVal centerRight()
{
return origin().add(size().x(), size().y() / 2);
}
@Override
public VectVal bottomLeft()
{
return origin().add(0, size().y());
}
@Override
public VectVal bottomCenter()
{
return origin().add(size().x() / 2, size().y());
}
@Override
public VectVal bottomRight()
{
return origin().add(size().view());
}
}