Пример #1
0
        protected override void Initialize()
        {
            // create all application services and add to main services container.
            _services = new ServiceContainer();
            ServiceLocator.SetLocatorProvider(() => _services);

            var vfsStorage      = new VfsStorage();
            var pathStorage     = new FileSystemStorage("data");
            var uiAssetsStorage = new ZipStorage(pathStorage, "UI_Assets.zip");

            vfsStorage.MountInfos.Add(new VfsMountInfo(uiAssetsStorage, null));

            // Register the virtual file system as a service.
            _services.Register(typeof(IStorage), null, vfsStorage);

            // The GraphicsDeviceManager needs to be registered in the service container.
            // (This is required by the XNA content managers.)
            _services.Register(typeof(IGraphicsDeviceService), null, _graphicsDeviceManager);
            _services.Register(typeof(GraphicsDeviceManager), null, _graphicsDeviceManager);

            var uiContentManager = new StorageContentManager(_services, uiAssetsStorage);

            _services.Register(typeof(ContentManager), "UIContent", uiContentManager);

            // ----- Initialize Services
            // Register the game class.
            _services.Register(typeof(Microsoft.Xna.Framework.Game), null, this);
            _services.Register(typeof(kbPCB), null, this);

            // Input
            _inputManager = new InputManager(false);
            _services.Register(typeof(IInputService), null, _inputManager);

            // Graphics
            _graphicsManager = new GraphicsManager(GraphicsDevice, Window, uiContentManager);
            _services.Register(typeof(IGraphicsService), null, _graphicsManager);

            // GUI
            _uiManager = new UIManager(this, _inputManager);
            _services.Register(typeof(IUIService), null, _uiManager);

            // Animation
            _animationManager = new AnimationManager();
            _services.Register(typeof(IAnimationService), null, _animationManager);

            // Game logic
            _gameObjectManager = new GameObjectManager();
            _services.Register(typeof(IGameObjectService), null, _gameObjectManager);

            // Profiler
            _profiler = new HierarchicalProfiler("Main");
            _services.Register(typeof(HierarchicalProfiler), "Main", _profiler);

            // add more stuff here
            var editor2D = new Editor2D(this);

            Components.Add(editor2D);

            base.Initialize();
        }
Пример #2
0
    protected override void Initialize()
    {
      base.Initialize();

      // Get the standard XNA window.
      _gameForm = Control.FromHandle(Window.Handle) as Form;


      // Create a "virtual file system" for reading game assets.
      var titleStorage = new TitleStorage("Content");
      var assetsStorage = new ZipStorage(titleStorage, "Content.zip");
      var drStorage = new ZipStorage(titleStorage, "DigitalRune.zip");
      var vfsStorage = new VfsStorage();
      vfsStorage.MountInfos.Add(new VfsMountInfo(titleStorage, null));
      vfsStorage.MountInfos.Add(new VfsMountInfo(assetsStorage, null));
      vfsStorage.MountInfos.Add(new VfsMountInfo(drStorage, null));

      Content = new StorageContentManager(Services, vfsStorage);
#else
      Content.RootDirectory = "Content";

      // Create the DigitalRune GraphicsManager.
      _graphicsManager = new GraphicsManager(GraphicsDevice, Window, Content);

      // Add graphics service to service provider
      Services.AddService(typeof(IGraphicsService), _graphicsManager);

      // Add a few GraphicsScreens that draw stuff.
      _graphicsManager.Screens.Add(new BackgroundGraphicsScreen(_graphicsManager));
      _graphicsManager.Screens.Add(new TriangleGraphicsScreen(_graphicsManager));
      _graphicsManager.Screens.Add(new TextGraphicsScreen(_graphicsManager, Content));
    }
