Merge pull request #888 from FunkinCrew/spirit-fix

fix: spirit trail fix
This commit is contained in:
Eric
2025-03-10 18:21:56 -04:00
committed by GitHub
+28 -13
View File
@@ -4,6 +4,7 @@ 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
@@ -14,27 +15,41 @@ 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.
* @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)
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);
super(target, graphic, length, delay, alpha, diff);
}
override public function update(elapsed:Float):Void
/**
* 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 effectOffset.set((targ.animOffsets[0] - targ.globalOffsets[0]) * targ.scale.x,
(targ.animOffsets[1] - targ.globalOffsets[1]) * targ.scale.y);
}
@:privateAccess
frameOffset.set((targ.animOffsets[0] - targ.globalOffsets[0]) * targ.scale.x, (targ.animOffsets[1] - targ.globalOffsets[1]) * targ.scale.y);
super.update(elapsed);
_recentPositions[0]?.subtract(frameOffset.x, frameOffset.y);
}
}
}