From 99fe9f7e459643080ac1de7040f0572e0850d01d Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sat, 24 Jan 2026 15:38:12 -0800 Subject: Scene2d --- core/src/main/java/coffee/liz/ecs/math/Vec2.java | 23 +++++++++++++++++++++++ core/src/main/java/coffee/liz/ecs/math/Vec2f.java | 7 +++++++ core/src/main/java/coffee/liz/ecs/math/Vec2i.java | 8 ++++++++ 3 files changed, 38 insertions(+) (limited to 'core/src/main/java/coffee/liz/ecs') 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. * @@ -46,6 +48,17 @@ public interface Vec2 { */ Vec2 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 scale(final Vec2 scale) { + return scale(scale.getX(), scale.getY()); + } + /** * Length of the vector. * @@ -62,4 +75,14 @@ public interface Vec2 { * @return Vec2 components of {@link Vec2} */ Vec2 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 transform(final Function xTransform, final Function 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 @@ -44,6 +46,11 @@ public final class Vec2f implements Vec2 { 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(); 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 @@ -39,6 +41,12 @@ public final class Vec2i implements Vec2 { 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; -- cgit v1.2.3-70-g09d2