public override void Fire(Vector3 direction)
    {
        base.Fire(direction);
        HitLayerMask = TeamInfo.Invert(HitLayerMask);

        float range = Life * Speed;
        var   hits  = Physics.RaycastAll(transform.position, direction, range, HitLayerMask | TerrainLayerMask);
        bool  any   = false;

        foreach (var hit in hits)
        {
            if (IsValidTarget(hit, out Health health))
            {
                health.Heal(Damage);
                Hit(hit.point, hit.normal);
                Renderer.SetPositions(transform.position, hit.point);
                any = true;
                break;
            }
        }
        if (!any)
        {
            Renderer.SetPositions(transform.position, transform.position + direction * range);
        }
    }