Пример #3
0
        /// <summary>
        /// Called when graphics resources need to be loaded. Override this method to load any
        /// game-specific graphics resources.
        /// </summary>
        protected override void LoadContent()
        {
            try
            {
                // Configure ContentManager to load the SpriteFont.
                var titleStorage = new TitleStorage("Content");
                var vfsStorage   = new VfsStorage();
                vfsStorage.MountInfos.Add(new VfsMountInfo(titleStorage, null));
#if MONOGAME
                var assetsStorage = new ZipStorage(titleStorage, "Content.zip");
                vfsStorage.MountInfos.Add(new VfsMountInfo(assetsStorage, null));
                var drStorage = new ZipStorage(titleStorage, "DigitalRune.zip");
                vfsStorage.MountInfos.Add(new VfsMountInfo(drStorage, null));
#endif
                Content = new StorageContentManager(Services, vfsStorage);

                // Load SpriteFont.
                _spriteFont  = Content.Load <SpriteFont>("SpriteFont1");
                _spriteBatch = new SpriteBatch(GraphicsDevice);
            }
            catch
            {
                // Failed to load sprite font.
            }
        }
Пример #4
0
        public static Boolean VerifyArchive(ZipStorage zip_storage, String filename)
        {
            FileInfo fi = new FileInfo(filename);
            if (fi.Length == 0)
            {
                // Delete empty files
                File.Delete(filename);
                return false;
            }
            try
            {
                String[] index_filenames = { typeof(MangaObject).Name, typeof(ChapterObject).Name };
                ZipStorageInformationObject zip_storage_information_object = zip_storage.GetInformation(filename);
                Ionic.Zip.ZipEntry index_zipentry = zip_storage_information_object.ArchiveEntries.FirstOrDefault(x => index_filenames.Contains(x.FileName));

                if (index_zipentry == null)
                    return false;

                Object index = null;
                Stream index_file_stream;
                using (index_file_stream = null)
                {
                    if (zip_storage.TryRead(filename, index_zipentry.FileName, out index_file_stream))
                    {
                        if (index_zipentry.FileName.Equals(index_filenames[0]))
                            index = index_file_stream.Deserialize<MangaObject>(App.UserConfig.SaveType);
                        else if (index_zipentry.FileName.Equals(index_filenames[1]))
                            index = index_file_stream.Deserialize<ChapterObject>(App.UserConfig.SaveType);
                    }
                }
                if (index != null)
                {
                    // TODO: Fix this code when looking up archive files.
                    if (index is MangaObject)
                    {
                        String[] MissingCovers = (index as MangaObject).Covers.Where(
                            c => zip_storage_information_object.ArchiveEntries.Count(
                                ze => ze.FileName.Equals(Path.GetFileName(c))) == 0).ToArray();
                        foreach (String Cover in MissingCovers)
                        {
                            if (Cover != null) App.DownloadManager.Download(Cover, filename);
                        }
                    }
                    else if (index is ChapterObject)
                    {
                        PageObject[] MissingPages = (index as ChapterObject).Pages.Where(
                            po => zip_storage_information_object.ArchiveEntries.Count(
                                ze => ze.FileName.Equals(po.Name)) == 0).ToArray();
                        foreach (PageObject Page in MissingPages)
                        {
                            if (Page.ImgUrl != null) App.DownloadManager.Download(Page.ImgUrl, filename);
                        }
                    }
                    else return true;
                }
            }
            catch { }
            return false;
        }
