mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2025-08-30 18:34:51 +00:00
57 lines
1.7 KiB
Haxe
57 lines
1.7 KiB
Haxe
package funkin.effects;
|
|
|
|
import flixel.addons.effects.FlxTrail;
|
|
import funkin.play.stage.Bopper;
|
|
import flixel.FlxSprite;
|
|
import flixel.system.FlxAssets.FlxGraphicAsset;
|
|
import flixel.math.FlxPoint;
|
|
|
|
/**
|
|
* An offshoot of FlxTrail, but accomodates the way Funkin
|
|
* does offsets for characters. example, fixes Spirits trail
|
|
*/
|
|
@:nullSafety
|
|
class FunkTrail extends FlxTrail
|
|
{
|
|
/**
|
|
* Creates a new FunkTrail effect for a specific FlxSprite.
|
|
*
|
|
* @param target The FlxSprite the trail is attached to.
|
|
* @param graphic The image to use for the trailsprites. Optional, uses the sprite's graphic if null.
|
|
* @param length The amount of trailsprites to create.
|
|
* @param delay How often to update the trail. 0 updates every frame.
|
|
* @param alpha The alpha value for the very first trailsprite.
|
|
* @param diff How much lower the alpha of the next trailsprite is.
|
|
*/
|
|
public function new(target:FlxSprite, ?graphic:FlxGraphicAsset, length:Int = 10, delay:Int = 3, alpha:Float = 0.4, diff:Float = 0.05)
|
|
{
|
|
super(target, graphic, length, delay, alpha, diff);
|
|
}
|
|
|
|
/**
|
|
* An offset applied to the target position whenever a new frame is saved.
|
|
*/
|
|
public final frameOffset:FlxPoint = FlxPoint.get();
|
|
|
|
override function destroy():Void
|
|
{
|
|
super.destroy();
|
|
|
|
frameOffset.put();
|
|
}
|
|
|
|
override function addTrailFrame():Void
|
|
{
|
|
super.addTrailFrame();
|
|
|
|
if (target is Bopper)
|
|
{
|
|
var targ:Bopper = cast target;
|
|
@:privateAccess
|
|
frameOffset.set((targ.animOffsets[0] - targ.globalOffsets[0]) * targ.scale.x, (targ.animOffsets[1] - targ.globalOffsets[1]) * targ.scale.y);
|
|
|
|
_recentPositions[0]?.subtract(frameOffset.x, frameOffset.y);
|
|
}
|
|
}
|
|
}
|