package coffee.liz.ecs.math; import static java.lang.Math.sqrt; import lombok.Builder; import lombok.Data; import lombok.Getter; import lombok.RequiredArgsConstructor; import java.util.function.Function; /** Integer impl of {@link Vec2}. */ @Getter @RequiredArgsConstructor @Builder @Data public final class Vec2i implements Vec2 { /** X coordinate. */ private final Integer x; /** Y coordinate. */ private final Integer y; @Override public Vec2 plus(final Vec2 other) { return new Vec2i(x + other.getX(), y + other.getY()); } @Override public Vec2 minus(final Vec2 other) { return new Vec2i(x - other.getX(), y - other.getY()); } @Override public Vec2 scale(final Integer scaleX, final Integer scaleY) { return new Vec2i(x * scaleX, y * scaleY); } @Override public Vec2 floatValue() { return Vec2f.builder().x(this.x.floatValue()).y(this.y.floatValue()).build(); } @Override public Vec2 transform(final Function xTransform, final Function yTransform) { return new Vec2i(xTransform.apply(getX()), yTransform.apply(getY())); } @Override public Vec2 intValue() { return this; } @Override public float length() { return (float) sqrt(x * x + y * y); } public static final Vec2 NORTH = new Vec2i(0, 1); public static final Vec2 SOUTH = new Vec2i(0, -1); public static final Vec2 EAST = new Vec2i(1, 0); public static final Vec2 WEST = new Vec2i(-1, 0); public static final Vec2 ZERO = new Vec2i(0, 0); }