1
0
Fork 0
mirror of https://github.com/ninjamuffin99/Funkin.git synced 2025-08-30 18:34:51 +00:00
Funkin/source/funkin/effects/FunkTrail.hx
2025-04-18 19:35:24 -04:00

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);
}
}
}