Пример #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();
        }
        private void basicUsage(HierarchicalProfiler profiler)
        {
            profiler.StartFrame("root");
            Thread.Sleep(10);

            profiler.Enter("depth1 1");
            Thread.Sleep(10);
            profiler.Leave();

            profiler.Enter("depth1 2");
            Thread.Sleep(10);
            profiler.Enter("depth2 1");
            Thread.Sleep(10);
            profiler.Leave();
            Thread.Sleep(10);
            profiler.Leave();

            Thread.Sleep(10);
            profiler.EndFrame();

            var nodes = profiler.Nodes.ToList();
            Assert.Equal(4, nodes.Count);
            Assert.Equal("root", nodes[0].Name);
            var startTime = nodes[0].StartTicks;
            var endTime = nodes[0].EndTicks;
            Assert.True(endTime > startTime);
            Assert.True(endTime - startTime > TimeSpan.FromMilliseconds(59).Ticks);

            Assert.Equal("depth1 1", nodes[1].Name);
            Assert.Equal("depth2 1", nodes[3].Name);
            Assert.True(nodes[3].EndTicks > nodes[2].StartTicks);
            Assert.True(nodes[3].StartTicks > nodes[2].StartTicks);
            Assert.True(nodes[2].EndTicks > nodes[3].EndTicks);
        }
        public void BasicUsage()
        {
            var profiler = new HierarchicalProfiler();

            basicUsage(profiler);
            basicUsage(profiler);
        }
        private void basicUsage(HierarchicalProfiler profiler)
        {
            profiler.StartFrame("root");
            Thread.Sleep(10);

            profiler.Enter("depth1 1");
            Thread.Sleep(10);
            profiler.Leave();

            profiler.Enter("depth1 2");
            Thread.Sleep(10);
            profiler.Enter("depth2 1");
            Thread.Sleep(10);
            profiler.Leave();
            Thread.Sleep(10);
            profiler.Leave();

            Thread.Sleep(10);
            profiler.EndFrame();

            var nodes = profiler.Nodes.ToList();

            Assert.Equal(4, nodes.Count);
            Assert.Equal("root", nodes[0].Name);
            var startTime = nodes[0].StartTicks;
            var endTime   = nodes[0].EndTicks;

            Assert.True(endTime > startTime);
            Assert.True(endTime - startTime > TimeSpan.FromMilliseconds(59).Ticks);

            Assert.Equal("depth1 1", nodes[1].Name);
            Assert.Equal("depth2 1", nodes[3].Name);
            Assert.True(nodes[3].EndTicks > nodes[2].StartTicks);
            Assert.True(nodes[3].StartTicks > nodes[2].StartTicks);
            Assert.True(nodes[2].EndTicks > nodes[3].EndTicks);
        }
 public void BasicUsage()
 {
     var profiler = new HierarchicalProfiler();
     basicUsage(profiler);
     basicUsage(profiler);
 }
Пример #6
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();
        }
Пример #7
0
        // Initializes services and adds game components.
        protected override void Initialize()
        {
            // ----- 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);

            // ----- 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. (Replaces the content manager
            // stored in Game.Content.)
            Content = new ContentManager(_services, "Content");
            _services.Register(typeof(ContentManager), null, Content);

            // Create and register content manager that will be used to load the GUI.
            var uiContentManager = new ContentManager(_services, "BlendBlueTheme");

            _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 recommend to separate the content. This
            // allows to unload the content of the samples without unloading the other
            // content.)
            var graphicsContentManager = new ContentManager(_services, "Content");

            // ----- 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);

            // ----- Add GameComponents
            // The MenuComponent loads/switches samples.
            Components.Add(new MenuComponent(this));

            // The MouseComponent handles mouse centering and the mouse cursor.
            Components.Add(new MouseComponent(this));

            // The GamePadComponent detects and assigns logical players to game pads.
            Components.Add(new GamePadComponent(this));

            // The HelpComponent shows help text.
            Components.Add(new HelpComponent(this));

            // The ProfilerComponent dumps profiling data.
            Components.Add(new ProfilerComponent(this));

            base.Initialize();
        }