Пример #5
0
        private void AddGraphicsService()
        {
            // ----- Storage
            // Create a "virtual file system" for reading game assets.
            var titleStorage       = new TitleStorage("Content");
            var assetsStorage      = new ZipStorage(titleStorage, "DigitalRune.Editor.Game.zip");
            var digitalRuneStorage = new ZipStorage(titleStorage, "DigitalRune.zip");
            var vfsStorage         = new VfsStorage();

            vfsStorage.MountInfos.Add(new VfsMountInfo(titleStorage, null));
            vfsStorage.MountInfos.Add(new VfsMountInfo(assetsStorage, null));
            vfsStorage.MountInfos.Add(new VfsMountInfo(digitalRuneStorage, null));

            // ----- Content
            _contentManager = new StorageContentManager(Editor.Services, vfsStorage);
            //_contentManager = new ContentManager(serviceContainer, "Content");
            Editor.Services.Register(typeof(ContentManager), null, _contentManager);

            // ----- Animations
            _animationManager = new AnimationManager();
            Editor.Services.Register(typeof(IAnimationService), null, _animationManager);

            // ----- Graphics
            // Create Direct3D 11 device.
            var presentationParameters = new PresentationParameters
            {
                BackBufferWidth    = 1,
                BackBufferHeight   = 1,
                DeviceWindowHandle = IntPtr.Zero
            };
            var graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef, presentationParameters);

            Editor.Services.Register(typeof(IGraphicsDeviceService), null, new GraphicsDeviceManager(graphicsDevice));

            // Create and register the graphics manager.
            _graphicsManager = new GraphicsManager(graphicsDevice, _contentManager);
            Editor.Services.Register(typeof(IGraphicsService), null, _graphicsManager);
        }
Пример #6
0
        public MyGame()
        {
            // ----- Service Container
            // The MyGame uses a ServiceContainer, which is a simple service locator
            // and Inversion of Control (IoC) container. (The ServiceContainer can be
            // replaced by any other container that implements System.IServiceProvider.)
            _serviceContainer = new ServiceContainer();
            ServiceLocator.SetLocatorProvider(() => _serviceContainer);

            // ----- Storage
            // Create a "virtual file system" for reading game assets.
            var titleStorage       = new TitleStorage("Content");
            var assetsStorage      = new ZipStorage(titleStorage, "Content.zip");
            var digitalRuneStorage = new ZipStorage(titleStorage, "DigitalRune.zip");
            var vfsStorage         = new VfsStorage();

            vfsStorage.MountInfos.Add(new VfsMountInfo(titleStorage, null));
            vfsStorage.MountInfos.Add(new VfsMountInfo(assetsStorage, null));
            vfsStorage.MountInfos.Add(new VfsMountInfo(digitalRuneStorage, null));

            // ----- Content
            _contentManager = new StorageContentManager(ServiceLocator.Current, vfsStorage);
            _serviceContainer.Register(typeof(ContentManager), null, _contentManager);

            // ----- Graphics
            // Create Direct3D 11 device.
            var presentationParameters = new PresentationParameters
            {
                BackBufferWidth  = 1,
                BackBufferHeight = 1,
                // Do not associate graphics device with any window.
                DeviceWindowHandle = IntPtr.Zero,
            };
            var graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef, presentationParameters);

            // An IGraphicsDeviceService is required by the MonoGame/XNA content manager.
            _serviceContainer.Register(typeof(IGraphicsDeviceService), null, new DummyGraphicsDeviceManager(graphicsDevice));

            // Create and register the graphics manager.
            _graphicsManager = new GraphicsManager(graphicsDevice, _contentManager);
            _serviceContainer.Register(typeof(IGraphicsService), null, _graphicsManager);

            // ----- Timing
            // We can use the CompositionTarget.Rendering event to trigger our game loop.
            // The CompositionTarget.Rendering event is raised once per frame by WPF.

            // To measure the time that has passed, we use a HighPrecisionClock.
            _clock = new HighPrecisionClock();
            _clock.Start();
            CompositionTarget.Rendering += (s, e) => _clock.Update();

            // The FixedStepTimer reads the clock and triggers the game loop at 60 Hz.
            //_timer = new FixedStepTimer(_clock)
            //{
            //  StepSize = new TimeSpan(166667), // ~60 Hz
            //  AccumulateTimeSteps = false,
            //};
            // The VariableStepTimer reads the clock and triggers the game loop as often
            // as possible.
            _timer              = new VariableStepTimer(_clock);
            _timer.TimeChanged += (s, e) => GameLoop(e.DeltaTime);
            _timer.Start();
        }
