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;