public override IEnumerator Use() { effectPositions.Clear(); float timer = 0; PlayerVisuals playerVisuals = GameData.playerManager.GetComponentInChildren <PlayerVisuals>(); while (GameData.playerMovement.IsOnGround() == false) { GameData.playerMovement.Propel(Vector2.down * frappevelocity, true, true); GameData.playerMovement.inControl = false; playerVisuals.isSlaming = true; if (timer <= 0) { effectPositions.Add(GameData.playerMovement.transform.position); bullets.Add(Instantiate(bulletPrefab, GameData.playerMovement.transform.position, Quaternion.identity)); timer = timePosInstantiate; } yield return(new WaitForFixedUpdate()); timer -= Time.fixedDeltaTime; } playerVisuals.isSlaming = false; Instantiate(impactPrefab, (Vector2)GameData.playerMovement.transform.position + impactFxOffset, Quaternion.identity); for (int i = 0; i < effectPositions.Count; i++) { explosion = Instantiate(prefabexplosion, effectPositions[i], Quaternion.identity); explosion.transform.localScale = new Vector2(size, size); Destroy(bullets[i]); } bullets.Clear(); ContactFilter2D filter = new ContactFilter2D(); filter.SetLayerMask(LayerMask.GetMask("Enemy")); List <Collider2D> enemycolliders = new List <Collider2D>(); for (int i = 0; i < effectPositions.Count; i++) { Physics2D.OverlapCircle(effectPositions[i], explosionRange, filter, enemycolliders); if (enemycolliders.Count > 0) { foreach (Collider2D collider in enemycolliders) { EnemyHandler closeEnemy = collider.GetComponent <EnemyHandler>(); closeEnemy.SetEffect(Effect.Magnetism, duration, false); } } } GameData.playerMovement.inControl = true; yield return(new WaitForFixedUpdate()); yield return(new WaitForSeconds(0.2f)); }