/// <summary>
        /// With this action contestant will attack with skill
        /// </summary>
        private IEnumerator PerformContestantSkillAction(HumanoidContestant contestant)
        {
            List <Skill> skills      = GetContestantUsableSkills(contestant);
            Skill        randomSkill = skills[Random.Range(0, skills.Count)];

            contestant.portrait.HighlightPortrait();
            contestant.portrait.HighlightSkill(randomSkill, true);

            List <ContestantBody> targets = FindContestantTargets(contestant, contestant.Weapon, randomSkill);

            if (targets.Count == 0)
            {
                // Action cannot be performed
                contestant.portrait.HighlightSkill(randomSkill, false);
                contestant.portrait.UnhighlightPortrait();
                yield break;
            }

            contestant.ModifyActionPoints(-randomSkill.actionPointCost);
            randomSkill.ActivateCoolDown();
            contestant.portrait.Refresh();
            float incomingDamage = contestant.Weapon.attackDamage + Mathf.Abs(randomSkill.healthModifier);

            var animation = contestant.body.PlayWeaponAnimation();

            while (animation.IsPlaying)
            {
                ArenaGrid.Instance.ShowTargetZone(contestant, Color.yellow, randomSkill);

                if (animation.DequeueEvent("impact"))
                {
                    // Hit our targets
                    foreach (var target in targets)
                    {
                        if (target == null || target.GetContestant().isDead)
                        {
                            continue; // skip if for some reason the target is dead or destroyed
                        }
                        HitData hit = new HitData();
                        hit.agressor       = contestant.body;
                        hit.incomingDamage = incomingDamage;
                        hit.destination    = target.GetHitLocation();
                        hit.hitTarget      = target;
                        hit.projectile     = null;
                        hit.skill          = randomSkill;
                        hit.sourceWeapon   = contestant.Weapon;

                        // Kinda send Hit event
                        target.OnHit(hit);
                    }
                }
                // Handle ranged weapons
                else if (animation.DequeueEvent("launch"))
                {
                    foreach (var target in targets)
                    {
                        Projectile projectile = contestant.body.SpawnWeaponProjectile();

                        HitData projectileInstruction = new HitData();
                        projectileInstruction.agressor       = contestant.body;
                        projectileInstruction.incomingDamage = incomingDamage;
                        projectileInstruction.destination    = target.GetHitLocation();
                        projectileInstruction.hitTarget      = target;
                        projectileInstruction.projectile     = projectile;
                        projectileInstruction.skill          = randomSkill;
                        projectileInstruction.sourceWeapon   = contestant.Weapon;

                        projectile.Launch(projectileInstruction);
                    }
                }

                yield return(null);
            }

            ArenaGrid.Instance.ResetGridCellsAppearance();
            //UI.UIMatchManager.Instance.RefreshContestantPortraits();
            contestant.portrait.HighlightSkill(randomSkill, false);
            contestant.portrait.UnhighlightPortrait();
        }