示例#1
0
 public SettlementGeneratorViewModel(StorageHelper storage)
 {
     storageHelper = storage;
     generator     = storage.GetSettlementGenerator();
     Sizes         = new ObservableCollection <string>(generator.GetPossibleSettlementTypes());
     Cities        = new ObservableCollection <string>(generator.GetPossibleCities());
 }
 void Start()
 {
     //Adds 'question_api' to the end of whatever the current URL is
     questionUrl = URLHelper.GetCurrentURL();
     StartCoroutine(WaitForContentJSON(questionUrl + questionEndPoint));
     settlementGenerator = GetComponent <SettlementGenerator> ();
 }
示例#3
0
    private Thread InitSettlementGeneratorThread(Kingdom k, SettlementGenerator s)
    {
        Thread thread = new Thread(() => InnerSettlementGenThread(k, s));

        thread.Start();
        return(thread);
    }
示例#4
0
        public void GenerateSettlement_InvalidCode_Throws()
        {
            var mockRng               = RandomizationHelper.CreateMockRandomNumberGenerator();
            var mockRepo              = new Mock <ISettlementRepository>();
            var generator             = new SettlementGenerator(mockRepo.Object, mockRng.Object);
            var mockBuildingGenerator = new Mock <IBuildingNameGenerator>();

            Assert.ThrowsAsync <ArgumentException>(() => generator.GenerateSettlement(_fixture.Create <string>(), mockBuildingGenerator.Object));
        }
示例#5
0
 public SettlementGeneratorViewModel(StorageHelper storage)
 {
     storageHelper = storage;
     generator     = storage.GetSettlementGenerator();
     Sizes         = new ObservableCollection <string>(generator.GetPossibleSettlementTypes());
     Sizes.Insert(0, "Random");
     SelectedSize = Sizes[0];
     Cities       = new ObservableCollection <string>(generator.GetPossibleCities());
     name         = "Settlement Generator";
 }
示例#6
0
        public async Task GenerateSettlement_ValidCode_GeneratesSettlement()
        {
            var mockRng = RandomizationHelper.CreateMockRandomNumberGenerator();

            var mockRepo   = new Mock <ISettlementRepository>();
            var settlement = _fixture.Create <SettlementTypeDetails>();

            mockRepo.Setup(x => x.GetSettlement(settlement.Code)).ReturnsAsync(settlement);

            var buildingTypes = _fixture.CreateMany <BuildingTypeModel>(settlement.Buildings.Count()).ToArray();

            for (int i = 0; i < settlement.Buildings.Count(); i++)
            {
                settlement.Buildings[i].BuildingTypeId = i + 10;
                buildingTypes[i].Id = i + 10;
            }

            var mockBuildingGenerator = new Mock <IBuildingNameGenerator>();

            mockBuildingGenerator.Setup(x => x.ListBuildingTypes()).ReturnsAsync(buildingTypes);

            mockBuildingGenerator.Setup(x => x.GenerateBuildingName(It.IsAny <string>()))
            .Returns <string>((code) => Task.Run(() =>
                                                 _fixture.Build <BuildingNameResultModel>()
                                                 .With(x => x.BuildingTypeCode, code)
                                                 .Create()));

            var generator = new SettlementGenerator(mockRepo.Object, mockRng.Object);
            var result    = await generator.GenerateSettlement(settlement.Code, mockBuildingGenerator.Object);

            // Assert general result
            Assert.NotNull(result);
            Assert.AreEqual(settlement.Code, result.Code);
            Assert.AreEqual(settlement.Id, result.Id);
            Assert.AreEqual(settlement.Name, result.Name);
            mockRng.Verify(x => x.GetRandomInteger(settlement.MinSize, settlement.MaxSize), Times.AtLeastOnce);
            Assert.GreaterOrEqual(result.Population, Math.Min(settlement.MinSize, settlement.MaxSize));
            Assert.LessOrEqual(result.Population, Math.Max(settlement.MinSize, settlement.MaxSize));
            Assert.AreEqual(settlement.Buildings.Count(), result.Buildings.Count());

            // Assert buildings created
            foreach (var settlmentBuilding in settlement.Buildings)
            {
                var resultBuilding = result.Buildings.First(x => x.Key.Id == settlmentBuilding.BuildingTypeId);
                Assert.AreEqual(settlmentBuilding.MinBuildings, resultBuilding.Value.Count());

                var expectedBuildingType = buildingTypes.First(x => x.Id == settlmentBuilding.BuildingTypeId);
                Assert.AreEqual(expectedBuildingType.Code, resultBuilding.Key.Code);

                mockRng.Verify(x => x.GetRandomInteger(settlmentBuilding.MinBuildings, settlmentBuilding.MaxBuildings), Times.AtLeastOnce);
                Assert.GreaterOrEqual(resultBuilding.Value.Count, Math.Min(settlmentBuilding.MinBuildings, settlmentBuilding.MaxBuildings));
                Assert.LessOrEqual(resultBuilding.Value.Count, Math.Max(settlmentBuilding.MinBuildings, settlmentBuilding.MaxBuildings));
            }
        }
