Files
FNF-i486-Engine/source/NoteSplash.hx
JordanSantiagoYT a9671e7dab bruh
Fixed note splashes being affected by the note colors regardless of if you had the color shader turned on or not
2024-04-20 21:27:39 -04:00

121 lines
4.0 KiB
Haxe

package;
import flixel.FlxG;
import flixel.FlxSprite;
import flixel.graphics.frames.FlxAtlasFrames;
import flixel.graphics.frames.FlxFrame.FlxFrameAngle;
import flixel.math.FlxMath;
import NoteShader.ColoredNoteShader;
import flixel.util.FlxColor;
import flixel.system.FlxAssets.FlxShader;
import flixel.FlxCamera;
typedef NoteSplashConfig = {
anim:String,
minFps:Int,
maxFps:Int,
redAnim:Int,
offsets:Array<Array<Float>>
}
class NoteSplash extends FlxSprite
{
public var colorSwap:ColorSwap = null;
public var rgbShader:ColoredNoteShader = null;
private var idleAnim:String;
private var textureLoaded:String = null;
public function new(x:Float = 0, y:Float = 0, ?note:Int = 0) {
super(x, y);
var skin:String = 'noteSplashes';
if(PlayState.SONG.splashSkin != null && PlayState.SONG.splashSkin.length > 0) skin = PlayState.SONG.splashSkin;
if (ClientPrefs.splashType != 'Psych Engine') skin = 'noteSplashes-' + ClientPrefs.splashType.toLowerCase();
colorSwap = new ColorSwap();
shader = colorSwap.shader;
if (ClientPrefs.noteColorStyle == 'Normal' && ClientPrefs.enableColorShader)
{
colorSwap.hue = ClientPrefs.arrowHSV[note][0] / 360;
colorSwap.saturation = ClientPrefs.arrowHSV[note][1] / 100;
colorSwap.brightness = ClientPrefs.arrowHSV[note][2] / 100;
}
setupNoteSplash(x, y, note);
antialiasing = ClientPrefs.globalAntialiasing;
if (ClientPrefs.noteColorStyle == 'Char-Based')
{
rgbShader = new ColoredNoteShader(255, 255, 255, false);
shader = rgbShader;
}
}
var maxAnims:Int = 2;
var config:NoteSplashConfig = null;
public function setupNoteSplash(x:Float, y:Float, note:Int = 0, texture:String = null, hueColor:Float = 0, satColor:Float = 0, brtColor:Float = 0, color:FlxColor = null) {
setPosition(x - Note.swagWidth * 0.95, y - Note.swagWidth);
alpha = 0.6;
if(texture == null && ClientPrefs.splashType == 'Psych Engine') {
texture = 'noteSplashes';
if(PlayState.SONG.splashSkin != null && PlayState.SONG.splashSkin.length > 0) texture = PlayState.SONG.splashSkin;
}
if (texture == null && ClientPrefs.splashType != 'Psych Engine') texture = 'noteSplashes-' + ClientPrefs.splashType.toLowerCase();
if (!Paths.splashConfigs.exists(texture)) config = Paths.initSplashConfig(texture);
config = Paths.splashConfigs.get(texture);
if(textureLoaded != texture) {
loadAnims(texture);
}
if (ClientPrefs.enableColorShader)
{
if (ClientPrefs.noteColorStyle != 'Char-Based')
{
colorSwap.hue = hueColor;
colorSwap.saturation = satColor;
colorSwap.brightness = brtColor;
} else if (color != null && ClientPrefs.noteColorStyle == 'Char-Based') { //null check
rgbShader.enabled.value = [true];
rgbShader.setColors(color.red, color.green, color.blue);
}
}
offset.set(10, 10);
var animNum:Int = FlxG.random.int(1, Paths.splashAnimCountMap.get(texture));
var minFps:Int = 22;
var maxFps:Int = 26;
if(config != null)
{
var animID:Int = note + ((animNum - 1) * Note.colArray.length);
var offs:Array<Float> = config.offsets[FlxMath.wrap(animID, 0, config.offsets.length-1)];
offset.x += offs[0];
offset.y += offs[1];
minFps = config.minFps;
maxFps = config.maxFps;
}
var splashToPlay:Int = note;
if (ClientPrefs.noteColorStyle == 'Quant-Based' || ClientPrefs.noteColorStyle == 'Char-Based' || ClientPrefs.noteColorStyle == 'Rainbow')
{
splashToPlay = config.redAnim;
if (Math.isNaN(config.redAnim)) splashToPlay = 3; //Incase the red anim wasn't specified
}
animation.play('note' + splashToPlay + '-' + (animNum), true);
if(animation.curAnim != null)animation.curAnim.frameRate = FlxG.random.int(config.minFps, config.maxFps);
}
function loadAnims(skin:String) {
maxAnims = 0;
if (!Paths.splashSkinFramesMap.exists(skin)) Paths.initSplash(4, skin);
frames = Paths.splashSkinFramesMap.get(skin);
animation.copyFrom(Paths.splashSkinAnimsMap.get(skin));
}
override function update(elapsed:Float) {
if(animation.curAnim != null)if(animation.curAnim.finished) kill();
super.update(elapsed);
}
}