Пример #1
0
    public IEnumerator DoFight()
    {
        // if (this.fighter.isEnemy()) {
        //     this.getEnemyAction();
        // }

        Messenger.Broadcast <FightResult>(Messages.OnFightStart, new FightResult(this.fighter, queuedAction.GetAction()));

        QueuedAction attackerAction = queuedAction;
        string       attackerName   = this.fighter.Name;

        if (attackerAction == null)
        {
            Debug.LogError("Cannot find queued action: " + attackerName);
            yield break;
        }
        ActionBase            action     = attackerAction.GetAction();
        string                attackName = action.name;
        List <FightingEntity> targets    = action.GetTargets(this.fighter, attackerAction.GetTargetIds());

        if (targets.Count == 1)
        {
            Debug.Log(this.fighter.Name + " Execute Action: " + attackName + targets[0].targetId);
        }



        List <FightingEntity> focusedFighters = new List <FightingEntity>();

        focusedFighters.Add(fighter);

        List <FightingEntity> focusedTargets = action.GetFocusedTargets(this.fighter, attackerAction.GetTargetIds());

        foreach (FightingEntity target in focusedTargets)
        {
            focusedFighters.Add(target);
        }


        List <FightingEntity> unfocusedFighters = this._field.GetAllFightingEntities().Filter(fighter => !focusedFighters.Contains(fighter));

        foreach (FightingEntity focusedFighter in focusedFighters)
        {
            this._ui.focusOverlay.AddToFocusLayer(focusedFighter.gameObject, true);
        }

        foreach (FightingEntity unfocusedFighter in unfocusedFighters)
        {
            this._ui.focusOverlay.AddToFocusLayer(unfocusedFighter.gameObject, false);
        }


        yield return(GameManager.Instance.time.GetController().StartCoroutine(action.ExecuteAction(fighter, targets, this)));
    }