Пример #1
0
        public void Draw(Camera camera, float dt, Camera debugCamera = null)
        {
            Camera drawCamera = camera;

            if (debugCamera != null)
            {
                drawCamera = debugCamera;
            }

            Matrix transformMatrix = drawCamera.GetInterpolatedTransformMatrix(1);

            SpriteBatch.Begin(SpriteSortMode.Deferred,
                              BlendState.Opaque,
                              SamplerState.AnisotropicClamp,
                              null,
                              null,
                              null,
                              transformMatrix);

            BoundingRect cameraRect = camera.BoundingRect;

            SpriteBatch.DrawRectangle(new Rectangle((int)cameraRect.Min.X,
                                                    -(int)cameraRect.Min.Y,
                                                    (int)cameraRect.Width,
                                                    -(int)cameraRect.Height),
                                      Color.Orange,
                                      3);

            foreach (Entity entity in _collisionEntities)
            {
                VectorSpriteComponent vectorSpriteComp = entity.GetComponent <VectorSpriteComponent>();
                TransformComponent    transformComp    = entity.GetComponent <TransformComponent>();

                Vector2 position = transformComp.Position * FlipY;


                float cos   = (float)Math.Cos(-transformComp.Rotation);
                float sin   = (float)Math.Sin(-transformComp.Rotation);
                float scale = transformComp.Scale;

                foreach (RenderShape shape in vectorSpriteComp.RenderShapes)
                {
                    BoundingRect AABB = shape.GetAABB(scale);
                    AABB.Min += position;
                    AABB.Max += position;
                    SpriteBatch.DrawRectangle(new Rectangle((int)AABB.Left,
                                                            (int)AABB.Bottom,
                                                            (int)AABB.Width,
                                                            (int)AABB.Height),
                                              Color.BlueViolet,
                                              3);
                }
            }

            SpriteBatch.End();
        }
        protected override void OnUpdateAnimation()
        {
            if (IsAlive && !Engine.GetEntities().Contains(Entity))
            {
                Kill();
                return;
            }

            VectorSpriteComponent vectorSpriteComp = Entity.GetComponent <VectorSpriteComponent>();

            vectorSpriteComp.ChangeStretch(new Vector2(WarpWidth * Easings.QuinticEaseIn(ClampedAlpha), vectorSpriteComp.Stretch.Y));
        }
Пример #3
0
        protected override void OnUpdateAnimation()
        {
            if (IsAlive && !Engine.GetEntities().Contains(Entity))
            {
                Kill();
                return;
            }

            VectorSpriteComponent vectorSpriteComp = Entity.GetComponent <VectorSpriteComponent>();

            vectorSpriteComp.Alpha = MathHelper.Lerp(0, 1, ClampedAlpha);

            TransformComponent transformComp = Entity.GetComponent <TransformComponent>();

            transformComp.Move(Vector2.Lerp(Starting, WarpTo, ClampedAlpha) - transformComp.Position);
        }
        protected override void OnUpdateAnimation()
        {
            if (!Engine.GetEntities().Contains(Entity) && IsAlive)
            {
                Kill();
                return;
            }

            SpriteComponent spriteComp = Entity.GetComponent <SpriteComponent>();

            if (spriteComp != null)
            {
                spriteComp.Alpha = MathHelper.Lerp(1, 0, Easings.Interpolate(ClampedAlpha, EasingFunction));
            }
            VectorSpriteComponent vectorSpriteComp = Entity.GetComponent <VectorSpriteComponent>();

            if (vectorSpriteComp != null)
            {
                vectorSpriteComp.Alpha = MathHelper.Lerp(1, 0, Easings.Interpolate(ClampedAlpha, EasingFunction));
            }
        }
        protected override void OnTick(float interval)
        {
            if (!Engine.GetEntities().Contains(Entity))
            {
                Kill();
                return;
            }

            bool            flashed    = false;
            SpriteComponent spriteComp = Entity.GetComponent <SpriteComponent>();

            if (spriteComp != null)
            {
                spriteComp.Hidden = !spriteComp.Hidden;
                if (!spriteComp.Hidden)
                {
                    flashed = true;
                }
            }
            VectorSpriteComponent vectorSpriteComp = Entity.GetComponent <VectorSpriteComponent>();

            if (vectorSpriteComp != null)
            {
                vectorSpriteComp.Hidden = !vectorSpriteComp.Hidden;
                if (!vectorSpriteComp.Hidden)
                {
                    flashed = true;
                }
            }

            if (flashed)
            {
                FlashesRemaining--;
            }
            if (FlashesRemaining <= 0)
            {
                Kill();
            }
        }
Пример #6
0
        private void DrawVectorEntities(Camera camera, byte groupMask, float dt, float betweenFrameAlpha, Camera debugCamera)
        {
            Matrix transformMatrix = debugCamera == null?camera.GetInterpolatedTransformMatrix(betweenFrameAlpha) : debugCamera.GetInterpolatedTransformMatrix(betweenFrameAlpha);

            List <VertexPositionColor> _verts = new List <VertexPositionColor>();

            foreach (Entity entity in _vectorSpriteEntities)
            {
                VectorSpriteComponent vectorSpriteComp = entity.GetComponent <VectorSpriteComponent>();
                if (vectorSpriteComp.Hidden ||
                    (vectorSpriteComp.RenderGroup & groupMask) == 0)
                {
                    continue;
                }

                TransformComponent transformComp = entity.GetComponent <TransformComponent>();
                BoundingRect       boundRect     = vectorSpriteComp.GetAABB(transformComp.Scale);
                boundRect.Min += transformComp.Position;
                boundRect.Max += transformComp.Position;

                if (!boundRect.Intersects(camera.BoundingRect) && CVars.Get <bool>("debug_show_render_culling"))
                {
                    continue;
                }

                Vector2 position;
                float   rotation;
                float   transformScale;
                transformComp.Interpolate(betweenFrameAlpha, out position, out rotation, out transformScale);

                position *= FlipY;
                rotation *= -1;

                int     enableFrameSmoothingFlag = CVars.Get <bool>("graphics_frame_smoothing") ? 0 : 1;
                Vector2 stretch = vectorSpriteComp.Stretch + (vectorSpriteComp.LastStretch - vectorSpriteComp.Stretch) * (1 - betweenFrameAlpha) * enableFrameSmoothingFlag;

                float cos = (float)Math.Cos(rotation);
                float sin = (float)Math.Sin(rotation);

                foreach (RenderShape renderShape in vectorSpriteComp.RenderShapes)
                {
                    VertexPositionColor[] verts = renderShape.ComputeVertices();
                    for (int i = verts.Length - 1; i >= 0; i--)
                    {
                        VertexPositionColor vert = verts[i];
                        _verts.Add(new VertexPositionColor(new Vector3((vert.Position.X * stretch.X * cos + vert.Position.Y * stretch.Y * -1.0f * -sin) * transformScale + position.X,
                                                                       (vert.Position.X * stretch.X * sin + vert.Position.Y * stretch.Y * -1.0f * cos) * transformScale + position.Y, 0), new Color(vert.Color.ToVector4() * renderShape.TintColor.ToVector4() * vectorSpriteComp.Alpha)));
                    }
                }
            }

            if (_verts.Count > 0)
            {
                CheckUpdateProjections();
                _vectorSpriteEffect.View  = transformMatrix;
                GraphicsDevice.BlendState = BlendState.NonPremultiplied;
                foreach (EffectPass pass in _vectorSpriteEffect.CurrentTechnique.Passes)
                {
                    pass.Apply();

                    GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList,
                                                      _verts.ToArray(), 0, _verts.Count / 3);
                }
            }
        }