diff options
Diffstat (limited to 'core/src/main/java/coffee/liz/ecs')
| -rw-r--r-- | core/src/main/java/coffee/liz/ecs/math/Vec2.java | 23 | ||||
| -rw-r--r-- | core/src/main/java/coffee/liz/ecs/math/Vec2f.java | 7 | ||||
| -rw-r--r-- | core/src/main/java/coffee/liz/ecs/math/Vec2i.java | 8 |
3 files changed, 38 insertions, 0 deletions
diff --git a/core/src/main/java/coffee/liz/ecs/math/Vec2.java b/core/src/main/java/coffee/liz/ecs/math/Vec2.java index ec7e531..7620395 100644 --- a/core/src/main/java/coffee/liz/ecs/math/Vec2.java +++ b/core/src/main/java/coffee/liz/ecs/math/Vec2.java @@ -1,5 +1,7 @@ package coffee.liz.ecs.math; +import java.util.function.Function; + /** * Cartesian vectors. * @@ -47,6 +49,17 @@ public interface Vec2<T> { Vec2<T> scale(final T scaleX, final T scaleY); /** + * Scales this vector by the given vector. + * + * @param scale + * scale vec. + * @return a new scaled vector + */ + default Vec2<T> scale(final Vec2<T> scale) { + return scale(scale.getX(), scale.getY()); + } + + /** * Length of the vector. * * @return length. @@ -62,4 +75,14 @@ public interface Vec2<T> { * @return Vec2<Float> components of {@link Vec2<T>} */ Vec2<Float> floatValue(); + + /** + * @param xTransform + * transform of x component. + * @param yTransform + * transform of y component. + * @return transformed vec applying {@param xTransform} to x component, + * {@param yTransform} to y component. + */ + Vec2<T> transform(final Function<T, T> xTransform, final Function<T, T> yTransform); } diff --git a/core/src/main/java/coffee/liz/ecs/math/Vec2f.java b/core/src/main/java/coffee/liz/ecs/math/Vec2f.java index 46f3fb8..5b91a2d 100644 --- a/core/src/main/java/coffee/liz/ecs/math/Vec2f.java +++ b/core/src/main/java/coffee/liz/ecs/math/Vec2f.java @@ -7,6 +7,8 @@ import lombok.Data; import lombok.Getter; import lombok.RequiredArgsConstructor; +import java.util.function.Function; + /** Float impl of {@link Vec2}. */ @Getter @RequiredArgsConstructor @@ -45,6 +47,11 @@ public final class Vec2f implements Vec2<Float> { } @Override + public Vec2<Float> transform(final Function<Float, Float> xTransform, final Function<Float, Float> yTransform) { + return new Vec2f(xTransform.apply(getX()), yTransform.apply(getY())); + } + + @Override public Vec2<Integer> intValue() { return Vec2i.builder().x(this.x.intValue()).y(this.y.intValue()).build(); } diff --git a/core/src/main/java/coffee/liz/ecs/math/Vec2i.java b/core/src/main/java/coffee/liz/ecs/math/Vec2i.java index dbe246e..c7f9c83 100644 --- a/core/src/main/java/coffee/liz/ecs/math/Vec2i.java +++ b/core/src/main/java/coffee/liz/ecs/math/Vec2i.java @@ -7,6 +7,8 @@ import lombok.Data; import lombok.Getter; import lombok.RequiredArgsConstructor; +import java.util.function.Function; + /** Integer impl of {@link Vec2}. */ @Getter @RequiredArgsConstructor @@ -40,6 +42,12 @@ public final class Vec2i implements Vec2<Integer> { } @Override + public Vec2<Integer> transform(final Function<Integer, Integer> xTransform, + final Function<Integer, Integer> yTransform) { + return new Vec2i(xTransform.apply(getX()), yTransform.apply(getY())); + } + + @Override public Vec2<Integer> intValue() { return this; } |
