Exemplo n.º 1
0
        public override void Update(ISkinLayout skinLayout, Rectangle layout, GameTime gameTime, ref bool stealFocus)
        {
            base.Update(skinLayout, layout, gameTime, ref stealFocus);

            // Because of padding the size should be slightly smaller.
            _loadedGame.SetPositionOffset(new Point(layout.X + 1, layout.Y + 1));
            _loadedGame.SetRenderTargetSize(new Point(layout.Size.X - 2, layout.Size.Y - 2));
            _rawTextureContainer.Texture = _loadedGame.GetCurrentGameRenderTarget();
        }
        public void WriteThumbnailIfNecessary(IGameContext gameContext, IRenderContext renderContext)
        {
            var path = _projectManager?.Project?.ProjectPath;

            if (path == null || !path.Exists)
            {
                return;
            }

            var editorPath = Path.Combine(Path.Combine(path.FullName, "Build", "Editor"));

            Directory.CreateDirectory(editorPath);

            var thumbnailFile = new FileInfo(Path.Combine(editorPath, "Thumbnail.png"));

            var startTime = _loadedGame.GetPlayingStartTime();

            if (startTime != null && (DateTime.UtcNow - startTime.Value).TotalMinutes >= 1)
            {
                if (!thumbnailFile.Exists || thumbnailFile.LastWriteTimeUtc < DateTime.UtcNow.AddHours(-4))
                {
                    _consoleHandle.LogInfo("Sampling current game screen as thumbnail for project...");

                    var srt = _loadedGame.GetCurrentGameRenderTarget();
                    var rt  = new RenderTarget2D(renderContext.GraphicsDevice, 128, 128, false, SurfaceFormat.Color, DepthFormat.None);
                    _graphicsBlit.Blit(renderContext, srt, rt);

                    try
                    {
                        using (var writer = new FileStream(thumbnailFile.FullName, FileMode.Create, FileAccess.Write))
                        {
                            rt.SaveAsPng(writer, 128, 128);
                        }
                    }
                    catch
                    {
                        thumbnailFile.Delete();
                        throw;
                    }

                    rt.Dispose();
                }
            }
        }
Exemplo n.º 3
0
        public override void EndRenderPass(IGameContext gameContext, IRenderContext renderContext, IRenderPass nextPass)
        {
            var renderTarget = _loadedGame.GetCurrentGameRenderTarget();
            var didAcquire   = false;

            if (renderTarget != null)
            {
                didAcquire = renderTarget.AcquireLock(1234, 1);
            }

            base.EndRenderPass(gameContext, renderContext, nextPass);

            _thumbnailSampler.WriteThumbnailIfNecessary(gameContext, renderContext);

            if (didAcquire)
            {
                renderTarget.ReleaseLock(1234);
            }

            _loadedGame.IncrementReadRenderTargetIfPossible();
        }