private void InstanciateBlastTail(string name, Direction dirKey, Vector2 startPosition, Vector3 direction, float gridSize, float angle)
    {
        RaycastHit2D ray2D = Physics2D.Raycast(startPosition, direction, range * gridSize - 0.1f, contactLayer);
        int          grids = 0;

        if (ray2D.transform != null)
        {
            grids = Mathf.RoundToInt(ray2D.distance / gridSize);
            //Check damageable collision game object
            IDamageable damageable = ray2D.transform.GetComponent <IDamageable>();
            if (damageable != null && damageable.CanDamageIt())
            {
                damageable.Damage(strength);
            }
        }
        else
        {
            grids = range;
        }

        distance[dirKey] = grids * gridSize - 0.1f;

        //print(direction + " -> grids " + grids + ", distance: " + distances[distanceIndex]);
        int spriteRendererCount = 0;

        for (int i = 0; i < grids; i++)
        {
            GameObject go = new GameObject(name + i);
            spriteRenderers[dirKey].Add(go.AddComponent <SpriteRenderer>());
            spriteRendererCount = spriteRenderers[dirKey].Count - 1;
            spriteRenderers[dirKey][spriteRendererCount].sortingLayerID = SpriteRenderer.sortingLayerID;
            go.transform.parent   = transform;
            go.transform.position = transform.position + direction * (i + 1) * gridSize;
            spriteRenderers[dirKey][spriteRendererCount].sprite =
                ResourcesProvider.Instance.ExplosionSprites[horizontalAnimationBegin];
            go.transform.localScale    = Vector2.one;
            go.transform.localRotation = Quaternion.Euler(Vector3.forward * angle);
        }

        //troca o último Sprite para ponta da explosão caso exista
        if (grids > 0)
        {
            spriteRenderers[dirKey][spriteRendererCount].sprite =
                ResourcesProvider.Instance.ExplosionSprites[horizontalEndAnimationBegin];
        }
    }
    private void CheckBoxCollision()
    {
        BoxCollider2D box = GetComponent <BoxCollider2D>();

        RaycastHit2D[] hits = Physics2D.BoxCastAll(box.bounds.center, box.size, 0f, Vector2.zero, 0f, contactLayer);

        foreach (RaycastHit2D hit in hits)
        {
            if (hit.transform != null)
            {
                IDamageable damageable = hit.transform.GetComponent <IDamageable>();
                if (damageable != null && damageable.CanDamageIt())
                {
                    damageable.Damage(strength);
                }
            }
        }
    }