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