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)); }
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(); } }
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); } } }