mirror of
https://github.com/FunkinCrew/Funkin.git
synced 2024-11-23 08:07:54 -05:00
Visual fixes for story menu
This commit is contained in:
parent
a4a4e705a1
commit
983466c0fe
2 changed files with 90 additions and 34 deletions
|
@ -93,19 +93,40 @@ class Level implements IRegistryEntry<LevelData>
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a sprite for the background of the level.
|
||||
* Can be overriden by ScriptedLevel. Not used if `isBackgroundSimple` returns true.
|
||||
*/
|
||||
public function buildBackground():FlxSprite
|
||||
{
|
||||
if (_data.background.startsWith('#'))
|
||||
{
|
||||
// Color specified
|
||||
var color:FlxColor = FlxColor.fromString(_data.background);
|
||||
return new FlxSprite().makeGraphic(FlxG.width, 400, color);
|
||||
}
|
||||
else
|
||||
if (!_data.background.startsWith('#'))
|
||||
{
|
||||
// Image specified
|
||||
return new FlxSprite().loadGraphic(Paths.image(_data.background));
|
||||
}
|
||||
|
||||
// Color specified
|
||||
var result:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, 400, FlxColor.WHITE);
|
||||
result.color = getBackgroundColor();
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the background is a solid color.
|
||||
* If you have a ScriptedLevel with a fancy background, you may want to override this to false.
|
||||
*/
|
||||
public function isBackgroundSimple():Bool
|
||||
{
|
||||
return _data.background.startsWith('#');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the background is a solid color.
|
||||
* If you have a ScriptedLevel with a fancy background, you may want to override this to false.
|
||||
*/
|
||||
public function getBackgroundColor():FlxColor
|
||||
{
|
||||
return FlxColor.fromString(_data.background);
|
||||
}
|
||||
|
||||
public function getDifficulties():Array<String>
|
||||
|
|
|
@ -145,6 +145,10 @@ class StoryMenuState extends MusicBeatState
|
|||
|
||||
updateBackground();
|
||||
|
||||
var black:FlxSprite = new FlxSprite(levelBackground.x, 0).makeGraphic(FlxG.width, Std.int(400 + levelBackground.y), FlxColor.BLACK);
|
||||
black.zIndex = levelBackground.zIndex - 1;
|
||||
add(black);
|
||||
|
||||
levelProps = new FlxTypedGroup<LevelProp>();
|
||||
levelProps.zIndex = 1000;
|
||||
add(levelProps);
|
||||
|
@ -378,6 +382,7 @@ class StoryMenuState extends MusicBeatState
|
|||
if (currentIndex < 0) currentIndex = levelList.length - 1;
|
||||
if (currentIndex >= levelList.length) currentIndex = 0;
|
||||
|
||||
var previousLevelId:String = currentLevelId;
|
||||
currentLevelId = levelList[currentIndex];
|
||||
|
||||
updateData();
|
||||
|
@ -393,18 +398,14 @@ class StoryMenuState extends MusicBeatState
|
|||
currentLevelTitle = item;
|
||||
item.alpha = 1.0;
|
||||
}
|
||||
else if (index > currentIndex)
|
||||
{
|
||||
item.alpha = 0.6;
|
||||
}
|
||||
else
|
||||
{
|
||||
item.alpha = 0.0;
|
||||
item.alpha = 0.6;
|
||||
}
|
||||
}
|
||||
|
||||
updateText();
|
||||
updateBackground();
|
||||
updateBackground(previousLevelId);
|
||||
updateProps();
|
||||
refresh();
|
||||
}
|
||||
|
@ -517,32 +518,66 @@ class StoryMenuState extends MusicBeatState
|
|||
});
|
||||
}
|
||||
|
||||
function updateBackground():Void
|
||||
function updateBackground(?previousLevelId:String = ''):Void
|
||||
{
|
||||
if (levelBackground != null)
|
||||
if (levelBackground == null || previousLevelId == '')
|
||||
{
|
||||
var oldBackground:FlxSprite = levelBackground;
|
||||
|
||||
FlxTween.tween(oldBackground, {alpha: 0.0}, 0.6,
|
||||
{
|
||||
ease: FlxEase.linear,
|
||||
onComplete: function(_) {
|
||||
remove(oldBackground);
|
||||
}
|
||||
});
|
||||
// Build a new background and display it immediately.
|
||||
levelBackground = currentLevel.buildBackground();
|
||||
levelBackground.x = 0;
|
||||
levelBackground.y = 56;
|
||||
levelBackground.zIndex = 100;
|
||||
levelBackground.alpha = 1.0; // Not hidden.
|
||||
add(levelBackground);
|
||||
}
|
||||
else
|
||||
{
|
||||
var previousLevel = LevelRegistry.instance.fetchEntry(previousLevelId);
|
||||
|
||||
levelBackground = currentLevel.buildBackground();
|
||||
levelBackground.x = 0;
|
||||
levelBackground.y = 56;
|
||||
levelBackground.alpha = 0.0;
|
||||
levelBackground.zIndex = 100;
|
||||
add(levelBackground);
|
||||
|
||||
FlxTween.tween(levelBackground, {alpha: 1.0}, 0.6,
|
||||
if (currentLevel.isBackgroundSimple() && previousLevel.isBackgroundSimple())
|
||||
{
|
||||
ease: FlxEase.linear
|
||||
});
|
||||
var previousColor:FlxColor = previousLevel.getBackgroundColor();
|
||||
var currentColor:FlxColor = currentLevel.getBackgroundColor();
|
||||
if (previousColor != currentColor)
|
||||
{
|
||||
// Both the previous and current level were simple backgrounds.
|
||||
// Fade between colors directly, rather than fading one background out and another in.
|
||||
FlxTween.color(levelBackground, 0.4, previousColor, currentColor);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Do no fade at all if the colors aren't different.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Either the previous or current level has a complex background.
|
||||
// We need to fade the old background out and the new one in.
|
||||
|
||||
// Reference the old background and fade it out.
|
||||
var oldBackground:FlxSprite = levelBackground;
|
||||
FlxTween.tween(oldBackground, {alpha: 0.0}, 0.6,
|
||||
{
|
||||
ease: FlxEase.linear,
|
||||
onComplete: function(_) {
|
||||
remove(oldBackground);
|
||||
}
|
||||
});
|
||||
|
||||
// Build a new background and fade it in.
|
||||
levelBackground = currentLevel.buildBackground();
|
||||
levelBackground.x = 0;
|
||||
levelBackground.y = 56;
|
||||
levelBackground.alpha = 0.0; // Hidden to start.
|
||||
levelBackground.zIndex = 100;
|
||||
add(levelBackground);
|
||||
|
||||
FlxTween.tween(levelBackground, {alpha: 1.0}, 0.6,
|
||||
{
|
||||
ease: FlxEase.linear
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateProps():Void
|
||||
|
|
Loading…
Reference in a new issue