mirror of
https://github.com/FunkinCrew/Funkin.git
synced 2024-11-30 11:26:53 -05:00
93 lines
3.1 KiB
Haxe
93 lines
3.1 KiB
Haxe
package funkin.play.notes;
|
|
|
|
import funkin.play.notes.NoteDirection;
|
|
import flixel.graphics.frames.FlxFramesCollection;
|
|
import flixel.FlxG;
|
|
import flixel.graphics.frames.FlxAtlasFrames;
|
|
import flixel.FlxSprite;
|
|
|
|
class NoteSplash extends FlxSprite
|
|
{
|
|
static final ALPHA:Float = 0.6;
|
|
static final FRAMERATE_DEFAULT:Int = 24;
|
|
static final FRAMERATE_VARIANCE:Int = 2;
|
|
|
|
static var frameCollection:FlxFramesCollection;
|
|
|
|
public static function preloadFrames():Void
|
|
{
|
|
frameCollection = Paths.getSparrowAtlas('noteSplashes');
|
|
frameCollection.parent.persist = true;
|
|
}
|
|
|
|
public function new()
|
|
{
|
|
super(0, 0);
|
|
|
|
setup();
|
|
|
|
this.alpha = ALPHA;
|
|
this.animation.finishCallback = this.onAnimationFinished;
|
|
}
|
|
|
|
/**
|
|
* Add ALL the animations to this sprite. We will recycle and reuse the FlxSprite multiple times.
|
|
*/
|
|
function setup():Void
|
|
{
|
|
if (frameCollection?.parent?.isDestroyed ?? false) frameCollection = null;
|
|
if (frameCollection == null) preloadFrames();
|
|
|
|
this.frames = frameCollection;
|
|
|
|
this.animation.addByPrefix('splash1Left', 'note impact 1 purple0', FRAMERATE_DEFAULT, false, false, false);
|
|
this.animation.addByPrefix('splash1Down', 'note impact 1 blue0', FRAMERATE_DEFAULT, false, false, false);
|
|
this.animation.addByPrefix('splash1Up', 'note impact 1 green0', FRAMERATE_DEFAULT, false, false, false);
|
|
this.animation.addByPrefix('splash1Right', 'note impact 1 red0', FRAMERATE_DEFAULT, false, false, false);
|
|
this.animation.addByPrefix('splash2Left', 'note impact 2 purple0', FRAMERATE_DEFAULT, false, false, false);
|
|
this.animation.addByPrefix('splash2Down', 'note impact 2 blue0', FRAMERATE_DEFAULT, false, false, false);
|
|
this.animation.addByPrefix('splash2Up', 'note impact 2 green0', FRAMERATE_DEFAULT, false, false, false);
|
|
this.animation.addByPrefix('splash2Right', 'note impact 2 red0', FRAMERATE_DEFAULT, false, false, false);
|
|
|
|
if (this.animation.getAnimationList().length < 8)
|
|
{
|
|
trace('WARNING: NoteSplash failed to initialize all animations.');
|
|
}
|
|
}
|
|
|
|
public function playAnimation(name:String, force:Bool = false, reversed:Bool = false, startFrame:Int = 0):Void
|
|
{
|
|
this.animation.play(name, force, reversed, startFrame);
|
|
}
|
|
|
|
public function play(direction:NoteDirection, variant:Int = null):Void
|
|
{
|
|
if (variant == null) variant = FlxG.random.int(1, 2);
|
|
|
|
switch (direction)
|
|
{
|
|
case NoteDirection.LEFT:
|
|
this.playAnimation('splash${variant}Left');
|
|
case NoteDirection.DOWN:
|
|
this.playAnimation('splash${variant}Down');
|
|
case NoteDirection.UP:
|
|
this.playAnimation('splash${variant}Up');
|
|
case NoteDirection.RIGHT:
|
|
this.playAnimation('splash${variant}Right');
|
|
}
|
|
|
|
if (animation.curAnim == null) return;
|
|
|
|
// Vary the speed of the animation a bit.
|
|
animation.curAnim.frameRate = FRAMERATE_DEFAULT + FlxG.random.int(-FRAMERATE_VARIANCE, FRAMERATE_VARIANCE);
|
|
|
|
// Center the animation on the note splash.
|
|
offset.set(width * 0.3, height * 0.3);
|
|
}
|
|
|
|
public function onAnimationFinished(animationName:String):Void
|
|
{
|
|
// *lightning* *zap* *crackle*
|
|
this.kill();
|
|
}
|
|
}
|