예제 #1
0
    internal IEnumerator UnitNodeActionCoroutine(Node targetNode)
    {
        if (
            targetNode.CurrentUnit &&
            SelectedUnit._standardAttack &&
            SelectedUnit._standardAttack.CanInitiateAttack &&
            targetNode.CurrentUnit._standardHealth &&
            targetNode.CurrentUnit.Side != SelectedUnit.Side &&
            SelectedUnit._standardAttack.NodeInRange(targetNode)
            )
        {
            yield return(SelectedUnit.StartCoroutine(SelectedUnit._standardAttack.AttackCoroutine(targetNode.CurrentUnit._standardHealth, StandardAttack.AttackType.Instigation)));

            if (targetNode.CurrentUnit._standardHealth.CurrentHealthPoints > 0)
            {
                if (SelectedUnit._standardAttack.TriggersRetaliation && targetNode.CurrentUnit._standardAttack.NodeInRange(SelectedUnit._standardMovement.CurrentNode))
                {
                    yield return(targetNode.CurrentUnit.StartCoroutine(targetNode.CurrentUnit._standardAttack.AttackCoroutine(SelectedUnit._standardHealth, StandardAttack.AttackType.Retaliation)));
                }
            }
        }
        else if (SelectedUnit._standardMovement && !SelectedUnit._standardMovement.CurrentConnection)
        {
            //var path = SelectedUnit._standardMovement.GetPathToNode(node);
            var path = Pathfinder.GetPathOfTypeForUnit
                       (
                SelectedUnit._standardMovement.CurrentNode,
                targetNode, Pathfinder.PathfindingType.Ground,
                SelectedUnit
                       );
            if (path != null)
            {
                SelectedUnit._standardMovement.SetPath(path);
            }
        }

        SelectedUnit.TaskInProgress = null;
    }