MatrixUtil math fix

This commit is contained in:
Dirk-Dinkum
2024-04-13 19:33:53 +02:00
parent 045176c446
commit 82604c455e
4 changed files with 17 additions and 2 deletions
+1 -1
View File
@@ -9,7 +9,7 @@
<git name="flixel-addons" url="https://github.com/FNF-CNE-Devs/flixel-addons" />
<!-- Other Libraries -->
<git name="hscript-improved" url="https://github.com/FNF-CNE-Devs/hscript-improved" ref="custom-classes" />
<git name="hscript-improved" url="https://github.com/FNF-CNE-Devs/hscript-improved" />
<git name="flxanimate" url="https://github.com/FNF-CNE-Devs/flxanimate" />
<git name="hxdiscord_rpc" url="https://github.com/FNF-CNE-Devs/hxdiscord_rpc" />
<lib name="hxvlc" />
+2
View File
@@ -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;
@@ -31,4 +31,8 @@ class NothingCamera extends FlxCamera {
public override function drawTriangles(graphic:FlxGraphic, vertices:DrawData<Float>, indices:DrawData<Int>, uvtData:DrawData<Float>, ?colors:DrawData<Int>, ?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 {}
}
+10 -1
View File
@@ -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<FlxPoint> = 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;