From 6a01c3008ca0db2f303bd0219e361911bc402fc3 Mon Sep 17 00:00:00 2001
From: Cameron Taylor <cameron.taylor.ninja@gmail.com>
Date: Wed, 7 Dec 2022 02:29:48 -0500
Subject: [PATCH] proper result screen masking !

---
 source/funkin/TitleState.hx                  | 16 ++++++++++++++
 source/funkin/play/ResultState.hx            | 19 ++++++++++++++--
 source/funkin/shaderslmfao/LeftMaskShader.hx | 23 +++++++++++++++++++-
 3 files changed, 55 insertions(+), 3 deletions(-)

diff --git a/source/funkin/TitleState.hx b/source/funkin/TitleState.hx
index ef3984f80..48f5d9550 100644
--- a/source/funkin/TitleState.hx
+++ b/source/funkin/TitleState.hx
@@ -11,6 +11,7 @@ import flixel.util.FlxDirectionFlags;
 import flixel.util.FlxTimer;
 import funkin.audiovis.SpectogramSprite;
 import funkin.shaderslmfao.ColorSwap;
+import funkin.shaderslmfao.LeftMaskShader;
 import funkin.shaderslmfao.TitleOutline;
 import funkin.ui.AtlasText;
 import funkin.util.Constants;
@@ -133,6 +134,7 @@ class TitleState extends MusicBeatState
 	var gfDance:FlxSprite;
 	var danceLeft:Bool = false;
 	var titleText:FlxSprite;
+	var maskShader = new LeftMaskShader();
 
 	function startIntro()
 	{
@@ -166,6 +168,9 @@ class TitleState extends MusicBeatState
 
 		add(gfDance);
 
+		// maskShader.swagSprX = gfDance.x;
+		// maskShader.swagMaskX = gfDance.x + 200;
+		// maskShader.frameUV = gfDance.frame.uv;
 		// gfDance.shader = maskShader;
 
 		// gfDance.shader = swagShader.shader;
@@ -436,6 +441,17 @@ class TitleState extends MusicBeatState
 		super.update(elapsed);
 	}
 
+	override function draw()
+	{
+		super.draw();
+
+		// if (gfDance != null)
+		// {
+		// 	trace(gfDance.frame.uv);
+		// 	maskShader.frameUV = gfDance.frame.uv;
+		// }
+	}
+
 	var cheatArray:Array<Int> = [0x0001, 0x0010, 0x0001, 0x0010, 0x0100, 0x1000, 0x0100, 0x1000];
 	var curCheatPos:Int = 0;
 	var cheatActive:Bool = false;
diff --git a/source/funkin/play/ResultState.hx b/source/funkin/play/ResultState.hx
index 359b64f5a..59dc67c47 100644
--- a/source/funkin/play/ResultState.hx
+++ b/source/funkin/play/ResultState.hx
@@ -6,6 +6,7 @@ import flixel.graphics.frames.FlxAtlasFrames;
 import flixel.graphics.frames.FlxBitmapFont;
 import flixel.group.FlxGroup.FlxTypedGroup;
 import flixel.math.FlxPoint;
+import flixel.math.FlxRect;
 import flixel.text.FlxBitmapText;
 import flixel.text.FlxText;
 import flixel.tweens.FlxEase;
@@ -121,7 +122,7 @@ class ResultState extends MusicBeatSubstate
 		songName.shader = maskShaderSongName;
 		difficulty.shader = maskShaderDifficulty;
 
-		maskShaderSongName.swagMaskX = difficulty.x - 15;
+		// maskShaderSongName.swagMaskX = difficulty.x - 15;
 		maskShaderDifficulty.swagMaskX = difficulty.x - 15;
 
 		var blackTopBar:FlxSprite = new FlxSprite().loadGraphic(Paths.image("resultScreen/topBarBlack"));
@@ -252,9 +253,23 @@ class ResultState extends MusicBeatSubstate
 	var movingSongStuff:Bool = false;
 	var speedOfTween:FlxPoint = FlxPoint.get(-1, 0.1);
 
+	override function draw():Void
+	{
+		super.draw();
+
+		if (songName != null)
+		{
+			songName.clipRect = FlxRect.get(Math.max(0, 540 - songName.x), 0, FlxG.width, songName.height);
+			// PROBABLY SHOULD FIX MEMORY FREE OR WHATEVER THE PUT() FUNCTION DOES !!!! FEELS LIKE IT STUTTERS!!!
+		}
+
+		// if (songName != null && songName.frame != null)
+		// maskShaderSongName.frameUV = songName.frame.uv;
+	}
+
 	override function update(elapsed:Float)
 	{
-		maskShaderSongName.swagSprX = songName.x;
+		// maskShaderSongName.swagSprX = songName.x;
 		maskShaderDifficulty.swagSprX = difficulty.x;
 
 		if (movingSongStuff)
diff --git a/source/funkin/shaderslmfao/LeftMaskShader.hx b/source/funkin/shaderslmfao/LeftMaskShader.hx
index 0e0b7bcc7..091eba86e 100644
--- a/source/funkin/shaderslmfao/LeftMaskShader.hx
+++ b/source/funkin/shaderslmfao/LeftMaskShader.hx
@@ -1,11 +1,13 @@
 package funkin.shaderslmfao;
 
+import flixel.math.FlxRect;
 import flixel.system.FlxAssets.FlxShader;
 
 class LeftMaskShader extends FlxShader
 {
 	public var swagMaskX(default, set):Float = 0;
 	public var swagSprX(default, set):Float = 0;
+	public var frameUV(default, set):FlxRect;
 
 	function set_swagSprX(x:Float):Float
 	{
@@ -21,12 +23,26 @@ class LeftMaskShader extends FlxShader
 		return x;
 	}
 
+	function set_frameUV(uv:FlxRect):FlxRect
+	{
+		trace("SETTING FRAMEUV");
+		trace(uv);
+
+		uvFrameX.value[0] = uv.x;
+		uvFrameY.value[0] = uv.y;
+
+		return uv;
+	}
+
 	@:glFragmentSource('
         #pragma header
 
         uniform float sprX;
         uniform float maskX;
 
+		uniform float uvFrameX;
+		uniform float uvFrameY;
+
         void main()
         {
 
@@ -37,12 +53,15 @@ class LeftMaskShader extends FlxShader
 
             vec4 color = flixel_texture2D(bitmap, uv);
 
-            if (uv.x < sprPos)
+            if (uv.x < sprPos + uvFrameX)
             {
                 color = vec4(0.0, 0.0, 0.0, 0.0);
             }
 
             gl_FragColor = color;
+			// vec4 testCol = vec4(openfl_Position.x, openfl_Position.y, openfl_Position.z, 1.0);
+			//gl_FragColor = vec4(1.0, openfl_TextureSize.x, 1.0, 1.0);
+
         }
     ')
 	public function new()
@@ -51,5 +70,7 @@ class LeftMaskShader extends FlxShader
 
 		sprX.value = [0];
 		maskX.value = [0];
+		uvFrameX.value = [0];
+		uvFrameY.value = [0];
 	}
 }