示例#7
0
        public async Task ListSettlementTypes_EmptyList_ReturnsEmptyArray()
        {
            var mockRng  = RandomizationHelper.CreateMockRandomNumberGenerator();
            var mockRepo = new Mock <ISettlementRepository>();

            var generator = new SettlementGenerator(mockRepo.Object, mockRng.Object);
            var result    = await generator.ListSettlementTypes();

            mockRepo.Verify(x => x.ListSettlementTypes(), Times.Once);
            mockRepo.VerifyNoOtherCalls();
            Assert.NotNull(result);
            Assert.AreEqual(0, result.Count());
        }
示例#8
0
    private void InnerSettlementGenThread(Kingdom k, SettlementGenerator g)
    {
        Dictionary <Settlement, Dictionary <Vec2i, ChunkData> > dc = g.GenerateAllSettlements();

        lock (ThreadComplete)
        {
            ThreadComplete.Add(dc);
        }
        foreach (KeyValuePair <Settlement, Dictionary <Vec2i, ChunkData> > kpv in dc)
        {
            k.AddSettlement(kpv.Key);
            //kpv.Key.SetKingdomID(k.KingdomID);
        }
    }
示例#9
0
        public SettlementGenerator GetSettlementGenerator()
        {
            if (sGenerator == null || isDataDirty["settlement"])
            {
                var npc         = GetNPCGenerator();
                var cities      = Deserialize <CityData>(DataFile.City);
                var items       = Deserialize <ItemData>(DataFile.ItemRank);
                var settlements = Deserialize <SettlementData>(DataFile.SettlementType);
                var roles       = Deserialize <SettlementRole>(DataFile.SettlementRole);
                sGenerator = new SettlementGenerator(cities, items, settlements, roles, npc);
                isDataDirty["settlement"] = false;
            }

            return(sGenerator);
        }
示例#10
0
        public async Task ListSettlementTypes_GivenData_ReturnsArray()
        {
            var mockRng = RandomizationHelper.CreateMockRandomNumberGenerator();

            var mockRepo        = new Mock <ISettlementRepository>();
            var testSettlements = _fixture.CreateMany <SettlementTypeModel>().ToArray();

            mockRepo.Setup(x => x.ListSettlementTypes()).ReturnsAsync(testSettlements);

            var generator = new SettlementGenerator(mockRepo.Object, mockRng.Object);
            var result    = await generator.ListSettlementTypes();

            mockRepo.Verify(x => x.ListSettlementTypes(), Times.Once);
            mockRepo.VerifyNoOtherCalls();
            Assert.NotNull(result);
            Assert.Greater(result.Count(), 0);
            Assert.AreEqual(testSettlements, result);
        }
示例#11
0
    /// <summary>
    /// Generates all settlements.
    /// Stores the chunks from said settlements with reference to their world positions
    /// </summary>
    /// <returns></returns>
    public Dictionary <Vec2i, ChunkData> GenerateSettlements()
    {
        SettlementGenerators = new List <SettlementGenerator>();

        ThreadComplete = new List <Dictionary <Settlement, Dictionary <Vec2i, ChunkData> > >();
        List <Thread> threads = new List <Thread>();
        Dictionary <Vec2i, ChunkData> setChunks = new Dictionary <Vec2i, ChunkData>(2000);

        foreach (KeyValuePair <Kingdom, List <SettlementBase> > kpv in KingdomSettlements)
        {
            SettlementGenerator sg = new SettlementGenerator(GameGenerator, World, kpv.Key, kpv.Value);

            threads.Add(InitSettlementGeneratorThread(kpv.Key, sg));
        }
        bool threadsComplete = false;

        while (!threadsComplete)
        {
            threadsComplete = true;
            foreach (Thread t in threads)
            {
                if (t.IsAlive)
                {
                    threadsComplete = false;
                }
            }
        }

        foreach (Dictionary <Settlement, Dictionary <Vec2i, ChunkData> > dict in ThreadComplete)
        {
            foreach (KeyValuePair <Settlement, Dictionary <Vec2i, ChunkData> > kpv2 in dict)
            {
                //Add the settlement to its relevent kingdom.
                foreach (KeyValuePair <Vec2i, ChunkData> kpv3 in kpv2.Value)
                {
                    setChunks.Add(kpv3.Key, kpv3.Value);
                }
            }
        }
        return(setChunks);
    }