Пример #7
0
        static void Main(string[] args)
        {
            MangaObject test = new MangaObject();
            test.Name = "Test";
            test.MangaType = myMangaSiteExtension.Enums.MangaObjectType.Unknown;

            Stream test_stream_1 = test.Serialize(SaveType.Binary);
            MangaObject test2 = test_stream_1.Deserialize<MangaObject>(SaveType.Binary);

            zip_storage = Core.Other.Singleton.Singleton<ZipStorage>.Instance;

            //SiteExtentions.Add("MangaReader", new AFTV_Network.MangaReader());
            //SiteExtentions.Add("MangaPanda", new AFTV_Network.MangaPanda());
            //SiteExtentions.Add("MangaHere", new MangaHere.MangaHere());
            //SiteExtentions.Add("Batoto", new Batoto.Batoto());
            SiteExtentions.Add("MangaTraders", new MangaTraders.MangaTraders());
            //SiteExtentions.Add("Batoto-Spanish", new Batoto.Batoto_Spanish());
            //SiteExtentions.Add("Batoto-German", new Batoto.Batoto_German());
            //SiteExtentions.Add("Batoto-French", new Batoto.Batoto_French());
            DatabaseExtentions.Add("MangaHelpers", new MangaHelpers.MangaHelpers());
            DatabaseExtentions.Add("AnimeNewsNetwork", new AnimeNewsNetwork.AnimeNewsNetwork());
            DatabaseExtentions.Add("MangaUpdatesBakaUpdates", new MangaUpdatesBakaUpdates.MangaUpdatesBakaUpdates());
            foreach (ISiteExtension ise in SiteExtentions.Values)
            {
                ISiteExtensionDescriptionAttribute isea = ise.GetType().GetCustomAttribute<ISiteExtensionDescriptionAttribute>(false);
                Console.WriteLine("Loaded Site Extention {0}", isea.Name);
            }
            foreach (IDatabaseExtension ise in DatabaseExtentions.Values)
            {
                IDatabaseExtensionDescriptionAttribute isea = ise.GetType().GetCustomAttribute<IDatabaseExtensionDescriptionAttribute>(false);
                Console.WriteLine("Loaded Database Extention {0}", isea.Name);
            }
            LoadManga();
            //Search();
            zip_storage.Dispose();
        }
Пример #8
0
        public App()
        {
            // Load Embedded DLLs from Resources.
            emdll = new EmbeddedDLL();
            siteExtensions = new DLL_Manager<ISiteExtension, ISiteExtensionCollection>();
            databaseExtensions = new DLL_Manager<IDatabaseExtension, IDatabaseExtensionCollection>();
            assemblyInfo = new AssemblyInformation();

            AppDomain.CurrentDomain.AssemblyResolve += emdll.ResolveAssembly;
            SiteExtensions.DLLAppDomain.AssemblyResolve += emdll.ResolveAssembly;
            DatabaseExtensions.DLLAppDomain.AssemblyResolve += emdll.ResolveAssembly;

            // Handle unhandled exceptions
            DispatcherUnhandledException += App_DispatcherUnhandledException;
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            // Initialize Collections
            mangaArchiveCacheCollection = new ObservableCollection<MangaArchiveCacheObject>();

            // Create a File System Watcher for Manga Objects
            mangaObjectArchiveWatcher = new FileSystemWatcher(MANGA_ARCHIVE_DIRECTORY, MANGA_ARCHIVE_FILTER);
            mangaObjectArchiveWatcher.EnableRaisingEvents = false;

            // Create a File System Watcher for Manga Chapter Objects
            chapterObjectArchiveWatcher = new FileSystemWatcher(CHAPTER_ARCHIVE_DIRECTORY, CHAPTER_ARCHIVE_FILTER);
            chapterObjectArchiveWatcher.IncludeSubdirectories = true;
            chapterObjectArchiveWatcher.EnableRaisingEvents = false;

            // Create IO class objects
            fileStorage = new Core.IO.Storage.Manager.BaseInterfaceClasses.FileStorage();
            zipStorage = new Core.IO.Storage.Manager.BaseInterfaceClasses.ZipStorage();
            downloadManager = new IO.Network.DownloadManager();

            Startup += App_Startup;

            InitializeComponent();
        }
