コード例 #1
0
        public async Task AddGamepadAsyncMappings_Test()
        {
            var stoneProvider = new StoneProvider();

            foreach (var testmappings in stoneProvider.Controllers.Values)
            {
                var mapcol = new ControllerElementMappingProfile("Keyboard",
                                                                 "TEST_CONTROLLER",
                                                                 InputDriver.Keyboard,
                                                                 IDeviceEnumerator.VirtualVendorID,
                                                                 new XInputDeviceInstance(0).DefaultLayout);

                var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();
                optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");

                var elementStore = new ControllerElementMappingProfileStore(optionsBuilder);

                await elementStore.AddMappingsAsync(mapcol, "default");

                var retStore = await elementStore.GetMappingsAsync(mapcol.ProfileGuid);

                foreach (var element in retStore)
                {
                    Assert.Contains(element.LayoutElement, mapcol.Select(x => x.LayoutElement));
                    Assert.Equal(element.DeviceCapability,
                                 mapcol.First(x => x.LayoutElement == element.LayoutElement).DeviceCapability);
                }
            }
        }
コード例 #2
0
        public void GetMultipleMappings_Test()
        {
            var stoneProvider = new StoneProvider();

            foreach (var testmappings in stoneProvider.Controllers.Values)
            {
                var mapcol = new ControllerElementMappingProfile("Keyboard",
                                                                 "TEST_CONTROLLER",
                                                                 InputDriver.Keyboard,
                                                                 IDeviceEnumerator.VirtualVendorID,
                                                                 new XInputDeviceInstance(0).DefaultLayout);
                var mapcol2 = new ControllerElementMappingProfile("Keyboard",
                                                                  "TEST_CONTROLLER",
                                                                  InputDriver.Keyboard,
                                                                  IDeviceEnumerator.VirtualVendorID,
                                                                  new XInputDeviceInstance(0).DefaultLayout);

                var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();
                optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
                var elementStore = new ControllerElementMappingProfileStore(optionsBuilder);

                elementStore.AddMappings(mapcol, "default");
                elementStore.AddMappings(mapcol2, "default2");

                Assert.Equal(2, elementStore.GetProfileNames(mapcol.ControllerID, InputDriver.Keyboard, mapcol.DeviceName,
                                                             IDeviceEnumerator.VirtualVendorID)
                             .Count());
                elementStore.DeleteMappings(mapcol.ProfileGuid);
                Assert.Single(elementStore.GetProfileNames(mapcol.ControllerID, InputDriver.Keyboard, mapcol.DeviceName,
                                                           IDeviceEnumerator.VirtualVendorID));
                elementStore.DeleteMappings(mapcol.ControllerID, mapcol.DeviceName, IDeviceEnumerator.VirtualVendorID);
                Assert.Empty(elementStore.GetProfileNames(mapcol.ControllerID, InputDriver.Keyboard, mapcol.DeviceName,
                                                          IDeviceEnumerator.VirtualVendorID));
            }
        }
コード例 #3
0
        public async Task DeleteMappingsAsync_Test()
        {
            var stoneProvider = new StoneProvider();

            foreach (var testmappings in stoneProvider.Controllers.Values)
            {
                var mapcol = new ControllerElementMappingProfile("Keyboard",
                                                                 "TEST_CONTROLLER",
                                                                 InputDriver.Keyboard,
                                                                 IDeviceEnumerator.VirtualVendorID,
                                                                 new XInputDeviceInstance(0).DefaultLayout);

                var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();
                optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
                var elementStore = new ControllerElementMappingProfileStore(optionsBuilder);

                await elementStore.AddMappingsAsync(mapcol, "default");

                var retStore = await elementStore.GetMappingsAsync(mapcol.ProfileGuid);

                Assert.NotNull(retStore);
                await elementStore.DeleteMappingsAsync(mapcol.ProfileGuid);

                var deletedRetStore = elementStore.GetMappings(mapcol.ProfileGuid);
                Assert.Null(deletedRetStore);
            }
        }
コード例 #4
0
        public void GetProfileNames_Test()
        {
            var mapcol = new ControllerElementMappingProfile("Keyboard",
                                                             "TEST_CONTROLLER",
                                                             InputDriver.Keyboard,
                                                             IDeviceEnumerator.VirtualVendorID,
                                                             new XInputDeviceInstance(0).DefaultLayout);

            var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");
            var elementStore = new ControllerElementMappingProfileStore(optionsBuilder);

            elementStore.AddMappings(mapcol, "default");
        }
