package funkin.graphics.framebuffer; import flixel.FlxCamera; import flixel.FlxSprite; import flixel.util.FlxColor; /** * A copy of a `FlxSprite` with a specified color. Used to render the sprite to a frame buffer. */ class SpriteCopy { final sprite:FlxSprite; final color:Null; public function new(sprite:FlxSprite, color:Null) { this.sprite = sprite; this.color = color; } /** * Renders the copy to the camera. * @param camera the camera */ @:access(flixel.FlxSprite) public function render(camera:FlxCamera):Void { if (color == null) { final tmpCameras = sprite._cameras; sprite._cameras = [camera]; sprite.draw(); sprite._cameras = tmpCameras; } else { final rMult = sprite.colorTransform.redMultiplier; final gMult = sprite.colorTransform.greenMultiplier; final bMult = sprite.colorTransform.blueMultiplier; final aMult = sprite.colorTransform.alphaMultiplier; final rOff = Std.int(sprite.colorTransform.redOffset); final gOff = Std.int(sprite.colorTransform.greenOffset); final bOff = Std.int(sprite.colorTransform.blueOffset); final aOff = Std.int(sprite.colorTransform.alphaOffset); final tmpCameras = sprite._cameras; final tmpShader = sprite.shader; sprite._cameras = [camera]; sprite.shader = null; sprite.setColorTransform(0, 0, 0, 1, color.red, color.green, color.blue, 0); sprite.draw(); sprite._cameras = tmpCameras; sprite.shader = tmpShader; sprite.setColorTransform(rMult, gMult, bMult, aMult, rOff, gOff, bOff, aOff); } } }