コード例 #1
0
        public void RenderSprite(Graphics.Sprite sprite, Vector2 pos, Vector2 srcPos, int srcWidth, int srcHeight, int color)
        {
            //Rectangle rc = new Rectangle(srcX, srcY, srcWidth, srcHeight);
            //if (sprite.Animation != null && sprite.Animation.Progressive && sprite.Frames != null)
            //    spriteRenderer.Draw(sprite.Frames[0].Texture, rc, new SlimDX.Vector3(0, 0, 0), new SlimDX.Vector3(x, y, CalcZ(layer) + 0.001f), new SlimDX.Color4(color));
            //spriteRenderer.Draw(sprite.Frame.Texture, rc, new SlimDX.Vector3(0, 0, 0), new SlimDX.Vector3(x, y, CalcZ(layer)), new SlimDX.Color4(color));

            Graphics.SpriteEntity entity = new Graphics.SpriteEntity();
            entity.Rectangle = new Rectangle(srcPos.x, srcPos.y, srcWidth, srcHeight);
            entity.Color     = new SlimDX.Color4(color);
            entity.Factor    = sprite.Resolution;

            long now = System.Diagnostics.Stopwatch.GetTimestamp();

            if (now - sprite.Frame.TimeStamp < (long)(Stopwatch.Frequency / popInSpeed) && popInSpeed != 0)
            {
                entity.Color.Alpha *= (now - sprite.Frame.TimeStamp) / (float)Stopwatch.Frequency * popInSpeed;
            }

            if (sprite.Animation != null && sprite.Animation.Progressive && sprite.Frames != null)
            {
                entity.Texture  = sprite.Frames[0].Texture;
                entity.Position = new SlimDX.Vector3(pos.x, pos.y, CalcZ(layer) + 0.001f);
                device.AddEntity(entity);
            }

            Graphics.SpriteEntity entity2 = new Burntime.Platform.Graphics.SpriteEntity();
            entity2.Rectangle = entity.Rectangle;
            entity2.Color     = entity.Color;
            entity2.Texture   = sprite.Frame.Texture;
            entity2.Position  = new SlimDX.Vector3(pos.x, pos.y, CalcZ(layer));
            entity2.Factor    = sprite.Resolution;
            device.AddEntity(entity2);
        }
コード例 #2
0
        public void RenderSprite(Graphics.Sprite sprite, Vector2 pos, float alpha)
        {
            Graphics.SpriteEntity entity = new Graphics.SpriteEntity();
            entity.Rectangle = new Rectangle(0, 0, sprite.OriginalSize.x, sprite.OriginalSize.y);
            entity.Color     = new SlimDX.Color4(alpha, 1, 1, 1);
            entity.Factor    = sprite.Resolution;

            long now = System.Diagnostics.Stopwatch.GetTimestamp();

            if (now - sprite.Frame.TimeStamp < (long)(Stopwatch.Frequency / popInSpeed) && popInSpeed != 0)
            {
                entity.Color.Alpha *= (now - sprite.Frame.TimeStamp) / (float)Stopwatch.Frequency * popInSpeed;
            }

            if (sprite.Animation != null && sprite.Animation.Progressive && sprite.Frames != null)
            {
                entity.Texture  = sprite.Frames[0].Texture;
                entity.Position = new SlimDX.Vector3(pos.x, pos.y, CalcZ(layer) + 0.001f);
                device.AddEntity(entity);
            }

            Graphics.SpriteEntity entity2 = new Burntime.Platform.Graphics.SpriteEntity();
            entity2.Rectangle = entity.Rectangle;
            entity2.Color     = entity.Color;
            entity2.Texture   = sprite.Frame.Texture;
            entity2.Position  = new SlimDX.Vector3(pos.x, pos.y, CalcZ(layer));
            entity2.Factor    = sprite.Resolution;
            device.AddEntity(entity2);
        }
コード例 #3
0
        public void RenderRect(Vector2 pos, Vector2 size, int color)
        {
            Graphics.SpriteEntity entity = new Graphics.SpriteEntity();
            entity.Rectangle = new Rectangle(0, 0, size.x, size.y);
            entity.Color     = new SlimDX.Color4(color);

            entity.Texture  = device.emptyTexture;
            entity.Position = new SlimDX.Vector3(pos.x, pos.y, CalcZ(layer));
            device.AddEntity(entity);
        }
