mirror of
https://github.com/FunkinCrew/Funkin.git
synced 2025-02-17 04:11:23 -05:00
cool shit
This commit is contained in:
parent
b54c459539
commit
c0660bd0c2
4 changed files with 233 additions and 3 deletions
|
@ -6,19 +6,25 @@ import flixel.FlxGame;
|
|||
import flixel.FlxSprite;
|
||||
import flixel.FlxState;
|
||||
import flixel.addons.display.FlxGridOverlay;
|
||||
import flixel.addons.transition.FlxTransitionableState;
|
||||
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||
import flixel.group.FlxGroup;
|
||||
import flixel.input.touch.FlxTouch;
|
||||
import flixel.math.FlxAngle;
|
||||
import flixel.math.FlxMath;
|
||||
import flixel.math.FlxPoint;
|
||||
import flixel.text.FlxText;
|
||||
import flixel.tweens.FlxEase;
|
||||
import flixel.tweens.FlxTween;
|
||||
import flixel.util.FlxColor;
|
||||
import flixel.util.FlxSpriteUtil;
|
||||
import flixel.util.FlxTimer;
|
||||
import freeplayStuff.BGScrollingText;
|
||||
import freeplayStuff.DJBoyfriend;
|
||||
import freeplayStuff.SongMenuItem;
|
||||
import lime.app.Future;
|
||||
import lime.utils.Assets;
|
||||
import shaderslmfao.AngleMask;
|
||||
|
||||
using StringTools;
|
||||
|
||||
|
@ -55,6 +61,8 @@ class FreeplayState extends MusicBeatState
|
|||
|
||||
override function create()
|
||||
{
|
||||
FlxTransitionableState.skipNextTransIn = true;
|
||||
|
||||
#if discord_rpc
|
||||
// Updating Discord Rich Presence
|
||||
DiscordClient.changePresence("In the Menus", null);
|
||||
|
@ -114,12 +122,95 @@ class FreeplayState extends MusicBeatState
|
|||
trace(FlxCamera.defaultZoom);
|
||||
trace(FlxG.initialZoom);
|
||||
|
||||
var pinkBack:FlxSprite = new FlxSprite().loadGraphic(Paths.image('freeplay/pinkBack'));
|
||||
pinkBack.color = 0xFFffd4e9; // sets it to pink!
|
||||
pinkBack.x -= pinkBack.width;
|
||||
|
||||
FlxTween.tween(pinkBack, {x: 0}, 0.6, {ease: FlxEase.quartOut});
|
||||
add(pinkBack);
|
||||
|
||||
var orangeBackShit:FlxSprite = new FlxSprite(84, FlxG.height * 0.68).makeGraphic(Std.int(pinkBack.width), 50, 0xFFffd400);
|
||||
add(orangeBackShit);
|
||||
|
||||
var alsoOrangeLOL:FlxSprite = new FlxSprite(0, orangeBackShit.y).makeGraphic(100, Std.int(orangeBackShit.height), 0xFFffd400);
|
||||
add(alsoOrangeLOL);
|
||||
|
||||
FlxSpriteUtil.alphaMaskFlxSprite(orangeBackShit, pinkBack, orangeBackShit);
|
||||
orangeBackShit.visible = false;
|
||||
alsoOrangeLOL.visible = false;
|
||||
|
||||
var grpTxtScrolls:FlxGroup = new FlxGroup();
|
||||
add(grpTxtScrolls);
|
||||
grpTxtScrolls.visible = false;
|
||||
|
||||
var moreWays:BGScrollingText = new BGScrollingText(0, 200, "HOT BLOODED IN MORE WAYS THAN ONE", FlxG.width);
|
||||
moreWays.funnyColor = 0xFFfff383;
|
||||
moreWays.speed = 2;
|
||||
grpTxtScrolls.add(moreWays);
|
||||
|
||||
var funnyScroll:BGScrollingText = new BGScrollingText(0, 250, "BOYFRIEND", FlxG.width / 2);
|
||||
funnyScroll.funnyColor = 0xFFff9963;
|
||||
funnyScroll.speed = -0.5;
|
||||
grpTxtScrolls.add(funnyScroll);
|
||||
|
||||
var txtNuts:BGScrollingText = new BGScrollingText(0, 300, "PROTECT YO NUTS", FlxG.width / 2);
|
||||
grpTxtScrolls.add(txtNuts);
|
||||
|
||||
var funnyScroll2:BGScrollingText = new BGScrollingText(0, 340, "BOYFRIEND", FlxG.width / 2);
|
||||
funnyScroll2.funnyColor = 0xFFff9963;
|
||||
funnyScroll2.speed = -0.6;
|
||||
grpTxtScrolls.add(funnyScroll2);
|
||||
|
||||
var moreWays2:BGScrollingText = new BGScrollingText(0, 400, "HOT BLOODED IN MORE WAYS THAN ONE", FlxG.width);
|
||||
moreWays2.funnyColor = 0xFFfff383;
|
||||
moreWays2.speed = 2.2;
|
||||
grpTxtScrolls.add(moreWays2);
|
||||
|
||||
var funnyScroll3:BGScrollingText = new BGScrollingText(0, orangeBackShit.y, "BOYFRIEND", FlxG.width / 2);
|
||||
funnyScroll3.funnyColor = 0xFFff9963;
|
||||
funnyScroll3.speed = -0.4;
|
||||
grpTxtScrolls.add(funnyScroll3);
|
||||
|
||||
var dj:DJBoyfriend = new DJBoyfriend(0, -100);
|
||||
add(dj);
|
||||
|
||||
var bgDad:FlxSprite = new FlxSprite(FlxG.width, 0).loadGraphic(Paths.image('freeplay/freeplayBGdad'));
|
||||
bgDad.setGraphicSize(0, FlxG.height);
|
||||
bgDad.updateHitbox();
|
||||
bgDad.shader = new AngleMask();
|
||||
|
||||
var blackOverlayBullshitLOLXD:FlxSprite = new FlxSprite(pinkBack.width * 0.75).makeGraphic(Std.int(bgDad.width), Std.int(bgDad.height),
|
||||
FlxColor.BLACK);
|
||||
add(blackOverlayBullshitLOLXD); // used to mask the text lol!
|
||||
add(bgDad);
|
||||
|
||||
blackOverlayBullshitLOLXD.shader = bgDad.shader;
|
||||
|
||||
grpSongs = new FlxTypedGroup<Alphabet>();
|
||||
add(grpSongs);
|
||||
|
||||
grpCapsules = new FlxTypedGroup<SongMenuItem>();
|
||||
add(grpCapsules);
|
||||
|
||||
var overhangStuff:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, 64, FlxColor.BLACK);
|
||||
overhangStuff.y -= overhangStuff.height;
|
||||
add(overhangStuff);
|
||||
|
||||
var fnfFreeplay:FlxText = new FlxText(0, -64, 0, "Freeplay", 48);
|
||||
fnfFreeplay.font = "VCR OSD Mono";
|
||||
add(fnfFreeplay);
|
||||
|
||||
dj.animHITsignal.add(function()
|
||||
{
|
||||
pinkBack.color = 0xFFffd863;
|
||||
FlxTween.tween(overhangStuff, {y: 0}, 0.3, {ease: FlxEase.quartOut});
|
||||
FlxTween.tween(fnfFreeplay, {y: 12}, 0.3, {ease: FlxEase.quartOut, startDelay: 0.5});
|
||||
FlxTween.tween(bgDad, {x: pinkBack.width * 0.75}, 1, {ease: FlxEase.quintOut});
|
||||
orangeBackShit.visible = true;
|
||||
alsoOrangeLOL.visible = true;
|
||||
grpTxtScrolls.visible = true;
|
||||
});
|
||||
|
||||
for (i in 0...songs.length)
|
||||
{
|
||||
var funnyMenu:SongMenuItem = new SongMenuItem(FlxG.width, (i * 150) + 160, songs[i].songName);
|
||||
|
@ -170,9 +261,6 @@ class FreeplayState extends MusicBeatState
|
|||
changeSelection();
|
||||
changeDiff();
|
||||
|
||||
var dj:DJBoyfriend = new DJBoyfriend(0, -100);
|
||||
add(dj);
|
||||
|
||||
// FlxG.sound.playMusic(Paths.music('title'), 0);
|
||||
// FlxG.sound.music.fadeIn(2, 0, 0.8);
|
||||
// selector = new FlxText();
|
||||
|
|
93
source/freeplayStuff/BGScrollingText.hx
Normal file
93
source/freeplayStuff/BGScrollingText.hx
Normal file
|
@ -0,0 +1,93 @@
|
|||
package freeplayStuff;
|
||||
|
||||
import flixel.FlxObject;
|
||||
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||
import flixel.group.FlxSpriteGroup;
|
||||
import flixel.math.FlxMath;
|
||||
import flixel.text.FlxText;
|
||||
import flixel.util.FlxColor;
|
||||
import flixel.util.FlxSort;
|
||||
|
||||
// its kinda like marqeee html lol!
|
||||
class BGScrollingText extends FlxSpriteGroup
|
||||
{
|
||||
var grpTexts:FlxTypedSpriteGroup<FlxText>;
|
||||
|
||||
public var widthShit:Float = FlxG.width;
|
||||
public var placementOffset:Float = 20;
|
||||
public var speed:Float = 1;
|
||||
|
||||
public var funnyColor(default, set):Int = 0xFFFFFFFF;
|
||||
|
||||
public function new(x:Float, y:Float, text:String, widthShit:Float = 100)
|
||||
{
|
||||
super(x, y);
|
||||
|
||||
this.widthShit = widthShit;
|
||||
|
||||
grpTexts = new FlxTypedSpriteGroup<FlxText>();
|
||||
add(grpTexts);
|
||||
|
||||
var testText:FlxText = new FlxText(0, 0, 0, text, 48);
|
||||
testText.font = "5by7";
|
||||
testText.updateHitbox();
|
||||
grpTexts.add(testText);
|
||||
|
||||
var needed:Int = Math.ceil(widthShit / testText.frameWidth);
|
||||
|
||||
for (i in 0...needed)
|
||||
{
|
||||
var lmfao:Int = i + 1;
|
||||
|
||||
var coolText:FlxText = new FlxText((lmfao * testText.frameWidth) + (lmfao * 20), 0, 0, text, 48);
|
||||
coolText.font = "5by7";
|
||||
coolText.updateHitbox();
|
||||
grpTexts.add(coolText);
|
||||
}
|
||||
}
|
||||
|
||||
function set_funnyColor(col:Int):Int
|
||||
{
|
||||
grpTexts.forEach(function(txt)
|
||||
{
|
||||
txt.color = col;
|
||||
});
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
override function update(elapsed:Float)
|
||||
{
|
||||
for (txt in grpTexts.group)
|
||||
{
|
||||
txt.x -= 1 * speed;
|
||||
|
||||
if (speed > 0)
|
||||
{
|
||||
if (txt.x < -txt.frameWidth)
|
||||
{
|
||||
txt.x = grpTexts.group.members[grpTexts.length - 1].x + grpTexts.group.members[grpTexts.length - 1].frameWidth + placementOffset;
|
||||
sortTextShit();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (txt.x > widthShit)
|
||||
{
|
||||
txt.x = grpTexts.group.members[0].x - grpTexts.group.members[0].frameWidth - placementOffset;
|
||||
sortTextShit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.update(elapsed);
|
||||
}
|
||||
|
||||
function sortTextShit():Void
|
||||
{
|
||||
grpTexts.sort(function(Order:Int, Obj1:FlxObject, Obj2:FlxObject)
|
||||
{
|
||||
return FlxSort.byValues(Order, Obj1.x, Obj2.x);
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,13 +1,18 @@
|
|||
package freeplayStuff;
|
||||
|
||||
import flixel.FlxSprite;
|
||||
import flixel.util.FlxSignal;
|
||||
|
||||
class DJBoyfriend extends FlxSprite
|
||||
{
|
||||
public var animHITsignal:FlxSignal;
|
||||
|
||||
public function new(x:Float, y:Float)
|
||||
{
|
||||
super(x, y);
|
||||
|
||||
animHITsignal = new FlxSignal();
|
||||
|
||||
animOffsets = new Map<String, Array<Dynamic>>();
|
||||
|
||||
frames = Paths.getSparrowAtlas('freeplay/bfFreeplay');
|
||||
|
@ -24,6 +29,7 @@ class DJBoyfriend extends FlxSprite
|
|||
switch (anim)
|
||||
{
|
||||
case "intro":
|
||||
animHITsignal.dispatch();
|
||||
playAnim('idle'); // plays idle anim after playing intro
|
||||
}
|
||||
};
|
||||
|
|
43
source/shaderslmfao/AngleMask.hx
Normal file
43
source/shaderslmfao/AngleMask.hx
Normal file
|
@ -0,0 +1,43 @@
|
|||
package shaderslmfao;
|
||||
|
||||
import flixel.system.FlxAssets.FlxShader;
|
||||
|
||||
class AngleMask extends FlxShader
|
||||
{
|
||||
@:glFragmentSource('
|
||||
#pragma header
|
||||
uniform vec2 endPosition;
|
||||
void main()
|
||||
{
|
||||
vec4 base = texture2D(bitmap, openfl_TextureCoordv);
|
||||
|
||||
vec2 uv = openfl_TextureCoordv.xy;
|
||||
|
||||
|
||||
|
||||
vec2 start = vec2(0.0, 0.0);
|
||||
vec2 end = vec2(endPosition.x / openfl_TextureSize.x, 1.0);
|
||||
|
||||
float dx = end.x - start.x;
|
||||
float dy = end.y - start.y;
|
||||
|
||||
float angle = atan(dy, dx);
|
||||
|
||||
uv.x -= start.x;
|
||||
uv.y -= start.y;
|
||||
|
||||
float uvA = atan(uv.y, uv.x);
|
||||
|
||||
if (uvA < angle)
|
||||
gl_FragColor = base;
|
||||
else
|
||||
gl_FragColor = vec4(0.0);
|
||||
|
||||
}')
|
||||
public function new()
|
||||
{
|
||||
super();
|
||||
|
||||
endPosition.value = [90, 100]; // 100 AS DEFAULT WORKS NICELY FOR FREEPLAY?
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue