mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2025-08-30 18:34:51 +00:00
89 lines
2 KiB
Haxe
89 lines
2 KiB
Haxe
package funkin.ui;
|
|
|
|
import funkin.graphics.FlxFilteredSprite;
|
|
|
|
/**
|
|
* The icon that gets used for Freeplay capsules and char select
|
|
* NOT to be confused with the CharIcon class, which is for the in-game icons
|
|
*/
|
|
@:nullSafety
|
|
class PixelatedIcon extends FlxFilteredSprite
|
|
{
|
|
public function new(x:Float, y:Float)
|
|
{
|
|
super(x, y);
|
|
this.makeGraphic(32, 32, 0x00000000);
|
|
this.antialiasing = false;
|
|
this.active = false;
|
|
}
|
|
|
|
public function setCharacter(char:String):Void
|
|
{
|
|
var charPath:String = "freeplay/icons/";
|
|
|
|
final charIDParts:Array<String> = char.split("-");
|
|
var iconName:String = "";
|
|
var lastValidIconName:String = "";
|
|
for (i in 0...charIDParts.length)
|
|
{
|
|
iconName += charIDParts[i];
|
|
|
|
if (Assets.exists(Paths.image(charPath + '${iconName}pixel')))
|
|
{
|
|
lastValidIconName = iconName;
|
|
}
|
|
|
|
if (i < charIDParts.length - 1) iconName += '-';
|
|
}
|
|
|
|
charPath += '${lastValidIconName}pixel';
|
|
|
|
if (!Assets.exists(Paths.image(charPath)))
|
|
{
|
|
trace('[WARN] Character ${char} has no freeplay icon.');
|
|
this.visible = false;
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
this.visible = true;
|
|
}
|
|
|
|
var isAnimated = Assets.exists(Paths.file('images/$charPath.xml'));
|
|
|
|
if (isAnimated)
|
|
{
|
|
this.frames = Paths.getSparrowAtlas(charPath);
|
|
}
|
|
else
|
|
{
|
|
this.loadGraphic(Paths.image(charPath));
|
|
}
|
|
|
|
this.scale.x = this.scale.y = 2;
|
|
|
|
switch (char)
|
|
{
|
|
case 'parents-christmas':
|
|
this.origin.x = 140;
|
|
default:
|
|
this.origin.x = 100;
|
|
}
|
|
|
|
if (isAnimated)
|
|
{
|
|
this.active = true;
|
|
this.animation.addByPrefix('idle', 'idle0', 10, true);
|
|
this.animation.addByPrefix('confirm', 'confirm0', 10, false);
|
|
this.animation.addByPrefix('confirm-hold', 'confirm-hold0', 10, true);
|
|
|
|
this.animation.onFinish.add(function(name:String):Void {
|
|
trace('Finish pixel animation: ${name}');
|
|
if (name == 'confirm') this.animation.play('confirm-hold');
|
|
});
|
|
|
|
this.animation.play('idle');
|
|
}
|
|
}
|
|
}
|