Exemplo n.º 1
0
    }                                                        //int is for a random number that breaks speed ties

    public void CalculateTurnOrder()
    {
        if (TurnOrder == null)
        {
            var activeMonsters = PlayerMonsters.Union(EnemyMonsters).ToList();
            var randomNumbers  = new List <int>();

            foreach (var unused in activeMonsters)
            {
                var newRandom = UnityEngine.Random.Range(0, 1000);
                while (randomNumbers.Contains(newRandom))
                {
                    newRandom = UnityEngine.Random.Range(0, 1000);
                }
                randomNumbers.Add(newRandom);
            }

            using (var randomEnumerator = randomNumbers.GetEnumerator())
            {
                TurnOrder = activeMonsters.Select(monster =>
                {
                    randomEnumerator.MoveNext();
                    return(new Tuple <Monster, int>(monster, randomEnumerator.Current));
                }).ToList();
            }
        }

        TurnOrder.RemoveAll(monster => !PlayerMonsters.Contains(monster.Item1) && !EnemyMonsters.Contains(monster.Item1));
        TurnOrder = TurnOrder.OrderByDescending(monster => monster.Item1.MonsterData.SpeedScaling)
                    .ThenBy(monster => monster.Item2).ToList();
    }
Exemplo n.º 2
0
    private void GetNextTurn()
    {
        var nextTurnIndex = CurrentMonsterTurn != null?TurnOrder.FindIndex(monster => monster.Item1 == CurrentMonsterTurn.Item2) + 1 : 0;

        var nextMonster = TurnOrder[nextTurnIndex == TurnOrder.Count ? 0 : nextTurnIndex].Item1;

        CurrentMonsterTurn = new Tuple <Trainer, Monster>(
            PlayerMonsters.Contains(nextMonster) ? Player : Enemy, nextMonster);
    }
Exemplo n.º 3
0
    public void InitializeBattle(Trainer player, Trainer enemy)
    {
        _battleRoot?.SetActive(true);
        _fieldRoot?.SetActive(false);

        for (var i = 0; i < player.Team.ActiveMonsters.Count; i++)
        {
            player.Team.ActiveMonsters[i].transform.SetParent(_monsterPlacement[i].transform, false);
            player.Team.ActiveMonsters[i].gameObject.SetActive(true);
            PlayerMonsters.Add(player.Team.ActiveMonsters[i]);
        }

        for (var i = 0; i < enemy.Team.ActiveMonsters.Count; i++)
        {
            enemy.Team.ActiveMonsters[i].transform.SetParent(_monsterPlacement[i + 2].transform, false);
            enemy.Team.ActiveMonsters[i].gameObject.SetActive(true);
            EnemyMonsters.Add(enemy.Team.ActiveMonsters[i]);
        }

        CalculateTurnOrder();
        BattleDisplay.Instance.Initialize();
    }