public void ShouldBuildShrineWithUseCountFromConfiguration()
        {
            //given
            var configuration = new HealingShrinesConfiguration
            {
                UseCountRange          = Tuple.Create(1, 2),
                HealedHitpointsBetween = Tuple.Create(2, 4)
            };
            const int shrineUseCount = 2;

            A.CallTo(() => _dice.RollBetween(configuration.UseCountRange.Item1, configuration.UseCountRange.Item2)).Returns(shrineUseCount);

            var healingShrine = _shrineFactory.GetShrine(configuration);

            var toBeHealed = A.Fake <ICanHeal>();

            //when
            for (int i = 0; i < 100; i++)
            {
                healingShrine.Heal(toBeHealed);
            }

            //then
            A.CallTo(() => toBeHealed.Heal(A <int> .Ignored)).MustHaveHappened(Repeated.Exactly.Times(shrineUseCount));
        }
コード例 #2
0
        public void ShouldSpawnShrinesAccordingToMapConfigurationAtRolledPosition()
        {
            //given
            var       shrinePosition = new Position(2, 2);
            const int roomCount      = 1;

            var mapConfiguration = new MapConfiguration
            {
                RoomCountBetween       = Tuple.Create(roomCount, roomCount),
                MinRoomNeighboursCount = 1,
                MaxRoomNeighboursCount = 3,
                HealingShrines         = new HealingShrinesConfiguration
                {
                    ShrinePercentageSpawnChance = 30
                }
            };

            A.CallTo(() => _dice.RollBetween(mapConfiguration.RoomCountBetween.Item1, mapConfiguration.RoomCountBetween.Item2)).Returns(roomCount);
            A.CallTo(() => _dice.RollChance(mapConfiguration.HealingShrines.ShrinePercentageSpawnChance)).Returns(true);
            A.CallTo(() => _dice.RollPosition(A <int> .Ignored, A <int> .Ignored)).Returns(shrinePosition);

            var shrine = new HealingShrine(1, 1);

            A.CallTo(() => _healingShrineFactory.GetShrine(A <HealingShrinesConfiguration> .Ignored)).Returns(shrine);

            //when
            var map = _mapFactory.GenerateMap(mapConfiguration);

            //then
            var firstRoom = map.Rooms[0];

            Assert.That(firstRoom.Tiles[shrinePosition.X, shrinePosition.Y].Shrine, Is.EqualTo(shrine));
            Assert.That(firstRoom.Tiles[shrinePosition.X, shrinePosition.Y].HasShrine);
        }
コード例 #3
0
ファイル: MapFactory.cs プロジェクト: sheldarr/yolo-crawler
        private void SpawnShrines(IEnumerable <Room> rooms, HealingShrinesConfiguration healingShrinesConfiguration)
        {
            foreach (var room in rooms)
            {
                var shouldSpawnShrine = _dice.RollChance(healingShrinesConfiguration.ShrinePercentageSpawnChance);

                if (!shouldSpawnShrine)
                {
                    continue;
                }

                var newShrine      = _healingShrineFactory.GetShrine(healingShrinesConfiguration);
                var shrinePosition = _dice.RollPosition(room.Size.Width, room.Size.Height);

                room.BuildShrine(newShrine, shrinePosition);
            }
        }