mirror of
https://github.com/FunkinCrew/Funkin.git
synced 2025-03-10 23:28:05 -04:00
alphabetical sorting stuuuuf
This commit is contained in:
parent
09a037b20b
commit
4918c4f645
2 changed files with 163 additions and 20 deletions
|
@ -25,6 +25,7 @@ import funkin.Controls.Control;
|
||||||
import funkin.freeplayStuff.BGScrollingText;
|
import funkin.freeplayStuff.BGScrollingText;
|
||||||
import funkin.freeplayStuff.DJBoyfriend;
|
import funkin.freeplayStuff.DJBoyfriend;
|
||||||
import funkin.freeplayStuff.FreeplayScore;
|
import funkin.freeplayStuff.FreeplayScore;
|
||||||
|
import funkin.freeplayStuff.LetterSort;
|
||||||
import funkin.freeplayStuff.SongMenuItem;
|
import funkin.freeplayStuff.SongMenuItem;
|
||||||
import funkin.play.HealthIcon;
|
import funkin.play.HealthIcon;
|
||||||
import funkin.play.PlayState;
|
import funkin.play.PlayState;
|
||||||
|
@ -242,6 +243,14 @@ class FreeplayState extends MusicBeatSubstate
|
||||||
add(new DifficultySelector(20, grpDifficulties.y - 10, false, controls));
|
add(new DifficultySelector(20, grpDifficulties.y - 10, false, controls));
|
||||||
add(new DifficultySelector(325, grpDifficulties.y - 10, true, controls));
|
add(new DifficultySelector(325, grpDifficulties.y - 10, true, controls));
|
||||||
|
|
||||||
|
var letterSort:LetterSort = new LetterSort(300, 100);
|
||||||
|
add(letterSort);
|
||||||
|
|
||||||
|
letterSort.changeSelectionCallback = (str) ->
|
||||||
|
{
|
||||||
|
generateSongList(str, true);
|
||||||
|
};
|
||||||
|
|
||||||
new FlxTimer().start(1 / 24, function(handShit)
|
new FlxTimer().start(1 / 24, function(handShit)
|
||||||
{
|
{
|
||||||
fnfFreeplay.visible = true;
|
fnfFreeplay.visible = true;
|
||||||
|
@ -299,7 +308,7 @@ class FreeplayState extends MusicBeatSubstate
|
||||||
|
|
||||||
typing.callback = function(txt, action)
|
typing.callback = function(txt, action)
|
||||||
{
|
{
|
||||||
generateSongList(new EReg(txt.trim(), "ig"));
|
// generateSongList(new EReg(txt.trim(), "ig"));
|
||||||
trace(action);
|
trace(action);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -311,29 +320,48 @@ class FreeplayState extends MusicBeatSubstate
|
||||||
super.create();
|
super.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function generateSongList(?regexp:EReg)
|
public function generateSongList(?startsWith:String, ?force:Bool = false)
|
||||||
{
|
{
|
||||||
curSelected = 0;
|
curSelected = 0;
|
||||||
|
|
||||||
grpCapsules.clear();
|
grpCapsules.clear();
|
||||||
|
|
||||||
var regexp:EReg = regexp;
|
// var regexp:EReg = regexp;
|
||||||
var tempSongs:Array<SongMetadata> = songs;
|
var tempSongs:Array<SongMetadata> = songs;
|
||||||
if (regexp != null)
|
|
||||||
tempSongs = songs.filter(item -> regexp.match(item.songName));
|
|
||||||
|
|
||||||
tempSongs.sort(function(a, b):Int
|
if (startsWith != null)
|
||||||
{
|
{
|
||||||
var tempA = a.songName.toUpperCase();
|
trace("STARTS WITH: " + startsWith);
|
||||||
var tempB = b.songName.toUpperCase();
|
switch (startsWith)
|
||||||
|
{
|
||||||
|
case "ALL":
|
||||||
|
case "#":
|
||||||
|
default:
|
||||||
|
trace(tempSongs.length);
|
||||||
|
|
||||||
if (tempA < tempB)
|
tempSongs = tempSongs.filter(str ->
|
||||||
return -1;
|
{
|
||||||
else if (tempA > tempB)
|
return str.songName.toLowerCase().startsWith(startsWith);
|
||||||
return 1;
|
});
|
||||||
else
|
trace(tempSongs.length);
|
||||||
return 0;
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
|
// if (regexp != null)
|
||||||
|
// tempSongs = songs.filter(item -> regexp.match(item.songName));
|
||||||
|
|
||||||
|
// tempSongs.sort(function(a, b):Int
|
||||||
|
// {
|
||||||
|
// var tempA = a.songName.toUpperCase();
|
||||||
|
// var tempB = b.songName.toUpperCase();
|
||||||
|
|
||||||
|
// if (tempA < tempB)
|
||||||
|
// return -1;
|
||||||
|
// else if (tempA > tempB)
|
||||||
|
// return 1;
|
||||||
|
// else
|
||||||
|
// return 0;
|
||||||
|
// });
|
||||||
|
|
||||||
for (i in 0...tempSongs.length)
|
for (i in 0...tempSongs.length)
|
||||||
{
|
{
|
||||||
|
@ -355,11 +383,19 @@ class FreeplayState extends MusicBeatSubstate
|
||||||
funnyMenu.doLerp = true;
|
funnyMenu.doLerp = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
new FlxTimer().start(((0.20 * i) / (1 + i)) + 0.75, function(swagShi)
|
if (!force)
|
||||||
|
{
|
||||||
|
new FlxTimer().start(((0.20 * i) / (1 + i)) + 0.75, function(swagShi)
|
||||||
|
{
|
||||||
|
funnyMenu.songText.visible = true;
|
||||||
|
funnyMenu.alpha = 1;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
funnyMenu.songText.visible = true;
|
funnyMenu.songText.visible = true;
|
||||||
funnyMenu.alpha = 1;
|
funnyMenu.alpha = 1;
|
||||||
});
|
}
|
||||||
|
|
||||||
grpCapsules.add(funnyMenu);
|
grpCapsules.add(funnyMenu);
|
||||||
|
|
||||||
|
@ -649,8 +685,8 @@ class FreeplayState extends MusicBeatSubstate
|
||||||
curSelected += change;
|
curSelected += change;
|
||||||
|
|
||||||
if (curSelected < 0)
|
if (curSelected < 0)
|
||||||
curSelected = songs.length - 1;
|
curSelected = grpCapsules.members.length - 1;
|
||||||
if (curSelected >= songs.length)
|
if (curSelected >= grpCapsules.members.length)
|
||||||
curSelected = 0;
|
curSelected = 0;
|
||||||
|
|
||||||
// selector.y = (70 * curSelected) + 30;
|
// selector.y = (70 * curSelected) + 30;
|
||||||
|
@ -684,7 +720,8 @@ class FreeplayState extends MusicBeatSubstate
|
||||||
capsule.targetPos.y -= 100; // another 100 for good measure
|
capsule.targetPos.y -= 100; // another 100 for good measure
|
||||||
}
|
}
|
||||||
|
|
||||||
grpCapsules.members[curSelected].selected = true;
|
if (grpCapsules.members.length > 0)
|
||||||
|
grpCapsules.members[curSelected].selected = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
106
source/funkin/freeplayStuff/LetterSort.hx
Normal file
106
source/funkin/freeplayStuff/LetterSort.hx
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
package funkin.freeplayStuff;
|
||||||
|
|
||||||
|
import flixel.FlxSprite;
|
||||||
|
import flixel.group.FlxGroup.FlxTypedGroup;
|
||||||
|
import flixel.group.FlxGroup;
|
||||||
|
import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup;
|
||||||
|
|
||||||
|
class LetterSort extends FlxTypedSpriteGroup<FreeplayLetter>
|
||||||
|
{
|
||||||
|
public var letters:Array<FreeplayLetter> = [];
|
||||||
|
|
||||||
|
var curSelection:Int = 0;
|
||||||
|
|
||||||
|
public var changeSelectionCallback:String->Void;
|
||||||
|
|
||||||
|
public function new(x, y)
|
||||||
|
{
|
||||||
|
super(x, y);
|
||||||
|
|
||||||
|
var leftArrow:FreeplayLetter = new FreeplayLetter(-20, 0);
|
||||||
|
leftArrow.animation.play("arrow");
|
||||||
|
add(leftArrow);
|
||||||
|
|
||||||
|
for (i in 0...6)
|
||||||
|
{
|
||||||
|
var letter:FreeplayLetter = new FreeplayLetter(i * 80, 0, i);
|
||||||
|
add(letter);
|
||||||
|
|
||||||
|
letters.push(letter);
|
||||||
|
|
||||||
|
if (i == 3)
|
||||||
|
letter.alpha = 0.6;
|
||||||
|
|
||||||
|
var sep:FreeplayLetter = new FreeplayLetter((i * 80) + 50, 0);
|
||||||
|
sep.animation.play("seperator");
|
||||||
|
add(sep);
|
||||||
|
}
|
||||||
|
|
||||||
|
// changeSelection(-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
override function update(elapsed:Float)
|
||||||
|
{
|
||||||
|
super.update(elapsed);
|
||||||
|
|
||||||
|
if (FlxG.keys.justPressed.E)
|
||||||
|
changeSelection(1);
|
||||||
|
if (FlxG.keys.justPressed.Q)
|
||||||
|
changeSelection(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function changeSelection(diff:Int = 0)
|
||||||
|
{
|
||||||
|
for (letter in letters)
|
||||||
|
letter.changeLetter(diff);
|
||||||
|
|
||||||
|
if (changeSelectionCallback != null)
|
||||||
|
changeSelectionCallback(letters[3].arr[letters[3].curLetter]); // bullshit and long lol!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class FreeplayLetter extends FlxSprite
|
||||||
|
{
|
||||||
|
public var arr:Array<String> = [];
|
||||||
|
|
||||||
|
public var curLetter:Int = 0;
|
||||||
|
|
||||||
|
public function new(x:Float, y:Float, ?letterInd:Int)
|
||||||
|
{
|
||||||
|
super(x, y);
|
||||||
|
|
||||||
|
frames = Paths.getSparrowAtlas("freeplay/letterStuff");
|
||||||
|
|
||||||
|
var alphabet:String = "abcdefghijklmnopqrstuvwxyz";
|
||||||
|
arr = alphabet.split("");
|
||||||
|
arr.insert(0, "#");
|
||||||
|
arr.insert(0, "ALL");
|
||||||
|
arr.insert(0, "fav");
|
||||||
|
|
||||||
|
for (str in arr)
|
||||||
|
{
|
||||||
|
animation.addByPrefix(str, str + " "); // string followed by a space! intentional!
|
||||||
|
}
|
||||||
|
|
||||||
|
animation.addByPrefix("arrow", "mini arrow");
|
||||||
|
animation.addByPrefix("seperator", "seperator");
|
||||||
|
|
||||||
|
if (letterInd != null)
|
||||||
|
{
|
||||||
|
animation.play(arr[letterInd]);
|
||||||
|
curLetter = letterInd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function changeLetter(diff:Int = 0)
|
||||||
|
{
|
||||||
|
curLetter += diff;
|
||||||
|
|
||||||
|
if (curLetter < 0)
|
||||||
|
curLetter = arr.length - 1;
|
||||||
|
if (curLetter >= arr.length)
|
||||||
|
curLetter = 0;
|
||||||
|
|
||||||
|
animation.play(arr[curLetter]);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue