Merge remote-tracking branch 'origin/bugfix/story-menu-background' into develop

This commit is contained in:
EliteMasterEric 2023-09-12 02:37:02 -04:00
commit 1acb048930
2 changed files with 94 additions and 34 deletions

View file

@ -102,19 +102,40 @@ class Level implements IRegistryEntry<LevelData>
return true; 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 public function buildBackground():FlxSprite
{ {
if (_data.background.startsWith('#')) if (!_data.background.startsWith('#'))
{
// Color specified
var color:FlxColor = FlxColor.fromString(_data.background);
return new FlxSprite().makeGraphic(FlxG.width, 400, color);
}
else
{ {
// Image specified // Image specified
return new FlxSprite().loadGraphic(Paths.image(_data.background)); 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> public function getDifficulties():Array<String>

View file

@ -135,10 +135,15 @@ class StoryMenuState extends MusicBeatState
this.bgColor = FlxColor.BLACK; this.bgColor = FlxColor.BLACK;
levelTitles = new FlxTypedGroup<LevelTitle>(); levelTitles = new FlxTypedGroup<LevelTitle>();
levelTitles.zIndex = 15;
add(levelTitles); add(levelTitles);
updateBackground(); 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 = new FlxTypedGroup<LevelProp>();
levelProps.zIndex = 1000; levelProps.zIndex = 1000;
add(levelProps); add(levelProps);
@ -153,17 +158,20 @@ class StoryMenuState extends MusicBeatState
scoreText = new FlxText(10, 10, 0, 'HIGH SCORE: 42069420'); scoreText = new FlxText(10, 10, 0, 'HIGH SCORE: 42069420');
scoreText.setFormat("VCR OSD Mono", 32); scoreText.setFormat("VCR OSD Mono", 32);
scoreText.zIndex = 1000;
add(scoreText); add(scoreText);
modeText = new FlxText(10, 10, 0, 'Base Game Levels [TAB to switch]'); modeText = new FlxText(10, 10, 0, 'Base Game Levels [TAB to switch]');
modeText.setFormat("VCR OSD Mono", 32); modeText.setFormat("VCR OSD Mono", 32);
modeText.screenCenter(X); modeText.screenCenter(X);
modeText.visible = hasModdedLevels(); modeText.visible = hasModdedLevels();
modeText.zIndex = 1000;
add(modeText); add(modeText);
levelTitleText = new FlxText(FlxG.width * 0.7, 10, 0, 'LEVEL 1'); levelTitleText = new FlxText(FlxG.width * 0.7, 10, 0, 'LEVEL 1');
levelTitleText.setFormat("VCR OSD Mono", 32, FlxColor.WHITE, RIGHT); levelTitleText.setFormat("VCR OSD Mono", 32, FlxColor.WHITE, RIGHT);
levelTitleText.alpha = 0.7; levelTitleText.alpha = 0.7;
levelTitleText.zIndex = 1000;
add(levelTitleText); add(levelTitleText);
buildLevelTitles(); buildLevelTitles();
@ -387,6 +395,7 @@ class StoryMenuState extends MusicBeatState
if (currentIndex < 0) currentIndex = levelList.length - 1; if (currentIndex < 0) currentIndex = levelList.length - 1;
if (currentIndex >= levelList.length) currentIndex = 0; if (currentIndex >= levelList.length) currentIndex = 0;
var previousLevelId:String = currentLevelId;
currentLevelId = levelList[currentIndex]; currentLevelId = levelList[currentIndex];
updateData(); updateData();
@ -402,18 +411,14 @@ class StoryMenuState extends MusicBeatState
currentLevelTitle = item; currentLevelTitle = item;
item.alpha = 1.0; item.alpha = 1.0;
} }
else if (index > currentIndex)
{
item.alpha = 0.6;
}
else else
{ {
item.alpha = 0.0; item.alpha = 0.6;
} }
} }
updateText(); updateText();
updateBackground(); updateBackground(previousLevelId);
updateProps(); updateProps();
refresh(); refresh();
} }
@ -536,12 +541,44 @@ class StoryMenuState extends MusicBeatState
}); });
} }
function updateBackground():Void function updateBackground(?previousLevelId:String = ''):Void
{ {
if (levelBackground != null) if (levelBackground == null || previousLevelId == '')
{ {
var oldBackground:FlxSprite = levelBackground; // 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);
if (currentLevel.isBackgroundSimple() && previousLevel.isBackgroundSimple())
{
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, FlxTween.tween(oldBackground, {alpha: 0.0}, 0.6,
{ {
ease: FlxEase.linear, ease: FlxEase.linear,
@ -549,12 +586,12 @@ class StoryMenuState extends MusicBeatState
remove(oldBackground); remove(oldBackground);
} }
}); });
}
// Build a new background and fade it in.
levelBackground = currentLevel.buildBackground(); levelBackground = currentLevel.buildBackground();
levelBackground.x = 0; levelBackground.x = 0;
levelBackground.y = 56; levelBackground.y = 56;
levelBackground.alpha = 0.0; levelBackground.alpha = 0.0; // Hidden to start.
levelBackground.zIndex = 100; levelBackground.zIndex = 100;
add(levelBackground); add(levelBackground);
@ -563,6 +600,8 @@ class StoryMenuState extends MusicBeatState
ease: FlxEase.linear ease: FlxEase.linear
}); });
} }
}
}
function updateProps():Void function updateProps():Void
{ {