diff --git a/assets/shaders/circleProfilePicture.frag b/assets/shaders/circleProfilePicture.frag new file mode 100644 index 00000000..48ad18bf --- /dev/null +++ b/assets/shaders/circleProfilePicture.frag @@ -0,0 +1,11 @@ +#pragma header + +// shader used in GitHub credits + +void main() { + float len = length(openfl_TextureCoordv - vec2(0.5, 0.5)); + float r = 0.5 - (1.0 / openfl_TextureSize.x); + vec4 c = flixel_texture2D(bitmap, openfl_TextureCoordv); + vec4 color = mix(vec4(0, 0, 0, 0.5), c, c.a); + gl_FragColor = color * clamp(1 - ((len - r) * openfl_TextureSize.x), 0, 1); +} \ No newline at end of file diff --git a/buildnumber.txt b/buildnumber.txt index a311f3e7..74a75f5f 100644 --- a/buildnumber.txt +++ b/buildnumber.txt @@ -1 +1 @@ -2246 \ No newline at end of file +2253 \ No newline at end of file diff --git a/source/funkin/menus/credits/CreditsCodename.hx b/source/funkin/menus/credits/CreditsCodename.hx index 732c2136..2d705aee 100644 --- a/source/funkin/menus/credits/CreditsCodename.hx +++ b/source/funkin/menus/credits/CreditsCodename.hx @@ -1,19 +1,25 @@ package funkin.menus.credits; +import funkin.shaders.CustomShader; +import flixel.math.FlxMath; +import funkin.options.type.TextOption; +import funkin.options.OptionsScreen; import flixel.graphics.FlxGraphic; import flixel.FlxG; import openfl.display.BitmapData; import flixel.FlxSprite; import flixel.addons.transition.FlxTransitionableState; import funkin.github.GitHub; +import funkin.github.GitHubContributor; import funkin.menus.MainMenuState; -class CreditsCodename extends MusicBeatState { +class CreditsCodename extends OptionsScreen { public var contributorsSprites:Array = []; public var contributorsAvatars:Array = []; public var avatarLoadListId:Int = 0; + public var contributors:Array; + public override function create() { - super.create(); var bg:FlxSprite = new FlxSprite(-80).loadAnimatedGraphic(Paths.image('menus/menuBGBlue')); bg.scrollFactor.set(); @@ -23,20 +29,42 @@ class CreditsCodename extends MusicBeatState { bg.antialiasing = true; add(bg); - var contributors = GitHub.getContributors("YoshiCrafter29", "CodenameEngine", function(e) { + contributors = GitHub.getContributors("YoshiCrafter29", "CodenameEngine", function(e) { trace(e); }); + + var totalContributions = 0; + + for(c in contributors) + totalContributions += c.contributions; + + options = [for(c in contributors) new TextOption( + c.login, + 'Total Contributions: ${c.contributions} / ${totalContributions} (${FlxMath.roundDecimal(c.contributions / totalContributions * 100, 2)}%) - Select to open GitHub account', + function() { + // open the link + CoolUtil.openURL(c.html_url); + })]; + + + super.create(); + } + + public override function createAdditional() { for(k=>c in contributors) { - var spr = new FlxSprite(0, k * 50); + var spr = new FlxSprite(0, k * 96); spr.antialiasing = true; - spr.setUnstretchedGraphicSize(50, 50, false); + spr.setUnstretchedGraphicSize(96, 96, false); + spr.updateHitbox(); + spr.shader = new CustomShader('circleProfilePicture'); contributorsSprites.push(spr); add(spr); } + // asynchronous pfp loading Main.execAsync(function() { for(k=>c in contributors) { - var bytes = GitHub.__requestBytesOnGitHubServers('${c.avatar_url}&size=64'); + var bytes = GitHub.__requestBytesOnGitHubServers('${c.avatar_url}&size=96'); var bmap = BitmapData.fromBytes(bytes); contributorsAvatars.push(FlxG.bitmap.add(bmap, false, 'GITHUB-USER:${c.login}')); if (destroyed) return; @@ -46,19 +74,21 @@ class CreditsCodename extends MusicBeatState { public override function update(elapsed:Float) { super.update(elapsed); - if (controls.BACK) { - CoolUtil.playMenuSFX(CANCEL); - FlxTransitionableState.skipNextTransIn = FlxTransitionableState.skipNextTransOut = true; - FlxG.switchState(new MainMenuState()); - } if (avatarLoadListId < contributorsAvatars.length) { for(i in avatarLoadListId...contributorsAvatars.length) { var v = contributorsSprites[i]; v.loadGraphic(contributorsAvatars[i]); - v.setUnstretchedGraphicSize(50, 50, false); + v.setUnstretchedGraphicSize(96, 96, false); + v.updateHitbox(); } avatarLoadListId = contributorsAvatars.length; } + + for(k=>spr in contributorsSprites) { + var alpha = options[k]; + spr.x = alpha.x - 10; + spr.y = alpha.y - ((alpha.height - spr.height) / 2); + } } public override function destroy() { diff --git a/source/funkin/menus/credits/CreditsMain.hx b/source/funkin/menus/credits/CreditsMain.hx index d059f7e5..30bf2f04 100644 --- a/source/funkin/menus/credits/CreditsMain.hx +++ b/source/funkin/menus/credits/CreditsMain.hx @@ -14,11 +14,7 @@ class CreditsMain extends OptionsScreen { FlxG.switchState(new CreditsCodename()); }), new TextOption("Friday Night Funkin'", "Select this to open the itch.io page of the original game to donate!", function() { - #if linux - Sys.command('/usr/bin/xdg-open', ["https://ninja-muffin24.itch.io/funkin", "&"]); - #else - FlxG.openURL('https://ninja-muffin24.itch.io/funkin'); - #end + CoolUtil.openURL("https://ninja-muffin24.itch.io/funkin"); }) ]; super.create(); diff --git a/source/funkin/options/OptionsScreen.hx b/source/funkin/options/OptionsScreen.hx index 1745478b..97c7e2ff 100644 --- a/source/funkin/options/OptionsScreen.hx +++ b/source/funkin/options/OptionsScreen.hx @@ -51,6 +51,14 @@ class OptionsScreen extends MusicBeatState { bg.antialiasing = true; add(bg); + + for(k=>option in options) { + option.setPosition(k * 20, 10 + (k * optionHeight)); + add(option); + } + + createAdditional(); + descText = new FunkinText(0, 0); descText.alignment = CENTER; descText.scrollFactor.set(); @@ -65,14 +73,10 @@ class OptionsScreen extends MusicBeatState { add(descDrop); descText.antialiasing = descDrop.antialiasing = true; - - for(k=>option in options) { - option.setPosition(k * 20, 10 + (k * optionHeight)); - add(option); - } changeSelection(1); } + public function createAdditional() {} public var scrollDest:FlxPoint = FlxPoint.get(0, 0); public override function update(elapsed:Float) { super.update(elapsed); diff --git a/source/funkin/utils/CoolUtil.hx b/source/funkin/utils/CoolUtil.hx index 3a78b49b..bca274d7 100644 --- a/source/funkin/utils/CoolUtil.hx +++ b/source/funkin/utils/CoolUtil.hx @@ -401,6 +401,14 @@ class CoolUtil array.push(a); return array; } + + public static function openURL(url:String) { + #if linux + Sys.command('/usr/bin/xdg-open', [url, "&"]); + #else + FlxG.openURL(url); + #end + } } enum abstract CoolSfx(Int) from Int {