From 82604c455ea48345affe26272fd311fbfc5454bf Mon Sep 17 00:00:00 2001
From: Dirk-Dinkum <134403819+Dirk-Dinkum@users.noreply.github.com>
Date: Sat, 13 Apr 2024 19:33:53 +0200
Subject: [PATCH] MatrixUtil math fix
---
libs.xml | 2 +-
source/funkin/backend/FunkinSprite.hx | 2 ++
source/funkin/backend/system/NothingCamera.hx | 4 ++++
source/funkin/backend/utils/MatrixUtil.hx | 11 ++++++++++-
4 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/libs.xml b/libs.xml
index cfdec718..f3d27d0f 100644
--- a/libs.xml
+++ b/libs.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/source/funkin/backend/FunkinSprite.hx b/source/funkin/backend/FunkinSprite.hx
index d817f142..538c18ad 100644
--- a/source/funkin/backend/FunkinSprite.hx
+++ b/source/funkin/backend/FunkinSprite.hx
@@ -86,6 +86,8 @@ class FunkinSprite extends FlxSkewedSprite implements IBeatReceiver implements I
spr.skew.set(source.skew.x, source.skew.y);
spr.transformMatrix = source.transformMatrix;
spr.matrixExposed = source.matrixExposed;
+ spr.zoomFactor = source.zoomFactor;
+ spr.initialZoom = source.initialZoom;
spr.animOffsets = source.animOffsets.copy();
}
return spr;
diff --git a/source/funkin/backend/system/NothingCamera.hx b/source/funkin/backend/system/NothingCamera.hx
index 12917499..45a91a1a 100644
--- a/source/funkin/backend/system/NothingCamera.hx
+++ b/source/funkin/backend/system/NothingCamera.hx
@@ -31,4 +31,8 @@ class NothingCamera extends FlxCamera {
public override function drawTriangles(graphic:FlxGraphic, vertices:DrawData, indices:DrawData, uvtData:DrawData, ?colors:DrawData, ?position:FlxPoint, ?blend:BlendMode, repeat:Bool = false, smoothing:Bool = false, ?transform:ColorTransform, ?shader:FlxShader):Void {}
public override function update(elapsed:Float) {}
+
+ // override function set_zoom(Zoom:Float):Float return zoom = (Zoom == 0) ? FlxCamera.defaultZoom : Zoom;
+
+ public override function setScale(X:Float, Y:Float):Void {}
}
\ No newline at end of file
diff --git a/source/funkin/backend/utils/MatrixUtil.hx b/source/funkin/backend/utils/MatrixUtil.hx
index 65230b94..146fd430 100644
--- a/source/funkin/backend/utils/MatrixUtil.hx
+++ b/source/funkin/backend/utils/MatrixUtil.hx
@@ -12,11 +12,13 @@ class MatrixUtil {
if(camera == null) camera = sprite.camera;
if(points is FlxBasePoint) points = [points];
var nc = funkin.backend.system.NothingCamera.instance;
+ nc.zoom = camera.zoom;
nc.scroll.set(camera.scroll.x, camera.scroll.y);
- //nc.zoom = camera.zoom; // might not be needed
nc.pixelPerfectRender = camera.pixelPerfectRender;
@:privateAccess sprite.drawComplex(nc);
+ var isFunkinSprite = sprite is FunkinSprite;
+
var points:Array = cast points;
@:privateAccess for(point in points) {
var x = sprite._matrix.__transformX(point.x * _width, point.y * _height);
@@ -25,7 +27,14 @@ class MatrixUtil {
// reset to ingame coords
x += camera.scroll.x;
y += camera.scroll.y;
+
+ if(isFunkinSprite) {
+ var sprite:FunkinSprite = cast sprite;
+ var ratio = 1 - FlxMath.lerp(1 / camera.zoom, 1, sprite.zoomFactor);
+ x += camera.width / 2 * ratio;
+ y += camera.height / 2 * ratio;
+ }
point.set(x, y);
}
return points;