protected override void OnGameStart(Game game, IGameStarter gameStarterObject)
        {
            base.OnGameStart(game, gameStarterObject);

            if (game.GameType is Campaign)
            {
                /*
                 * CampaignEvents.OnGameLoadedEvent.AddNonSerializedListener(this, _ =>
                 * {
                 *  var settingsProvider = this.GetServiceProvider()?.GetRequiredService<BaseSettingsProvider>();
                 *  settingsProvider?.OnGameStarted(game);
                 * });
                 * CampaignEvents.OnNewGameCreatedEvent.AddNonSerializedListener(this, _ =>
                 * {
                 *  var settingsProvider = this.GetServiceProvider()?.GetRequiredService<BaseSettingsProvider>();
                 *  settingsProvider?.OnGameStarted(game);
                 * });
                 */

                var settingsProvider = GenericServiceProvider.GetService <BaseSettingsProvider>();
                settingsProvider?.OnGameStarted(game);

                var gameStarter = (CampaignGameStarter)gameStarterObject;
                gameStarter.AddBehavior(GenericServiceProvider.GetService <PerSaveCampaignBehavior>());
            }
        }
Esempio n. 2
0
        public DefaultSettingsProvider(IBUTRLogger <DefaultSettingsProvider> logger)
        {
            _logger = logger;

            var globalSettingsContainers = (GenericServiceProvider.GetService <IEnumerable <IGlobalSettingsContainer> >() ??
                                            Enumerable.Empty <IGlobalSettingsContainer>()).ToList();
            var perSaveSettingsContainers = (GenericServiceProvider.GetService <IEnumerable <IPerSaveSettingsContainer> >() ??
                                             Enumerable.Empty <IPerSaveSettingsContainer>()).ToList();
            var perCampaignSettingsContainers = (GenericServiceProvider.GetService <IEnumerable <IPerCampaignSettingsContainer> >() ??
                                                 Enumerable.Empty <IPerCampaignSettingsContainer>()).ToList();

            foreach (var globalSettingsContainer in globalSettingsContainers)
            {
                logger.LogInformation("Found Global container {type}.", globalSettingsContainer.GetType());
            }
            foreach (var perSaveSettingsContainer in perSaveSettingsContainers)
            {
                logger.LogInformation("Found PerSave container {type}.", perSaveSettingsContainer.GetType());
            }
            foreach (var perCampaignSettingsContainer in perCampaignSettingsContainers)
            {
                logger.LogInformation("Found Campaign container {type}.", perCampaignSettingsContainer.GetType());
            }

            _settingsContainers = Enumerable.Empty <ISettingsContainer>()
                                  .Concat(globalSettingsContainers)
                                  .Concat(perSaveSettingsContainers)
                                  .ToList();
        }