コード例 #4
0
ファイル: RenderDevice.cs プロジェクト: jakobharder/burntime
        void Render(GameTime RenderTime)
        {
            lock (queue)
            {
                if (queue.Count > 0)
                {
                    render = queue.Dequeue();
                }
            }

            spriteRenderer.Begin(SpriteFlags.SortTexture | SpriteFlags.SortDepthFrontToBack | SpriteFlags.AlphaBlend);

            //if (engine.UseTextureFilter)
            //{
            //    device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Anisotropic);
            //    device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Anisotropic);
            //    device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Anisotropic);
            //}
            //else
            {
                device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Point);
                device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Point);
                device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Point);
            }

            // TODO engine scale
            spriteRenderer.Transform = SlimDX.Matrix.Scaling(new SlimDX.Vector3(renderScale, renderScale, 1));

            SlimDX.Matrix lineMatrix = SlimDX.Matrix.AffineTransformation2D(1, new SlimDX.Vector2(), 0, new SlimDX.Vector2());
            // TODO engine scale
            //lineMatrix = SlimDX.Matrix.Transformation2D(new SlimDX.Vector2(), 0, new SlimDX.Vector2(engine.Scale.x, engine.Scale.y), new SlimDX.Vector2(), 0, new SlimDX.Vector2());
            lineMatrix = SlimDX.Matrix.Transformation2D(new SlimDX.Vector2(), 0, new SlimDX.Vector2(renderScale, renderScale), new SlimDX.Vector2(), 0, new SlimDX.Vector2());
            lineMatrix = spriteRenderer.Transform;
            lineRenderer.Begin();

            // application render
            engine.MainTarget.elapsed = RenderTime.Elapsed;

            float currentFactor = 1;

            if (render != null)
            {
                foreach (RenderEntity entity in render)
                {
                    if (entity is SpriteEntity)
                    {
                        SpriteEntity sprite = entity as SpriteEntity;
                        // diposed texture links may remain in queue after direct3d reset, just skip them
                        if (sprite.Texture.Disposed)
                        {
                            continue;
                        }

                        // if sprite resolution changed, then update transform matrix
                        if (currentFactor != sprite.Factor)
                        {
                            currentFactor = sprite.Factor;
                            // TODO engine scale
                            //spriteRenderer.Transform = SlimDX.Matrix.Scaling(new SlimDX.Vector3(engine.Scale.x * sprite.Factor, engine.Scale.y * sprite.Factor, 1));
                            spriteRenderer.Transform = SlimDX.Matrix.Scaling(new SlimDX.Vector3(renderScale * sprite.Factor, renderScale * sprite.Factor, 1));
                        }

                        // recompute position for not 1:1 sprite resolutions
                        SlimDX.Vector3 pos = sprite.Position;
                        if (currentFactor != 1)
                        {
                            pos.X /= currentFactor;
                            pos.Y /= currentFactor;
                        }

                        spriteRenderer.Draw(sprite.Texture, sprite.Rectangle, new SlimDX.Vector3(0, 0, 0), pos, sprite.Color);
                    }
                    else if (entity is LineEntity)
                    {
                        LineEntity       line = entity as LineEntity;
                        SlimDX.Vector3[] vec  = new SlimDX.Vector3[] { line.Start, line.End };
                        SlimDX.Vector4[] v    = SlimDX.Vector3.Transform(vec, ref lineMatrix);

                        SlimDX.Vector2[] vec2 = new SlimDX.Vector2[] { new SlimDX.Vector2(v[0].X, v[0].Y), new SlimDX.Vector2(v[1].X, v[1].Y) };
                        lineRenderer.Draw(vec2, line.Color);
                    }
                }
            }

            lineRenderer.End();

            blendOverlay.BlockFadeOut = engine.IsLoading || blockBlend;
            blendOverlay.Render(RenderTime, spriteRenderer);
            if (engine.MusicBlend)
            {
                engine.Music.Volume = 1 - BlendState;
            }
            else
            {
                engine.Music.Volume = 1;
            }

            spriteRenderer.End();

            errorOverlay.Render(RenderTime, spriteRenderer);

            loadingOverlay.Render(RenderTime, spriteRenderer);
        }