public override void OnEndDrag()
    {
        var target        = GetSelectedGameObject((tag) => (tag.IsPlayer() || tag.IsCreature()) && tag.IsEnemy(this.gameObject));
        var owner         = tag.GetOwnerFromTag();
        var targetIsValid = TargetingOptions.EnemyCharacters.IsTargetValid(owner, target);

        if (targetIsValid)
        {
            targetIsValid = AttackTarget(target);
        }

        if (!targetIsValid)
        {
            whereIsThisCreature.VisualState = tag.IsFromLow() ? VisualStates.LowTable : VisualStates.TopTable;
            whereIsThisCreature.BringToCreaturesTable();
        }

        base.OnEndDrag();
    }
    public void AttackTarget(int targetUniqueID, int damageTakenByTarget, int damageTakenByAttacker, int attackerHealthAfter, int targetHealthAfter)
    {
        Debug.Log(targetUniqueID);
        manager.CanAttackNow = false;
        GameObject target = IDHolder.GetGameObjectWithID(targetUniqueID);

        w.BringToFront();
        VisualStates tempState = w.VisualState;

        w.VisualState = VisualStates.Transition;

        transform.DOMove(target.transform.position, 0.5f).SetLoops(2, LoopType.Yoyo).SetEase(Ease.InCubic).OnComplete(() =>
        {
            if (damageTakenByTarget > 0)
            {
                DamageEffect.CreateDamageEffect(target.transform.position, damageTakenByTarget);
            }
            if (damageTakenByAttacker > 0)
            {
                DamageEffect.CreateDamageEffect(transform.position, damageTakenByAttacker);
            }

            if (targetUniqueID == GlobalSettings.Instance.LowPlayer.PlayerID || targetUniqueID == GlobalSettings.Instance.TopPlayer.PlayerID)
            {
                target.GetComponentInChildren <PlayerPortraitVisual>().SetHealth(targetHealthAfter);
            }
            else
            {
                target.GetComponentInChildren <CreatureVisual>().SetCreatureLife(targetHealthAfter);
            }

            w.BringToCreaturesTable();
            w.VisualState = tempState;

            manager.creatureVisual.HealthText.text = attackerHealthAfter.ToString();
            Sequence s = DOTween.Sequence();
            s.AppendInterval(1f);
            s.OnComplete(Command.CommandExecutionComplete);
        });
    }