private IEnumerator AttackAnimationRoutine(ETaggingBehavior _nextTaggingState)
    {
        Debug.Log($"Attack Animation Routine: {hammerTransform}");
        hammerTransform.Rotate(new Vector3(1f, 0f, 0f), 90f);
        // hammerTransform.localPosition = transform.forward + hammerTransform.localPosition + new Vector3(0f, 0f, 1f);

        yield return(new WaitForSecondsRealtime(km_attackTime));

        hammerTransform.localPosition    = m_originalHammerLocalPosition;
        hammerTransform.localEulerAngles = m_originalHammerLocalEulerAngles;
        m_boppableInterface.TriggerEndAttackTransition();
        m_currentTaggingState = _nextTaggingState;
    }
    /// <summary>
    /// <para>Set this player as KING</para>
    /// </summary>
    public void SetAsKing()
    {
        if (GameController.instance)
        {
            if (GameController.instance.blobGotKingParticle)
            {
                Instantiate(GameController.instance.blobGotKingParticle, transform.position, Quaternion.identity).Play();
            }

            PausedMenuManager._instance?.PlaySFX(GameController.instance.blobGotKingSounds[Random.Range(0, GameController.instance.blobGotKingSounds.Length)]);
        }

        m_boppableInterface.ChangeSpeed(BaseSpeed, 0f, m_externalSpeedBoost);
        kingCrown.SetActive(true);
        m_timesAsKing++;

        m_isImmune = true;
        StartCoroutine(SpeedUpRoutine(3f));
        StartCoroutine(TurnOffImmunityRoutine(3f));

        m_currentTaggingState = ETaggingBehavior.Tagging;
    }
    private void TriggerAttackTransition(float _attackSizeMultiplier = 1.0f)
    {
        if (GameController.instance)
        {
            PausedMenuManager._instance?.PlaySFX(GameController.instance.blobAttackSounds[Random.Range(0, GameController.instance.blobAttackSounds.Length)]);
        }

        if (GameController.instance && GameController.instance.blobAttackParticle)
        {
            Instantiate(GameController.instance.blobAttackParticle, hammerBopAim.transform.position, GameController.instance.blobAttackParticle.transform.rotation).Play();
        }

        m_boppableInterface.TriggerAttackTransition();

        if (GameController.instance && GameController.instance.attackDecal)
        {
            Instantiate(GameController.instance.attackDecal, new Vector3(hammerBopAim.transform.position.x, 0.05f, hammerBopAim.transform.position.z), GameController.instance.attackDecal.transform.rotation);
        }

        ETaggingBehavior currentTaggingState = m_currentTaggingState;

        m_currentTaggingState = ETaggingBehavior.TaggingAtacking;

        Collider[] bopCollision = Physics.OverlapSphere(hammerBopAim.position, km_attackRadius * _attackSizeMultiplier, attackLayer);
        if (bopCollision.Length > 0)
        {
            for (int i = 0; i < bopCollision.Length; i++)
            {
                TaggingIdentifier playerHitted = bopCollision[i].transform.gameObject.GetComponent <TaggingIdentifier>();
                if (playerHitted != null && playerHitted.CanBeTagged && m_playerIdentifier != playerHitted.PlayerIdentifier)
                {
                    // We hit someone, so we bopped them!

                    if (GameController.instance)
                    {
                        PausedMenuManager._instance?.PlaySFX(GameController.instance.blobHitSounds[Random.Range(0, GameController.instance.blobHitSounds.Length)]);
                    }

                    m_playersBopped++;

                    if (taggingManager.WhoIsKing == playerHitted.PlayerIdentifier)
                    {
                        taggingManager.PlayerWasTagged(this, true);
                        playerHitted.SetAsNotKing();

                        // Updating tagging state because we are tag now.
                        currentTaggingState = m_currentTaggingState;
                    }
                    else
                    {
                        // Just Knockback the Player
                        // TODO Delay here is a magic number
                        // TODO knockback force is also a magic number
                        playerHitted.KnockbackPlayer(Color.magenta, (playerHitted.transform.position - transform.position).normalized * taggingManager.knockbackForce * 3f, 0.5f);
                    }

                    // We break from the loop if we are not using super slam
                    if (_attackSizeMultiplier == 1.0f)
                    {
                        break;
                    }
                }
            }
        }

        StartCoroutine(AttackAnimationRoutine(currentTaggingState));
    }
 /// <summary>
 /// <para>Set this player as NOT TAG</para>
 /// </summary>
 public void SetAsNotKing()
 {
     kingCrown.SetActive(false);
     m_boppableInterface.ChangeSpeed(BaseSpeed, 0f, m_externalSpeedBoost);
     m_currentTaggingState = ETaggingBehavior.Running;
 }