package; import flixel.FlxSprite; import flixel.group.FlxGroup.FlxTypedGroup; import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; import flixel.util.FlxTimer; class ComboCounter extends FlxTypedSpriteGroup { var effectStuff:FlxSprite; var wasComboSetup:Bool = false; var daCombo:Int = 0; var grpNumbers:FlxTypedGroup; var onScreenTime:Float = 0; public function new(x:Float, y:Float, daCombo:Int = 0) { super(x, y); this.daCombo = daCombo; effectStuff = new FlxSprite(0, 0); effectStuff.frames = Paths.getSparrowAtlas('noteCombo'); effectStuff.animation.addByPrefix('funny', 'NOTE COMBO animation', 24, false); effectStuff.animation.play('funny'); effectStuff.antialiasing = true; effectStuff.animation.finishCallback = function(nameThing) { kill(); }; add(effectStuff); grpNumbers = new FlxTypedGroup(); // add(grpNumbers); } public function forceFinish():Void { if (onScreenTime < 0.9) { new FlxTimer().start((Conductor.crochet / 1000) * 0.25, function(tmr) { forceFinish(); }); } else effectStuff.animation.play('funny', true, false, 18); } override function update(elapsed:Float) { onScreenTime += elapsed; if (effectStuff.animation.curAnim.curFrame == 17) effectStuff.animation.pause(); if (effectStuff.animation.curAnim.curFrame == 2 && !wasComboSetup) { setupCombo(daCombo); } if (effectStuff.animation.curAnim.curFrame == 18) { grpNumbers.forEach(function(spr:ComboNumber) { spr.animation.reset(); }); } if (effectStuff.animation.curAnim.curFrame == 20) { grpNumbers.forEach(function(spr:ComboNumber) { spr.kill(); }); } super.update(elapsed); } function setupCombo(daCombo:Int) { FlxG.sound.play(Paths.sound('comboSound')); wasComboSetup = true; var loopNum:Int = 0; while (daCombo > 0) { var comboNumber:ComboNumber = new ComboNumber(420 - (130 * loopNum), 44 * loopNum, daCombo % 10); grpNumbers.add(comboNumber); add(comboNumber); loopNum += 1; daCombo = Math.floor(daCombo / 10); } // var comboNumber:ComboNumber = new ComboNumber(420, 0, 0); // add to both, in the group just for ez organize/accessing // grpNumbers.add(comboNumber); // add(comboNumber); // var comboNumber2:ComboNumber = new ComboNumber(420 - 134, 44, 0); // grpNumbers.add(comboNumber2); // add(comboNumber2); } } class ComboNumber extends FlxSprite { public function new(x:Float, y:Float, digit:Int) { super(x - 20, y); var stringNum:String = Std.string(digit); frames = Paths.getSparrowAtlas('noteComboNumbers'); animation.addByPrefix(stringNum, stringNum, 24, false); animation.play(stringNum); antialiasing = true; updateHitbox(); } var shiftedX:Bool = false; override function update(elapsed:Float) { if (animation.curAnim.curFrame == 2 && !shiftedX) { shiftedX = true; x += 20; } super.update(elapsed); } }