Пример #1
0
    private ExecuteableAction RecalculateTargets(ExecuteableAction executableAction)
    {
        List <Character> newTargets = new List <Character>();

        foreach (var target in executableAction.Targets)
        {
            if (target.IsAlive)
            {
                newTargets.Add(target);
            }
            else
            {
                switch (executableAction.ActionToApply.TargetType)
                {
                case TargetType.EnemySingle:
                    newTargets.Add(CharacterManager.Instance.GetRandomAliveEnemy());
                    break;

                case TargetType.PlayersSingle:
                    newTargets.Add(CharacterManager.Instance.GetRandomAlivePlayer());
                    break;
                }
            }
        }

        if (newTargets.Count == 0)
        {
            StopAllCoroutines();
            PhaseManager.Instance.EndGame();
        }
        executableAction.Targets = newTargets;
        return(executableAction);
    }
Пример #2
0
    private IEnumerator HandleSubmittedAction(SubmittedAction submittedAction, float actionTime)
    {
        int   actionSegements = submittedAction.ExecuteableActions.Count;
        float segmentTime     = actionTime / actionSegements;

        foreach (var executableAction in submittedAction.ExecuteableActions)
        {
            ExecuteableAction recalculatedAction = RecalculateTargets(executableAction);
            ExecuteAction(recalculatedAction);
            yield return(new WaitForSeconds(segmentTime));
        }
    }
Пример #3
0
    private SubmittedAction CreateSubmittedActionForEnemy(EnemyAction enemyAction, Character enemyCharacter)
    {
        List <ExecuteableAction> executeableActions = new List <ExecuteableAction>();

        foreach (var tAction in enemyAction.TargetedActions)
        {
            ExecuteableAction executeableAction = new ExecuteableAction(enemyCharacter, tAction);
            var potentialTargets = FindPotentialActionTargets(tAction, enemyCharacter);
            var finalTargets     = SelectFinalTargets(tAction, potentialTargets, enemyCharacter);
            executeableAction.Targets = finalTargets;

            executeableActions.Add(executeableAction);
        }

        return(new SubmittedAction(enemyCharacter, executeableActions));
    }
Пример #4
0
    private void ExecuteAction(ExecuteableAction executeableAction)
    {
        int  targetNumber = executeableAction.Targets.Count;
        bool usedAttack   = false;

        foreach (var target in executeableAction.Targets)
        {
            foreach (var actionComponent in executeableAction.ActionToApply.ActionComponents)
            {
                if (actionComponent is DamageComponent)
                {
                    usedAttack = true;
                }
                actionComponent.ExecuteAction(target, executeableAction.Targeter, 1.0f / targetNumber);
            }
        }
        if (usedAttack)
        {
            executeableAction.Targeter.ResetAttackBuffModifier();
        }
    }
Пример #5
0
    private void LockInAction()
    {
        if (_currentTargetedActionIndex < _actionsToTarget.Count)
        {
            ExecuteableAction actionToLock = new ExecuteableAction(_attatchedPlayer, CurrentTargetedAction);
            switch (_currentTargetSelectionMode)
            {
            case TargetSelectionMode.Choice:
                actionToLock.Targets.Add(_potentialTargets[_currentSingleTargetIndex]);
                break;

            case TargetSelectionMode.NoChoice:
                actionToLock.Targets = _potentialTargets.ToList();
                break;
            }
            _confirmedActions.Add(actionToLock);

            //Process next targeted action or end.
            ++_currentTargetedActionIndex;
            ProcessTargetedAction();
        }
    }
Пример #6
0
    public void EndPlayersTurns()
    {
        RemovePlayerShields();

        List <Character> alivePlayers = CharacterManager.Instance.GetAlivePlayers();

        foreach (var player in alivePlayers)
        {
            if (_submittedPlayerActions.FirstOrDefault(x => x.TargetingCharacter == player) == null)
            {
                ExecuteableAction executeableAction = new ExecuteableAction(player, _defaultAction.TargetedActions[0]);
                executeableAction.Targets.Add(CharacterManager.Instance.GetRandomAliveEnemy());

                List <ExecuteableAction> defaultActions = new List <ExecuteableAction> {
                    executeableAction
                };

                SubmittedAction submittedAction = new SubmittedAction(player, defaultActions);
                _submittedPlayerActions.Add(submittedAction);
            }
        }

        _actionSequence = StartCoroutine(ProcessSubmittedTurns(_submittedPlayerActions, false));
    }