i wrote so much

This commit is contained in:
Yoshman29
2022-11-03 17:13:47 +01:00
parent 2d49ee80d7
commit ee99104ea1
5 changed files with 115 additions and 23 deletions
+1 -1
View File
@@ -1 +1 @@
1032
1041
+3 -5
View File
@@ -84,11 +84,9 @@ class Highscore
}
public static function load():Void
{
if (FlxG.save.data.songScores != null)
{
songScores = FlxG.save.data.songScores;
weekScores = FlxG.save.data.weekScores;
}
songScores = FlxG.save.data.songScores.getDefault(new Map<String, SongScore>());
weekScores = FlxG.save.data.weekScores.getDefault(new Map<String, SongScore>());
for(k=>e in songScores)
if (e is Int)
songScores.remove(k);
+90 -16
View File
@@ -1,7 +1,10 @@
package funkin.menus;
import funkin.game.Highscore;
import flixel.tweens.FlxTween;
import openfl.utils.Assets;
import flixel.FlxG;
import flixel.math.FlxMath;
import flixel.util.FlxColor;
import funkin.ui.FunkinText;
import haxe.xml.Access;
@@ -9,8 +12,6 @@ import flixel.FlxSprite;
import flixel.text.FlxText;
class StoryMenuState extends MusicBeatState {
public var weekData:Array<WeekData> = [];
public var characters:Map<String, MenuCharacter> = [];
public var weeks:Array<WeekData> = [];
@@ -26,6 +27,11 @@ class StoryMenuState extends MusicBeatState {
public var leftArrow:FlxSprite;
public var rightArrow:FlxSprite;
public var lerpScore:Float = 0;
public var intendedScore:Int = 0;
public var canSelect:Bool = true;
public override function create() {
super.create();
loadXMLs();
@@ -45,12 +51,9 @@ class StoryMenuState extends MusicBeatState {
weekBG.setGraphicSize(FlxG.width, 400);
weekBG.updateHitbox();
for(e in [scoreText, weekTitle, weekBG])
add(e);
// DUMBASS ARROWS
var assets = Paths.getSparrowAtlas('menus/storymenu/assets');
var directions = ["left", "right"];
leftArrow = new FlxSprite((FlxG.width + 400) / 2, weekBG.y + weekBG.height + 10 + 10);
@@ -65,7 +68,86 @@ class StoryMenuState extends MusicBeatState {
add(arrow);
}
rightArrow.x -= rightArrow.width;
tracklist = new FunkinText(64, weekBG.y + weekBG.height + 44, Std.int(((FlxG.width - 400) / 2) - 128), "TRACKS", 32);
tracklist.alignment = CENTER;
tracklist.color = 0xFFE55777;
for(e in [scoreText, weekTitle, weekBG, tracklist])
add(e);
for(week in weeks) {
for(e in week.difficulties) {
var le = e.toLowerCase();
if (difficultySprites[le] == null) {
var diffSprite = new FlxSprite(leftArrow.x + leftArrow.width, leftArrow.y);
diffSprite.loadAnimatedGraphic(Paths.image('menus/storymenu/difficulties/${le}'));
diffSprite.setUnstretchedGraphicSize(Std.int(rightArrow.x - leftArrow.x - leftArrow.width), Std.int(leftArrow.height), false, 1);
diffSprite.antialiasing = true;
add(diffSprite);
difficultySprites[le] = diffSprite;
}
}
}
changeWeek(0, true);
}
var __lastDifficultyTween:FlxTween;
public override function update(elapsed:Float) {
super.update(elapsed);
lerpScore = lerp(lerpScore, intendedScore, 0.5);
scoreText.text = 'WEEK SCORE:${Math.round(lerpScore)}';
if (canSelect) {
leftArrow.animation.play(controls.LEFT ? 'press' : 'idle');
rightArrow.animation.play(controls.RIGHT ? 'press' : 'idle');
if (controls.BACK)
FlxG.switchState(new MainMenuState());
changeDifficulty((controls.LEFT_P ? -1 : 0) + (controls.RIGHT_P ? 1 : 0));
changeWeek((controls.UP_P ? -1 : 0) + (controls.DOWN_P ? 1 : 0));
if (controls.ACCEPT) {
}
} else {
for(e in [leftArrow, rightArrow])
e.animation.play('idle');
}
}
var __oldDiffName = null;
public function changeDifficulty(change:Int, force:Bool = false) {
if (change == 0 && !force) return;
curDifficulty = FlxMath.wrap(curDifficulty + change, 0, weeks[curWeek].difficulties.length-1);
if (__oldDiffName != (__oldDiffName = weeks[curWeek].difficulties[curDifficulty].toLowerCase())) {
for(e in difficultySprites) e.visible = false;
var diffSprite = difficultySprites[__oldDiffName];
if (diffSprite != null) {
diffSprite.visible = true;
if (__lastDifficultyTween != null)
__lastDifficultyTween.cancel();
diffSprite.alpha = 0;
diffSprite.y = leftArrow.y - 15;
FlxTween.tween(diffSprite, {y: leftArrow.y + 15, alpha: 1}, 0.07);
}
intendedScore = Highscore.getWeekScore(weeks[curWeek].name, weeks[curWeek].difficulties[curDifficulty]).score;
}
}
public function changeWeek(change:Int, force:Bool = false) {
if (change == 0 && !force) return;
changeDifficulty(0, true);
}
public function loadXMLs() {
@@ -102,7 +184,8 @@ class StoryMenuState extends MusicBeatState {
name: week.att.name,
sprite: week.getAtt('sprite').getDefault('week${k}'),
chars: [null, null, null],
songs: []
songs: [],
difficulties: ['easy', 'normal', 'hard']
};
if (week.has.chars) {
for(k=>e in week.att.chars.split(",")) {
@@ -134,16 +217,6 @@ class StoryMenuState extends MusicBeatState {
Logs.trace('Failed to parse data/weeks.xml: $e', ERROR);
}
}
public override function update(elapsed:Float) {
super.update(elapsed);
leftArrow.animation.play(controls.LEFT ? 'press' : 'idle');
rightArrow.animation.play(controls.RIGHT ? 'press' : 'idle');
if (controls.BACK) {
FlxG.switchState(new MainMenuState());
}
}
}
typedef WeekData = {
@@ -151,6 +224,7 @@ typedef WeekData = {
var sprite:String;
var chars:Array<String>;
var songs:Array<WeekSong>;
var difficulties:Array<String>;
}
typedef WeekSong = {
+12 -1
View File
@@ -1,5 +1,6 @@
package funkin.system;
import haxe.io.Path;
import haxe.xml.Access;
import flixel.input.keyboard.FlxKey;
import lime.utils.Assets;
@@ -157,10 +158,11 @@ class CoolUtil
anim2.frames = old;
}
public static function setUnstretchedGraphicSize(sprite:FlxSprite, width:Int, height:Int, fill:Bool = true) {
public static function setUnstretchedGraphicSize(sprite:FlxSprite, width:Int, height:Int, fill:Bool = true, maxScale:Float = 0) {
sprite.setGraphicSize(width, height);
sprite.updateHitbox();
var nScale = (fill ? Math.max : Math.min)(sprite.scale.x, sprite.scale.y);
if (maxScale > 0 && nScale > maxScale) nScale = maxScale;
sprite.scale.set(nScale, nScale);
}
@@ -228,4 +230,13 @@ class CoolUtil
public static function last<T>(array:Array<T>):T {
return array[array.length-1];
}
public static function loadAnimatedGraphic(spr:FlxSprite, path:String) {
var noExt = Path.withoutExtension(path);
if (Assets.exists('$noExt.xml')) {
spr.frames = Paths.getSparrowAtlasAlt(noExt);
} else {
spr.loadGraphic(path);
}
}
}
+9
View File
@@ -155,12 +155,21 @@ class Paths
{
return FlxAtlasFrames.fromSparrow(image(key, library), file('images/$key.xml', library));
}
inline static public function getSparrowAtlasAlt(key:String)
{
return FlxAtlasFrames.fromSparrow('$key.png', '$key.xml');
}
inline static public function getPackerAtlas(key:String, ?library:String)
{
return FlxAtlasFrames.fromSpriteSheetPacker(image(key, library), file('images/$key.txt', library));
}
inline static public function getPackerAtlasAlt(key:String)
{
return FlxAtlasFrames.fromSpriteSheetPacker('$key.png', '$key.txt');
}
static public function getFolderContent(key:String, includeSource:Bool = true, addPath:Bool = false, scanSource:Bool = false):Array<String> {
// designed to work both on windows and web