Exemple #1
0
            public IEnumerator ScriptedMatchTest()
            {
                yield return(TestUtils.WaitUntilSceneIsLoaded("MatchTestScene"));

                var gameController = MonoBehaviour.FindObjectOfType <GameController>();
                var matchManager   = MonoBehaviour.FindObjectOfType <MatchManager>();

                var iterations = 100;

                while (iterations-- > 0)
                {
                    var settings = ScriptableObject.CreateInstance <MatchSettings>();
                    settings.MapSize       = new Vector2Int(10, 10);
                    settings.PlayerConfigs = new List <MatchSettings.FactionConfig>();

                    var player0 = new MatchSettings.FactionConfig()
                    {
                        PlayerType = PlayerType.Scripted,
                        Units      = new List <MatchSettings.UnitConfig>()
                    };

                    player0.Units.Add(new MatchSettings.UnitConfig()
                    {
                        SpawnPosition = new Vector2Int(0, 0),
                        UnitType      = Random.Range(0, 3)
                    });

                    var player1 = new MatchSettings.FactionConfig()
                    {
                        PlayerType = PlayerType.Scripted,
                        Units      = new List <MatchSettings.UnitConfig>()
                    };

                    player1.Units.Add(new MatchSettings.UnitConfig()
                    {
                        SpawnPosition = new Vector2Int(0, 1),
                        UnitType      = Random.Range(0, 3)
                    });

                    settings.PlayerConfigs.Add(player0);
                    settings.PlayerConfigs.Add(player1);

                    gameController.InitMatch(settings);
                    Assert.IsTrue(gameController.ScriptedPlayerControllers != null);
                    Assert.IsTrue(gameController.ScriptedPlayerControllers.Count == 2);
                    var player0ctrl = gameController.ScriptedPlayerControllers[0];
                    var player1ctrl = gameController.ScriptedPlayerControllers[1];
                    var player0unit = player0ctrl.FactionManager.Units[0];
                    var player1unit = player1ctrl.FactionManager.Units[0];
                    player0ctrl.EnqueueAttackDecision(player0unit, player1unit);
                    Assert.IsTrue(gameController.CurrentTurn == 0);
                    yield return(gameController.MatchStep());

                    Assert.IsTrue(gameController.CurrentTurn == 1);
                    var expectedHP = Mathf.Max(0, player1unit.TotalHP - player0unit.AttackPower);
                    if (expectedHP == 0)
                    {
                        Assert.IsTrue(matchManager.Factions[1].Units.Count == 0);
                    }
                    if (!gameController.GameFinished())
                    {
                        var unit1moves       = Mathf.Min(player1unit.AvailableMoves, settings.MapSize.x - 1);
                        var unit1expectedpos = new Vector2Int(0, unit1moves);
                        player1ctrl.EnqueueMoveDecision(player1unit, unit1expectedpos);
                        yield return(gameController.MatchStep());

                        Assert.IsTrue(gameController.CurrentTurn == 0);
                        if (player1unit.CellPosition != unit1expectedpos)
                        {
                            player1ctrl.EnqueueMoveDecision(player1unit, unit1expectedpos);
                            yield return(gameController.MatchStep());
                        }
                        Assert.IsTrue(player1unit.CellPosition == unit1expectedpos);
                    }
                }
            }
Exemple #2
0
            public IEnumerator MatchManagerTest()
            {
                yield return(TestUtils.WaitUntilSceneIsLoaded("MatchTestScene"));

                var matchManager = MonoBehaviour.FindObjectOfType <MatchManager>();

                int iterations = 1000;

                while (--iterations > 0)
                {
                    var width     = Random.Range(20, 40);
                    var height    = Random.Range(20, 40);
                    var freeSlots = width * height / 2;
                    var settings  = ScriptableObject.CreateInstance <MatchSettings>();
                    settings.MapSize = new Vector2Int(width, height);
                    var spawnPos          = new Vector2Int(0, 0);
                    var playerUnitsNumber = new int[3];
                    void advanceSpawnPos()
                    {
                        if (spawnPos.y == height - 1)
                        {
                            spawnPos.Set(0, spawnPos.y + 1);
                        }
                        else
                        {
                            spawnPos.x += 1;
                        }
                    }

                    for (int i = 0; i < 3; i++)
                    {
                        var playerConfig = new MatchSettings.FactionConfig();
                        playerConfig.PlayerType = i == 0 ? PlayerType.Human : PlayerType.Bot;
                        playerConfig.Units      = new List <MatchSettings.UnitConfig>();
                        var playerUnits = Random.Range(1, freeSlots / 4);
                        playerUnitsNumber[i] = playerUnits;
                        freeSlots           -= playerUnits;
                        while (playerUnits-- > 0)
                        {
                            playerConfig.Units.Add(new MatchSettings.UnitConfig()
                            {
                                SpawnPosition = spawnPos,
                                UnitType      = Random.Range(0, 3)
                            });
                            advanceSpawnPos();
                        }
                        settings.PlayerConfigs.Add(playerConfig);
                    }

                    matchManager.CreateMatch(settings);
                    Assert.IsTrue(matchManager.Factions.Count == 3);
                    for (int i = 0; i < 3; i++)
                    {
                        var realCount = 0;
                        foreach (var unit in matchManager.EnemyUnits(matchManager.Factions[i].Units[0]))
                        {
                            realCount++;
                        }

                        var expectedCount = 0;
                        for (int j = 0; j < 3; j++)
                        {
                            if (j != i)
                            {
                                expectedCount += playerUnitsNumber[j];
                            }
                        }

                        Assert.IsTrue(realCount == expectedCount);
                    }
                }
            }