private bool HitSomething()
    {
        RaycastHit2D[] hits = Physics2D.BoxCastAll(gameObject.transform.position,
                                                   new Vector2(m_MeleeRange, m_MeleeRange), 0f,
                                                   m_PlayerController.m_LookingDirection, m_MeleeRange / 2,
                                                   LayerMask.GetMask("Enemy", "MonsterThrowable"));

        ArrayList uniqueEnemies = FilterDuplicateColliders(hits);

        foreach (GameObject enemy in uniqueEnemies)
        {
            if (enemy.tag == "Enemy")
            {
                NPCControllerAbstract npcController = enemy.GetComponentInParent <NPCControllerAbstract>();
                npcController.Attacked(m_MeleeStrength, m_PlayerManager);
                npcController.m_PlayerManager = m_PlayerManager;
            }
            else if (enemy.tag == "MonsterThrowable")
            {
                MonsterThrowableController throwableController = enemy.GetComponent <MonsterThrowableController>();
                throwableController.OnMeleeHit();
                throwableController.m_PlayerManager = m_PlayerManager;
                m_PlayerManager.m_PlayerFXManager.OnThrowableHitSoundFX();
            }
        }
        if (uniqueEnemies.Count > 0)
        {
            return(true);
        }
        else
        {
            return(false);
        }
    }
    private IEnumerator Throw()
    {
        if (!throwing)
        {
            throwing = true;
            yield return(new WaitForSeconds(1f)); // give the player 1 second to prepare

            while (m_LockedOnPlayer && isAlive)
            {
                while (m_PlayerManager.m_IsImmune)
                {
                    yield return(new WaitForEndOfFrame());
                }
                GameObject throwableInstance = Instantiate(m_ThrowablePrefab,
                                                           m_SpawnThrowableLocation.transform.position,
                                                           Quaternion.identity);
                MonsterThrowableController throwableController =
                    throwableInstance.GetComponent <MonsterThrowableController>();
                throwableController.SetDirection(new Vector2(m_LookingDirection.x, 0));
                yield return(new WaitForSeconds(m_FireDelay));
            }
            throwing = false;
        }
    }