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; /** Float impl of {@link Vec2}. */ @Getter @RequiredArgsConstructor @Data @Builder public final class Vec2f implements Vec2 { /** X coordinate. */ private final Float x; /** Y coordinate. */ private final Float y; @Override public Vec2 plus(final Vec2 other) { return new Vec2f(x + other.getX(), y + other.getY()); } @Override public Vec2 minus(final Vec2 other) { return new Vec2f(x - other.getX(), y - other.getY()); } @Override public Vec2 scale(final Float scaleX, final Float scaleY) { return new Vec2f(x * scaleX, y * scaleY); } @Override public float length() { return (float) sqrt(x * x + y * y); } @Override public Vec2 floatValue() { return this; } @Override public Vec2 transform(final Function xTransform, final Function yTransform) { return new Vec2f(xTransform.apply(getX()), yTransform.apply(getY())); } @Override public Vec2 intValue() { return Vec2i.builder().x(this.x.intValue()).y(this.y.intValue()).build(); } /** Zero float vec */ public static Vec2 ZERO = Vec2f.builder().x(0f).y(0f).build(); }