// defines the damage done and does attack
    public void Attack(CharacterBattle targetCharacterBattle, Action onAttackComplete)
    {
        Vector3 slideTargetPosition = targetCharacterBattle.GetPosition() + (GetPosition() - targetCharacterBattle.GetPosition()).normalized * 10f;
        Vector3 startingPosition    = GetPosition();

        // Slide to Target
        SlideToPosition(slideTargetPosition, () => {
            // Arrived at Target, attack him
            state             = State.Busy;
            Vector3 attackDir = (targetCharacterBattle.GetPosition() - GetPosition()).normalized;
            characterBase.PlayAnimAttack(attackDir, () => {
                // Target hit
                int crit = UnityEngine.Random.Range(1, 100);
                if (crit < 95)
                {
                    int damageAmount = 1 + upgradedamagevalue;
                    targetCharacterBattle.Damage(this, damageAmount);
                }
                else
                {
                    int damageAmount = UnityEngine.Random.Range(7, 8) + upgradedamagevalue;
                    targetCharacterBattle.Damage(this, damageAmount);
                }
                //  targetCharacterBattle.Damage(this, damageAmount);
            }, () => {
                // Attack completed, slide back
                SlideToPosition(startingPosition, () => {
                    // Slide back completed, back to idle
                    state = State.Idle;
                    characterBase.PlayAnimIdle(attackDir);
                    onAttackComplete();
                });
            });
        });
    }