From 181e950216e2c6d36d9b8484a46822b2ca4d7980 Mon Sep 17 00:00:00 2001 From: Cameron Taylor 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; + } +}