From 181e950216e2c6d36d9b8484a46822b2ca4d7980 Mon Sep 17 00:00:00 2001
From: Cameron Taylor <cameron.taylor.ninja@gmail.com>
Date: Sat, 4 Dec 2021 22:38:33 -0500
Subject: [PATCH] stroke shader replacement freeplay text

---
 source/FreeplayState.hx             | 17 ++++----
 source/shaderslmfao/StrokeShader.hx | 65 +++++++++++++++++++++++++++++
 2 files changed, 75 insertions(+), 7 deletions(-)
 create mode 100644 source/shaderslmfao/StrokeShader.hx

diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx
index 6360b899d..36c8055b7 100644
--- a/source/FreeplayState.hx
+++ b/source/FreeplayState.hx
@@ -25,6 +25,7 @@ import freeplayStuff.SongMenuItem;
 import lime.app.Future;
 import lime.utils.Assets;
 import shaderslmfao.AngleMask;
+import shaderslmfao.StrokeShader;
 
 using StringTools;
 
@@ -201,13 +202,15 @@ class FreeplayState extends MusicBeatSubstate
 		var fnfFreeplay:FlxText = new FlxText(0, 12, 0, "FREEPLAY", 48);
 		fnfFreeplay.font = "VCR OSD Mono";
 		fnfFreeplay.visible = false;
+		var sillyStroke = new StrokeShader(0xFFFFFFFF, 2, 2);
+		fnfFreeplay.shader = sillyStroke;
 		add(fnfFreeplay);
 
 		var fnfFreeplayBOLD:FlxSprite = new FlxSprite(0, 12).loadGraphic(Paths.image('freeplayBOLD'));
-		add(fnfFreeplayBOLD);
-		fnfFreeplayBOLD.visible = false;
-		fnfFreeplayBOLD.setGraphicSize(0, 56);
-		fnfFreeplayBOLD.updateHitbox();
+		// add(fnfFreeplayBOLD);
+		// fnfFreeplayBOLD.visible = false;
+		// fnfFreeplayBOLD.setGraphicSize(0, 56);
+		// fnfFreeplayBOLD.updateHitbox();
 
 		dj.animHITsignal.add(function()
 		{
@@ -216,12 +219,12 @@ class FreeplayState extends MusicBeatSubstate
 
 			new FlxTimer().start(1 / 24, function(handShit)
 			{
-				fnfFreeplayBOLD.visible = true;
+				fnfFreeplay.visible = true;
 
 				new FlxTimer().start(1.5 / 24, function(bold)
 				{
-					fnfFreeplay.visible = true;
-					fnfFreeplayBOLD.visible = false;
+					sillyStroke.width = 0;
+					sillyStroke.height = 0;
 				});
 			});
 
diff --git a/source/shaderslmfao/StrokeShader.hx b/source/shaderslmfao/StrokeShader.hx
new file mode 100644
index 000000000..a6ba1ccad
--- /dev/null
+++ b/source/shaderslmfao/StrokeShader.hx
@@ -0,0 +1,65 @@
+package shaderslmfao;
+
+import flixel.system.FlxAssets.FlxShader;
+import flixel.util.FlxColor;
+
+class StrokeShader extends FlxShader
+{
+	// MOSTLY STOLEN FROM AUSTIN EAST LOL!
+	// https://gist.github.com/AustinEast/d3892fdf6a6079366fffde071f0c2bae
+	public var width(default, set):Float = 0;
+	public var height(default, set):Float = 0;
+
+	public var col(default, set):FlxColor = 0xFFFFFFFF;
+
+	function set_width(val):Float
+	{
+		size.value = [val, height];
+
+		return val;
+	}
+
+	function set_height(val):Float
+	{
+		size.value = [width, val];
+		return val;
+	}
+
+	function set_col(val:FlxColor):FlxColor
+	{
+		color.value = [val.red, val.green, val.blue, val.alpha];
+
+		return val;
+	}
+
+	@:glFragmentSource('
+        #pragma header
+
+        uniform vec2 size;
+        uniform vec4 color;
+
+        void main()
+        {
+            vec4 sample = flixel_texture2D(bitmap, openfl_TextureCoordv);
+            if (sample.a == 0.) {
+                float w = size.x / openfl_TextureSize.x;
+                float h = size.y / openfl_TextureSize.y;
+                
+                if (flixel_texture2D(bitmap, vec2(openfl_TextureCoordv.x + w, openfl_TextureCoordv.y)).a != 0.
+                || flixel_texture2D(bitmap, vec2(openfl_TextureCoordv.x - w, openfl_TextureCoordv.y)).a != 0.
+                || flixel_texture2D(bitmap, vec2(openfl_TextureCoordv.x, openfl_TextureCoordv.y + h)).a != 0.
+                || flixel_texture2D(bitmap, vec2(openfl_TextureCoordv.x, openfl_TextureCoordv.y - h)).a != 0.)
+                    sample = color;
+            }
+            gl_FragColor = sample;
+        }
+    ')
+	public function new(color:FlxColor = 0xFFFFFFFF, width:Float = 1, height:Float = 1)
+	{
+		super();
+
+		col = color;
+		this.width = width;
+		this.height = height;
+	}
+}