Пример #9
0
        //--------------------------------------------------------------
        #region Creation & Cleanup
        //--------------------------------------------------------------

        public MyGame()
        {
            Lock = new object();

            // ----- Service Container
            // MyGame uses a ServiceContainer, which is a simple service locator and
            // Inversion of Control (IoC) container. (The ServiceContainer can be
            // replaced by any other container that implements System.IServiceProvider.)
            _serviceContainer = new ServiceContainer();
            ServiceLocator.SetLocatorProvider(() => _serviceContainer);

            _serviceContainer.Register(typeof(MyGame), null, this);

            // ----- Storage
            // Create a "virtual file system" for reading game assets.
            _titleStorage       = new TitleStorage("Content");
            _assetsStorage      = new ZipStorage(_titleStorage, "Content.zip");
            _digitalRuneStorage = new ZipStorage(_titleStorage, "DigitalRune.zip");
            _vfsStorage         = new VfsStorage();
            _vfsStorage.MountInfos.Add(new VfsMountInfo(_assetsStorage, null));
            _vfsStorage.MountInfos.Add(new VfsMountInfo(_digitalRuneStorage, null));

            // ----- Content
            _contentManager = new StorageContentManager(ServiceLocator.Current, _vfsStorage);
            _serviceContainer.Register(typeof(ContentManager), null, _contentManager);

            // ----- Graphics
            // Create Direct3D 11 device.
            var presentationParameters = new PresentationParameters
            {
                BackBufferWidth  = 1,
                BackBufferHeight = 1,
                // Do not associate graphics device with any window.
                DeviceWindowHandle = IntPtr.Zero,
            };
            var graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.HiDef, presentationParameters);

            // An IGraphicsDeviceService is required by the MonoGame/XNA content manager.
            _serviceContainer.Register(typeof(IGraphicsDeviceService), null, new DummyGraphicsDeviceManager(graphicsDevice));

            // Get DXGIOutput to call WaitForVerticalBlank() in the game loop.
            using (var dxgiFactory = new SharpDX.DXGI.Factory1())
                using (var dxgiAdapter = dxgiFactory.GetAdapter1(0))
                    _dxgiOutput = dxgiAdapter.GetOutput(0);

            // Create and register the graphics manager.
            _graphicsManager = new GraphicsManager(graphicsDevice, _contentManager);
            _serviceContainer.Register(typeof(IGraphicsService), null, _graphicsManager);

            // ----- Timing
            // The game loop runs in a parallel thread to keep the UI thread responsive.
            // To measure the time that has passed, we use a HighPrecisionClock.
            _clock = new HighPrecisionClock();
            _clock.Start();
            _gameLoopTask = ThreadPool.RunAsync(GameLoopTaskAction, WorkItemPriority.High, WorkItemOptions.TimeSliced)
                            .AsTask();

            // The FixedStepTimer reads the clock and triggers the game loop at 60 Hz.
            //_timer = new FixedStepTimer(_clock)
            //{
            //  StepSize = new TimeSpan(166667), // ~60 Hz
            //  AccumulateTimeSteps = false,
            //};

            // The VariableStepTimer reads the clock and triggers the game loop as often as possible.
            _timer = new VariableStepTimer(_clock);

            _timer.TimeChanged += (s, e) => GameLoop(e.DeltaTime);
            _timer.Start();

            CoreApplication.Suspending += OnCoreApplicationSuspending;

            // DirectX buffers only a limit amount of Present calls per frame which is controlled by
            // the MaximumFrameLatency property. The default value is usually 3. If the application
            // uses more SwapChainPresentationTargets we must increase this property.
            //var d3dDevice = (SharpDX.Direct3D11.Device)_graphicsManager.GraphicsDevice.Handle;
            //using (var dxgiDevice2 = d3dDevice.QueryInterface<SharpDX.DXGI.Device2>())
            //  dxgiDevice2.MaximumFrameLatency = numberOfSwapChainPanels;
        }
