Funkin/source/funkin/ui/story/LevelTitle.hx
2024-05-13 11:23:16 -07:00

90 lines
1.7 KiB
Haxe

package funkin.ui.story;
import flixel.FlxSprite;
import flixel.graphics.frames.FlxAtlasFrames;
import flixel.group.FlxSpriteGroup;
import flixel.util.FlxColor;
import funkin.util.MathUtil;
class LevelTitle extends FlxSpriteGroup
{
static final LOCK_PAD:Int = 4;
public final level:Level;
public var targetY:Float;
var title:FlxSprite;
var lock:FlxSprite;
public function new(x:Int, y:Int, level:Level)
{
super(x, y);
this.level = level;
if (this.level == null) throw "Level cannot be null!";
buildLevelTitle();
buildLevelLock();
}
override function get_width():Float
{
if (length == 0) return 0;
if (lock.visible)
{
return title.width + lock.width + LOCK_PAD;
}
else
{
return title.width;
}
}
public var isFlashing:Bool = false;
var flashTick:Float = 0;
final flashFramerate:Float = 20;
public override function update(elapsed:Float):Void
{
this.y = MathUtil.coolLerp(y, targetY, 0.17);
if (isFlashing)
{
flashTick += elapsed;
if (flashTick >= 1 / flashFramerate)
{
flashTick %= 1 / flashFramerate;
title.color = (title.color == FlxColor.WHITE) ? 0xFF33ffff : FlxColor.WHITE;
}
}
}
public function showLock():Void
{
lock.visible = true;
this.x -= (lock.width + LOCK_PAD) / 2;
}
public function hideLock():Void
{
lock.visible = false;
this.x += (lock.width + LOCK_PAD) / 2;
}
function buildLevelTitle():Void
{
title = level.buildTitleGraphic();
add(title);
}
function buildLevelLock():Void
{
lock = new FlxSprite(0, 0).loadGraphic(Paths.image('storymenu/ui/lock'));
lock.x = title.x + title.width + LOCK_PAD;
lock.visible = false;
add(lock);
}
}