async Task BattlerTurn(Battler battler) { try { await battler.TurnStart(); var turn = await battler.GetTurn(); await QueueActionAndAwait(() => battleCanvas.UnbindActionArrow()); if (turn != null && turn.Skill != null) { var usedSkill = turn.Skill; var targets = turn.Targets; GameController.Instance.QueueAction(() => Debug.Log($"Skill: {usedSkill.SkillName}, Targets: {String.Join(", ", turn.Targets.Select(target => $"{target.BattlerName}"))}")); await battler.ExecuteTurn(turn); var effectResults = await Task.WhenAll(targets.EachDo((target) => target.ReceiveSkill(battler, usedSkill))); var concatResults = effectResults.SelectMany(x => x); await battler.AfterSkill( concatResults); } await battler.TurnEnd(); } catch (Exception e) { Debug.LogException(e); } }