コード例 #5
0
        public async Task UpdateMappedInputCollectionGamepadAsync_Test()
        {
            var stoneProvider = new StoneProvider();

            foreach (var testmappings in stoneProvider.Controllers.Values)
            {
                var mapcol = new ControllerElementMappingProfile("Keyboard",
                                                                 "TEST_CONTROLLER",
                                                                 InputDriver.Keyboard,
                                                                 IDeviceEnumerator.VirtualVendorID,
                                                                 new XInputDeviceInstance(0).DefaultLayout);

                var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>();
                optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}");

                var elementStore = new ControllerElementMappingProfileStore(optionsBuilder);

                await elementStore.AddMappingsAsync(mapcol, "default");

                // map buttonA to buttonB.
                mapcol[ControllerElement.ButtonA] = DeviceCapability.Button1;
                elementStore.UpdateMappings(mapcol);

                mapcol[ControllerElement.ButtonB] = DeviceCapability.Axis0Positive;
                elementStore.UpdateMappings(mapcol);

                var retStore = await elementStore.GetMappingsAsync(mapcol.ProfileGuid);

                foreach (var element in retStore)
                {
                    Assert.Contains(element.LayoutElement, mapcol.Select(x => x.LayoutElement));
                    Assert.Equal(element.DeviceCapability,
                                 mapcol.First(x => x.LayoutElement == element.LayoutElement).DeviceCapability);
                }

                // Switch left joycon has no A button
                if (testmappings.Layout[ControllerElement.ButtonA] != null)
                {
                    Assert.Equal(DeviceCapability.Button1, retStore[ControllerElement.ButtonA]);
                }
            }
        }
コード例 #6
0
        public void Compose(IModule module, Loader.IServiceRepository serviceContainer)
        {
            var    physicalFs       = serviceContainer.Get <IFileSystem>();
            var    contentDirectory = serviceContainer.Get <IContentDirectoryProvider>();
            string sqlitePath       = Path.Combine(contentDirectory.ApplicationData.FullName, "library.db");
            var    optionsBuilder   = new DbContextOptionsBuilder <DatabaseContext>();

            optionsBuilder
            .UseSqlite($"Data Source={sqlitePath}");

            using (var context = new DatabaseContext(optionsBuilder.Options))
            {
                var connection = context.Database.GetDbConnection();
                connection.Open();
                using var command   = connection.CreateCommand();
                command.CommandText = "PRAGMA journal_mode=WAL;";
                command.ExecuteNonQuery();
            }

            // game library dependency tree

            var gameRecordLibrary = new GameRecordLibrary(optionsBuilder);
            var gameLibrary       = new GameLibrary(gameRecordLibrary);
            var configStore       = new ConfigurationCollectionStore(optionsBuilder);

            var fileLibrary = new FileRecordLibrary(optionsBuilder);

            var appDataPath = physicalFs.ConvertPathFromInternal(contentDirectory.ApplicationData.FullName);
            var gameFs      = physicalFs.GetOrCreateSubFileSystem(appDataPath / "games");

            // Add default extensions
            gameLibrary.AddExtension <IGameFileExtensionProvider,
                                      IGameFileExtension>(new GameFileExtensionProvider(fileLibrary, gameFs));

            gameLibrary.AddExtension <IGameConfigurationExtensionProvider,
                                      IGameConfigurationExtension>(new GameConfigurationExtensionProvider(configStore));

            // register game library.
            serviceContainer.Get <IServiceRegistrationProvider>()
            .RegisterService <IGameLibrary>(gameLibrary);

            var pluginLibrary = new PluginConfigurationStore(optionsBuilder);

            // plugin config store

            serviceContainer.Get <IServiceRegistrationProvider>()
            .RegisterService <IPluginConfigurationStore>(pluginLibrary);

            // controller elements

            var inputStore = new ControllerElementMappingProfileStore(optionsBuilder);

            serviceContainer.Get <IServiceRegistrationProvider>()
            .RegisterService <IControllerElementMappingProfileStore>(inputStore);

            // ports
            var portStore = new EmulatedPortStore(optionsBuilder);

            serviceContainer.Get <IServiceRegistrationProvider>()
            .RegisterService <IEmulatedPortStore>(portStore);
        }