protected virtual void Attack(IDamageableEntity entity, float distance, int layerMask)
        {
            Transform damageTransform   = PlayerCharacterEntity.GetWeaponDamageInfo(ref isLeftHandAttacking).GetDamageTransform(PlayerCharacterEntity, isLeftHandAttacking);
            Vector3   measuringPosition = damageTransform.position;
            Vector3   targetPosition    = entity.OpponentAimTransform.position;

            if (OverlappedEntity(entity.Entity, measuringPosition, targetPosition, distance))
            {
                // Turn character to attacking target
                TurnCharacterToEntity(entity.Entity);
                // Do action
                RequestAttack();
                // This function may be used by extending classes
                OnAttackOnEntity();
            }
        }