Exemplo n.º 1
0
    private void GenerateMonsters()
    {
        int enemies = dungeonConstants.NumberOfMonsters;

        MonsterGenerator monsterGenerator = new MonsterGenerator(dungeonConstants);

        for (int i = 0; i < enemies; i++)
        {
            MonsterHolder monsterHolder = monsterGenerator.CreateMonsters();
            monsterHolder.Deactivate();

            dungeon.AddMonster(monsterHolder);
        }
    }
Exemplo n.º 2
0
        public async Task CreateMonsters_AlwaysMaxRarityRolls_MaxHighRarityMonstersAsync()
        {
            var schemeDict = new Dictionary <string, IMonsterScheme>
            {
                { "regular", CreateMonsterScheme("regular") },
                { "rare", CreateMonsterScheme("rare") },
                { "champion", CreateMonsterScheme("champion") }
            };

            var schemeServiceMock = new Mock <ISchemeService>();

            schemeServiceMock.Setup(x => x.GetScheme <IMonsterScheme>(It.IsAny <string>()))
            .Returns <string>(sid => schemeDict[sid]);
            var schemeService = schemeServiceMock.Object;

            var dice             = new LinearDice(3121);
            var randomSourceMock = new Mock <MonsterGeneratorRandomSource>(dice).As <IMonsterGeneratorRandomSource>();

            randomSourceMock.CallBase = true;
            randomSourceMock.Setup(x => x.RollRarity()).Returns(2);
            randomSourceMock.Setup(x => x.RollRegionCount(It.IsAny <int>(), It.IsAny <int>())).Returns(20);
            var randomSource = randomSourceMock.Object;

            var actorList        = new List <IActor>();
            var actorManagerMock = new Mock <IActorManager>();

            actorManagerMock.Setup(x => x.Add(It.IsAny <IActor>())).Callback <IActor>(a => actorList.Add(a));
            actorManagerMock.SetupGet(x => x.Items).Returns(actorList);
            var actorManager = actorManagerMock.Object;

            var propContainerManagerMock = new Mock <IStaticObjectManager>();
            var propContainerManager     = propContainerManagerMock.Object;

            propContainerManagerMock.SetupGet(x => x.Items).Returns(Array.Empty <IStaticObject>());

            var taskSourceMock = new Mock <IActorTaskSource <ISectorTaskSourceContext> >();
            var taskSource     = taskSourceMock.Object;

            var monsterFactory = new MonsterPersonFactory();

            var monsterGenerator = new MonsterGenerator(schemeService,
                                                        monsterFactory,
                                                        randomSource,
                                                        taskSource);

            var map = await SquareMapFactory.CreateAsync(20).ConfigureAwait(false);

            var sectorMock = new Mock <ISector>();

            sectorMock.SetupGet(x => x.ActorManager).Returns(actorManager);
            sectorMock.SetupGet(x => x.StaticObjectManager).Returns(propContainerManager);
            sectorMock.SetupGet(x => x.Map).Returns(map);
            var sector = sectorMock.Object;

            var monsterRegions = new List <MapRegion>
            {
                new MapRegion(1, map.Nodes.ToArray())
            };

            var sectorScheme = new TestSectorSubScheme
            {
                RegularMonsterSids  = new[] { "regular" },
                RareMonsterSids     = new[] { "rare" },
                ChampionMonsterSids = new[] { "champion" }
            };

            // ACT
            monsterGenerator.CreateMonsters(sector,
                                            monsterRegions,
                                            sectorScheme);

            // ASSERT
            var championCount = actorManager.Items.Count(x => ((MonsterPerson)x.Person).Scheme.Sid == "champion");

            championCount.Should().Be(1);

            var rareCount = actorManager.Items.Count(x => ((MonsterPerson)x.Person).Scheme.Sid == "rare");

            rareCount.Should().Be(10);
        }
        public async System.Threading.Tasks.Task CreateMonsters_AlwaysMaxRarityRolls_MaxHighRarityMonstersAsync()
        {
            var schemeDict = new Dictionary <string, IMonsterScheme>
            {
                { "regular", CreateMonsterScheme("regular") },
                { "rare", CreateMonsterScheme("rare") },
                { "champion", CreateMonsterScheme("champion") }
            };

            var schemeServiceMock = new Mock <ISchemeService>();

            schemeServiceMock.Setup(x => x.GetScheme <IMonsterScheme>(It.IsAny <string>()))
            .Returns <string>(sid => schemeDict[sid]);
            var schemeService = schemeServiceMock.Object;

            var dice             = new Dice(3121);
            var randomSourceMock = new Mock <MonsterGeneratorRandomSource>(dice).As <IMonsterGeneratorRandomSource>();

            randomSourceMock.CallBase = true;
            randomSourceMock.Setup(x => x.RollRarity()).Returns(2);
            randomSourceMock.Setup(x => x.RollRegionCount(It.IsAny <int>())).Returns(20);
            var randomSource = randomSourceMock.Object;

            var actorList        = new List <IActor>();
            var actorManagerMock = new Mock <IActorManager>();

            actorManagerMock.Setup(x => x.Add(It.IsAny <IActor>())).Callback <IActor>(a => actorList.Add(a));
            actorManagerMock.SetupGet(x => x.Items).Returns(actorList);
            var actorManager = actorManagerMock.Object;

            var monsterGenerator = new MonsterGenerator(schemeService,
                                                        randomSource,
                                                        actorManager);


            var map = await SquareMapFactory.CreateAsync(20);

            var sectorMock   = new Mock <ISector>();
            var patrolRoutes = new Dictionary <IActor, IPatrolRoute>();

            sectorMock.SetupGet(x => x.PatrolRoutes).Returns(patrolRoutes);
            var sector = sectorMock.Object;

            var monsterRegions = new List <MapRegion> {
                new MapRegion(1, map.Nodes.ToArray())
            };

            var sectorScheme = new TestSectorSubScheme
            {
                RegularMonsterSids  = new[] { "regular" },
                RareMonsterSids     = new[] { "rare" },
                ChampionMonsterSids = new[] { "champion" }
            };

            // ACT
            monsterGenerator.CreateMonsters(sector,
                                            new Mock <IBotPlayer>().Object,
                                            monsterRegions,
                                            sectorScheme);



            // ASSERT
            var championCount = actorManager.Items.Count(x => ((MonsterPerson)x.Person).Scheme.Sid == "champion");

            championCount.Should().Be(1);

            var rareCount = actorManager.Items.Count(x => ((MonsterPerson)x.Person).Scheme.Sid == "rare");

            rareCount.Should().Be(10);
        }