Esempio n. 3
0
 public SettingsBase?GetSettings(string id)
 {
     if (GenericServiceProvider.GetService <BaseSettingsProvider>() is { } settingsProvider)
     {
         var baseSettings = settingsProvider.GetSettings(id);
         if (baseSettings is MBOv1GlobalSettingsWrapper {
             Object : SettingsBase settings
         })
Esempio n. 4
0
 public override MCMv3BaseSettings?GetSettings(string id)
 {
     if (GenericServiceProvider.GetService <BaseSettingsProvider>() is { } settingsProvider)
     {
         var baseSettings = settingsProvider?.GetSettings(id);
         if (baseSettings is MCMv3GlobalSettingsWrapper {
             Object : MCMv3BaseSettings settings
         })
        public void Resolve_Test()
        {
            var implementations = GenericServiceProvider.GetService <IEnumerable <ISettingsFormat> >()?.ToList() ?? new List <ISettingsFormat>();

            Assert.True(implementations.Any(i => i is MemorySettingsFormat), "MemorySettingsFormat missing");
            Assert.True(implementations.Any(i => i is JsonSettingsFormat), "JsonSettingsFormat missing");
            Assert.True(implementations.Any(i => i is XmlSettingsFormat), "XmlSettingsFormat missing");
        }
Esempio n. 6
0
        public async Task Cleanup()
        {
            Logger.LogInformation("Started cleanup!");
            TrainingRoomDbContext context = GenericServiceProvider.GetService <TrainingRoomDbContext>();
            await context.Database.EnsureDeletedAsync();

            await GenericServiceProvider.DisposeAsync();

            Logger.LogInformation("Finished cleanup!");
        }
        public override void OnGameEnd(Game game)
        {
            base.OnGameEnd(game);

            if (game.GameType is Campaign)
            {
                var settingsProvider = GenericServiceProvider.GetService <BaseSettingsProvider>();
                settingsProvider?.OnGameEnded(game);
            }
        }
        public static IEnumerable <SettingsPropertyGroupDefinition> GetUnsortedSettingPropertyGroups(this BaseSettings settings)
        {
            if (settings is IFluentSettings fluentSettings)
            {
                return(fluentSettings.SettingPropertyGroups);
            }

            var discoverers = GenericServiceProvider.GetService <IEnumerable <ISettingsPropertyDiscoverer> >() ?? Enumerable.Empty <ISettingsPropertyDiscoverer>();
            var discoverer  = discoverers.FirstOrDefault(x => x.DiscoveryTypes.Any(y => y == settings.DiscoveryType));

            return(SettingsUtils.GetSettingsPropertyGroups(settings.SubGroupDelimiter, discoverer?.GetProperties(settings) ?? Enumerable.Empty <ISettingsPropertyDefinition>()));
        }
        /// <inheritdoc/>
        protected override void RegisterSettings(FluentPerCampaignSettings?perCampaignSettings)
        {
            if (perCampaignSettings is null)
            {
                return;
            }

            var directoryPath   = Path.Combine(RootFolder, Campaign.Current.UniqueGameId, perCampaignSettings.FolderName, perCampaignSettings.SubFolder);
            var settingsFormats = GenericServiceProvider.GetService <IEnumerable <ISettingsFormat> >() ?? Enumerable.Empty <ISettingsFormat>();
            var settingsFormat  = settingsFormats.FirstOrDefault(x => x.FormatTypes.Any(y => y == perCampaignSettings.FormatType));

            settingsFormat?.Load(perCampaignSettings, directoryPath, perCampaignSettings.Id);
        }
Esempio n. 10
0
        protected override void RegisterSettings(GlobalSettings?settings)
        {
            if (settings is null || LoadedSettings.ContainsKey(settings.Id))
            {
                return;
            }

            LoadedSettings.Add(settings.Id, settings);

            var directoryPath   = Path.Combine(RootFolder, settings.FolderName, settings.SubFolder);
            var settingsFormats = GenericServiceProvider.GetService <IEnumerable <ISettingsFormat> >() ?? Enumerable.Empty <ISettingsFormat>();
            var settingsFormat  = settingsFormats.FirstOrDefault(x => x.FormatTypes.Any(y => y == settings.FormatType));

            settingsFormat?.Load(settings, directoryPath, settings.Id);
        }
        /// <inheritdoc/>
        public override bool SaveSettings(BaseSettings settings)
        {
            if (settings is not PerCampaignSettings campaignSettings)
            {
                return(false);
            }

            var directoryPath   = Path.Combine(RootFolder, Campaign.Current.UniqueGameId, campaignSettings.FolderName, campaignSettings.SubFolder);
            var settingsFormats = GenericServiceProvider.GetService <IEnumerable <ISettingsFormat> >() ?? Enumerable.Empty <ISettingsFormat>();
            var settingsFormat  = settingsFormats.FirstOrDefault(x => x.FormatTypes.Any(y => y == campaignSettings.FormatType));

            settingsFormat?.Save(campaignSettings, directoryPath, campaignSettings.Id);

            return(true);
        }
Esempio n. 12
0
        /// <inheritdoc/>
        public override bool SaveSettings(BaseSettings settings)
        {
            var behavior = GenericServiceProvider.GetService <PerSaveCampaignBehavior>();

            if (behavior is null)
            {
                return(false);
            }

            if (settings is not PerSaveSettings || !LoadedSettings.ContainsKey(settings.Id))
            {
                return(false);
            }

            return(behavior.SaveSettings((PerSaveSettings)settings));
        }
Esempio n. 13
0
        /// <inheritdoc/>
        protected override void RegisterSettings(PerSaveSettings?perSaveSettings)
        {
            var behavior = GenericServiceProvider.GetService <PerSaveCampaignBehavior>();

            if (behavior is null)
            {
                return;
            }

            if (perSaveSettings is null)
            {
                return;
            }

            LoadedSettings.Add(perSaveSettings.Id, perSaveSettings);

            behavior.LoadSettings(perSaveSettings);
        }
Esempio n. 14
0
        public async Task Initialize()
        {
            IServiceCollection serviceCollection = new ServiceCollection();

            serviceCollection.AddLogging(builder => builder.AddConsole());
            serviceCollection.AddAutoMapper(Assembly.GetAssembly(typeof(TrainingRoomStartupExtensions)));

            #region Database
            // NOTE: to verify if the test works in memory use code below..
            //serviceCollection.AddOptions();
            //serviceCollection.Configure<DbConfiguration>(dbConfig =>
            //{
            //    //InMemory by default
            //    dbConfig.UseLazyLoading = true;
            //    dbConfig.ConnectionString = "";
            //    dbConfig.DbProvider = "";
            //});
            //serviceCollection.AddSingleton<IFactory<TrainingRoomDbContext>, TrainingRoomDatabaseFactory>();
            //serviceCollection.AddTransient<TrainingRoomDbContext>(p => p.GetService<IFactory<TrainingRoomDbContext>>().Create());
            SqliteConnection = new SqliteConnection("Data Source=:memory:");
            SqliteConnection.Open();

            serviceCollection.AddDbContext <TrainingRoomDbContext>(optionsBuilder =>
            {
                optionsBuilder.UseSqlite(SqliteConnection);
                optionsBuilder.EnableSensitiveDataLogging();
            });
            #endregion Database

            #region Validators
            serviceCollection.AddTransient <IEntityValidator <TrainingRoom>, TrainingRoomValidator>();
            serviceCollection.AddTransient <IEntityValidator <TrainingSession>, TrainingSessionValidator>();
            serviceCollection.AddTransient <IEntityValidator <TrainingRoomSettings>, TrainingRoomSettingsValidator>();
            #endregion Validators

            #region Repositories
            serviceCollection.AddTransient <IRepository <TrainingRoom>, Repository <TrainingRoom, TrainingRoomDbContext> >();
            serviceCollection.AddTransient <ITrainingSessionRepository, TrainingSessionRepository>();
            serviceCollection.AddTransient <IRepository <TrainingRoomSettings>, Repository <TrainingRoomSettings, TrainingRoomDbContext> >();
            #endregion Repositories

            #region Services
            serviceCollection.AddTransient <ITrainingRoomService, Application.Services.TrainingRoomService>();
            serviceCollection.AddTransient <ITrainingSessionService, Application.Services.TrainingSessionService>();
            UserId = Guid.NewGuid();
            const string username = "******";
            serviceCollection.AddSingleton <IUserService, UserServiceMock>(p => new UserServiceMock(UserId, username));
            #endregion Services

            GenericServiceProvider = serviceCollection.BuildServiceProvider().ToGenericServiceProvider();
            Logger = GenericServiceProvider.GetService <ILogger <TrainingSessionServiceTests> >();
            Logger.LogInformation("Started initialization!");
            TrainingSessionService = GenericServiceProvider.GetService <ITrainingSessionService>();

            TrainingRoomDbContext context = GenericServiceProvider.GetService <TrainingRoomDbContext>();
            await context.Database.EnsureCreatedAsync();

            ITrainingRoomService trainingRoomService = GenericServiceProvider.GetService <ITrainingRoomService>();
            IUserService         userService         = GenericServiceProvider.GetService <IUserService>();

            TrainingRoomDto trainingRoomDto = new TrainingRoomDto()
            {
                Id                   = Guid.NewGuid(),
                Name                 = "Cool room",
                OwnerId              = UserId,
                Owner                = await userService.FindUserAsync(UserId),
                Generation           = 0,
                TrainingRoomSettings = new TrainingRoomSettingsDto()
                {
                    Id                             = Guid.NewGuid(),
                    OrganismCount                  = (uint)OrganismCount,
                    InputCount                     = 2,
                    OutputCount                    = 1,
                    SpeciesExcessGeneWeight        = 1,
                    SpeciesDisjointGeneWeight      = 1,
                    SpeciesAverageWeightDiffWeight = 0.4,
                    Threshold                      = 3,
                    AddConnectionChance            = 0.05,
                    AddNodeChance                  = 0.03,
                    CrossOverChance                = 0.75,
                    InterSpeciesChance             = 0.001,
                    MutationChance                 = 1,
                    MutateWeightChance             = 0.8,
                    WeightReassignChance           = 0.1,
                    TopAmountToSurvive             = 0.5,
                    EnableConnectionChance         = 0.25,
                    Seed                           = 1,
                    MaxStagnantTime                = 15,
                    ChampionCloneMinSpeciesSize    = 5
                },
                AuthorizedTrainers = new List <TrainerDto>(),
                TrainingSessions   = new List <TrainingSessionDto>()
            };
            (bool success, Guid id) = await trainingRoomService.CreateAsync(trainingRoomDto);

            Logger.LogInformation($"Created a training room: {success} id: {id}");
            TrainingRoomId = id;
            Logger.LogInformation("Finished initialization!");
        }
 public static ISettingsBuilder?Create(string id, string displayName) =>
 GenericServiceProvider.GetService <ISettingsBuilderFactory>()?.Create(id, displayName);