Пример #10
0
        // Initializes services and adds game components.
        protected override void Initialize()
        {
#if WINDOWS || WINDOWS_UWP || XBOX
            if (GraphicsDevice.GraphicsProfile == GraphicsProfile.Reach)
            {
                throw new NotSupportedException(
                          "The DigitalRune Samples and Content for Windows, Universal Windows Apps and Xbox 360 are " +
                          "designed for the HiDef graphics profile. A graphics cards supporting DirectX 10.0 or better " +
                          "is required.");
            }
#endif

            // ----- Service Container
            // The DigitalRune ServiceContainer is an "inversion of control" container.
            // All game services (such as input, graphics, physics, etc.) are registered
            // in this container. Other game components can access these services via lookup
            // in the service container.
            // The DigitalRune ServiceContainer replaces the XNA GameServiceContainer (see
            // property Game.Services).

            // Note: The DigitalRune libraries do not require the use of the ServiceContainer
            // or any other IoC container. The ServiceContainer is only used in the sample
            // for convenience - but it is not mandatory.
            _services = new ServiceContainer();

            // The service container is either passed directly to the game components
            // or accessed through the global variable ServiceLocator.Current.
            // The following call makes the service container publicly available in
            // ServiceLocator.Current.
            ServiceLocator.SetLocatorProvider(() => _services);

            // ----- Storage
            // For XNA the assets are stored in the following folders:
            //
            //   <gameLocation>/
            //     Content/
            //       DigitalRune/
            //         ... DigitalRune assets ...
            //       ... other assets ...
            //
            // For MonoGame the assets (*.xnb files) are stored in ZIP packages. The
            // sample assets are stored in "Content/Content.zip" and the DigitalRune
            // assets are stored in "Content/DigitalRune.zip".
            //
            //   <gameLocation>/
            //     Content/
            //       Content.zip
            //       DigitalRune.zip
            //
            // DigitalRune introduces the concept of "storages". Storages can be used
            // to access files on disk or files stored in packages (e.g. ZIP archives).
            // These storages can be mapped into a "virtual file system", which makes
            // it easier to write portable code. (The game logic can read the files
            // from the virtual file system and does not need to know the specifics
            // about the platform.)
            //
            // The virtual files system should look like this:
            //
            //   /                                     <-- root of virtual file system
            //       DigitalRune/
            //           ... DigitalRune assets ...
            //       ... other assets ...

            // The VfsStorage creates a virtual file system.
            var vfsStorage = new VfsStorage();

            // The TitleStorage reads files from the game's default storage location.
            // --> Create a TitleStorage that reads files from "<gameLocation>/Content".
            var titleStorage = new TitleStorage("Content");

#if MONOGAME
            // A ZipStorage can be used to access files inside a ZIP archive.
            // --> Mount the sample assets to the root of the virtual file system.
            var assetsStorage = new ZipStorage(titleStorage, "Content.zip");
            vfsStorage.MountInfos.Add(new VfsMountInfo(assetsStorage, null));

#if !ANDROID && !IOS && !LINUX && !MACOS
            // --> Mount the DigitalRune assets to the root of the virtual file system.
            var drStorage = new ZipStorage(titleStorage, "DigitalRune.zip");
            vfsStorage.MountInfos.Add(new VfsMountInfo(drStorage, null));
#endif
#endif

            // Finally, map the TitleStorage to the root of the virtual file system.
            // (The TitleStorage is added as the last mount point. The ZIP archives
            // have priority.)
            vfsStorage.MountInfos.Add(new VfsMountInfo(titleStorage, null));

            // Register the virtual file system as a service.
            _services.Register(typeof(IStorage), null, vfsStorage);

            // ----- Content Managers
            // The GraphicsDeviceManager needs to be registered in the service container.
            // (This is required by the XNA content managers.)
            _services.Register(typeof(IGraphicsDeviceService), null, _graphicsDeviceManager);
            _services.Register(typeof(GraphicsDeviceManager), null, _graphicsDeviceManager);

            // Register a default, shared content manager.
            // The new StorageContentManager can be used to read assets from the virtual
            // file system. (Replaces the content manager stored in Game.Content.)
            Content = new StorageContentManager(_services, vfsStorage);
            _services.Register(typeof(ContentManager), null, Content);

            // Create and register content manager that will be used to load the GUI.
#if !MONOGAME
            var uiContentManager = new ContentManager(_services, "Content");
#else
            var uiContentManager = new StorageContentManager(_services, assetsStorage);
#endif
            _services.Register(typeof(ContentManager), "UIContent", uiContentManager);

            // Create content manager that will be used exclusively by the graphics service
            // to load the pre-built effects and resources of DigitalRune.Graphics. (We
            // could use Game.Content, but it is recommended to separate the content. This
            // allows to unload the content of the samples without unloading the other
            // content.)
            var graphicsContentManager = new StorageContentManager(_services, vfsStorage);

            // ----- Initialize Services
            // Register the game class.
            _services.Register(typeof(Microsoft.Xna.Framework.Game), null, this);
            _services.Register(typeof(SampleGame), null, this);

#if XBOX
            // On Xbox, we use the XNA gamer services (e.g. for text input).
            Components.Add(new GamerServicesComponent(this));
#endif

            // Input
#if XBOX
            const bool useGamerServices = true;
#else
            const bool useGamerServices = false;
#endif
            _inputManager = new InputManager(useGamerServices);
            _services.Register(typeof(IInputService), null, _inputManager);

            // Graphics
            _graphicsManager = new GraphicsManager(GraphicsDevice, Window, graphicsContentManager);
            _services.Register(typeof(IGraphicsService), null, _graphicsManager);

            // GUI
            _uiManager = new UIManager(this, _inputManager);
            _services.Register(typeof(IUIService), null, _uiManager);

            // Animation
            _animationManager = new AnimationManager();
            _services.Register(typeof(IAnimationService), null, _animationManager);

            // Particle simulation
            _particleSystemManager = new ParticleSystemManager();
            _services.Register(typeof(IParticleSystemService), null, _particleSystemManager);

            // Physics simulation
            ResetPhysicsSimulation();

            // Game logic
            _gameObjectManager = new GameObjectManager();
            _services.Register(typeof(IGameObjectService), null, _gameObjectManager);

            // Profiler
            _profiler = new HierarchicalProfiler("Main");
            _services.Register(typeof(HierarchicalProfiler), "Main", _profiler);

            // Initialize delegates for running tasks in parallel.
            // (Creating delegates allocates memory, therefore we do this only once and
            // cache the delegates.)
            _updateAnimation = () => _animationManager.Update(_deltaTime);
            _updatePhysics   = () => _simulation.Update(_deltaTime);
            _updateParticles = () => _particleSystemManager.Update(_deltaTime);

            // SampleFramework
            // The SampleFramework automatically discovers all samples using reflection, provides
            // controls for switching samples and starts the initial sample.
#if KINECT
            var initialSample = typeof(Kinect.KinectSkeletonMappingSample);
#elif WINDOWS || WINDOWS_UWP
            var initialSample = typeof(Graphics.DeferredLightingSample);
#else
            var initialSample = typeof(Graphics.BasicEffectSample);
#endif
            _sampleFramework = new SampleFramework(this, initialSample);
            _services.Register(typeof(SampleFramework), null, _sampleFramework);

            base.Initialize();
        }