/// <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(); }