Files
CodenameEngine/source/funkin/editors/charter/CharterDeleteAnim.hx
T
2024-03-22 22:26:43 -07:00

86 lines
3.0 KiB
Haxe

package funkin.editors.charter;
class CharterDeleteAnim extends CharterNote {
public var garbageIcon:FlxSprite;
public var garbageCircle:FlxSprite;
public var deleteNotes:Array<{note:CharterNote, time:Float}> = [];
public var deleteTime:Float = .4;
public function new() {
super();
sustainSpr.color = 0xFF630000; color = 0xFF605A5A;
snappedToStrumline = selectable = autoAlpha = false;
@:privateAccess __animSpeed = 1.25;
garbageIcon = new FlxSprite().loadGraphic(Paths.image("editors/deleter"));
garbageIcon.color = 0xFF880000;
garbageIcon.cameras = [Charter.instance.uiCamera];
garbageCircle = new FlxSprite().loadGraphic(Paths.image("editors/deleter circle"));
garbageCircle.color = 0xFF880000; garbageCircle.alpha = .6;
garbageCircle.cameras = [Charter.instance.uiCamera];
}
var __garbageAlpha:Float = 0;
var __deletionTimer:Float = .1;
@:noCompletion var __mousePos:FlxPoint = FlxPoint.get();
public override function update(elapsed:Float) {
for (deleteData in deleteNotes) {
deleteData.time -= elapsed;
if (deleteData.time < 0) deleteNotes.remove(deleteData);
}
if (FlxG.mouse.justPressedRight) __deletionTimer = .1;
__deletionTimer -= elapsed;
__garbageAlpha = FlxMath.lerp(__garbageAlpha, FlxG.mouse.pressedRight && __deletionTimer <= 0 ? 1 : 0, 1/10);
FlxG.mouse.getWorldPosition(Charter.instance.uiCamera, __mousePos);
if (FlxG.mouse.pressedRight && __deletionTimer <= 0) {
garbageIcon.setPosition(
__mousePos.x + garbageIcon.width/2 + (.65*FlxG.random.float(-1, 1)) + 2,
__mousePos.y - garbageIcon.height + (.65*FlxG.random.float(-1, 1)) - 8
);
garbageCircle.setPosition(
__mousePos.x - garbageCircle.width/2,
(__mousePos.y - garbageCircle.height/2) + 2
);
}
garbageIcon.alpha = __garbageAlpha;
garbageCircle.alpha = __garbageAlpha*.6;
}
public override function draw() @:privateAccess {
for (deleteData in deleteNotes) {
y = deleteData.note.y + (deleteData.time>deleteTime*.5 ? (deleteData.time/deleteTime)*FlxG.random.float(-1.1, 1.1) : 0); // lunar when no shake :((
x = deleteData.note.x + (deleteData.time>deleteTime*.5 ? (deleteData.time/deleteTime)*FlxG.random.float(-1.1, 1.1) : 0); // lunar when no shake :((
angle = deleteData.note.angle; alpha = 1;
animation.curAnim.curFrame = 3;
sustainSpr.scale.set(10, (40 * deleteData.note.susLength) + (height/2));
sustainSpr.updateHitbox(); sustainSpr.follow(this, 15, 20);
sustainSpr.exists = deleteData.note.susLength != 0; sustainSpr.alpha = .8;
typeText.text = Std.string(deleteData.note.type);
typeText.exists = deleteData.note.type != 0; typeText.alpha = .4;
typeText.follow(this, 20 - (typeText.frameWidth/2), 20 - (typeText.frameHeight/2));
for (member in [this, sustainSpr, typeText])
member.alpha *= FlxEase.quadInOut(deleteData.time/deleteTime);
super.draw();
}
if (garbageIcon.alpha > 0) garbageIcon.draw();
if (garbageCircle.alpha > 0) garbageCircle.draw();
}
public override function destroy() {
super.destroy();
__mousePos.put();
}
}