public override bool PreDraw(SpriteBatch spriteBatch, Color lightColor)
        {
            if (projectile.timeLeft > 2)             //bandaid fix for flickering
            {
                return(false);
            }

            float  opacity = projectile.Opacity;
            float  xMod    = (1 + (Distance / 250) + (SwingRadians / GranitechSaberProjectile.SwingRadians));
            Effect effect  = mod.GetEffect("Effects/GSaber");

            effect.Parameters["baseTexture"].SetValue(mod.GetTexture("Textures/GeometricTexture_2"));
            effect.Parameters["baseColor"].SetValue(new Color(25, 132, 247).ToVector4());
            effect.Parameters["overlayTexture"].SetValue(mod.GetTexture("Textures/GeometricTexture_1"));
            effect.Parameters["overlayColor"].SetValue(new Color(99, 255, 229).ToVector4());

            effect.Parameters["xMod"].SetValue(1.5f * xMod);             //scale with the total length of the strip
            effect.Parameters["yMod"].SetValue(2.5f);

            float slashProgress = EaseFunction.EaseCircularInOut.Ease(Timer / SwingTime);

            effect.Parameters["timer"].SetValue(-Main.GlobalTime * 6);
            effect.Parameters["progress"].SetValue(slashProgress);

            Vector2 pos = BasePosition - Main.screenPosition;

            List <PrimitiveSlashArc> slashArcs = new List <PrimitiveSlashArc>();

            DrawAberration.DrawChromaticAberration(Vector2.UnitX, 4, delegate(Vector2 offset, Color colorMod)
            {
                PrimitiveSlashArc slash = new PrimitiveSlashArc
                {
                    BasePosition  = pos,
                    StartDistance = offset.X + Distance - projectile.Size.Length() / 2 * SwingDirection,
                    EndDistance   = offset.X + Distance + projectile.Size.Length() / 2 * SwingDirection,
                    AngleRange    = new Vector2(SwingRadians / 2 * SwingDirection, -SwingRadians / 2 * SwingDirection),
                    DirectionUnit = InitialVelocity,
                    Color         = colorMod * opacity * 0.5f,
                    SlashProgress = slashProgress
                };
                slashArcs.Add(slash);
            });
            PrimitiveRenderer.DrawPrimitiveShapeBatched(slashArcs.ToArray(), effect);

            Texture2D     tex           = Main.projectileTexture[projectile.type];
            SpriteEffects spriteEffects = projectile.spriteDirection == -1 ? SpriteEffects.FlipHorizontally : SpriteEffects.None;

            DrawAberration.DrawChromaticAberration(projectile.velocity, 3, delegate(Vector2 offset, Color colorMod)
            {
                spriteBatch.Draw(tex, projectile.Center + offset - Main.screenPosition, null, colorMod * opacity, projectile.rotation, tex.Size() / 2, projectile.scale, spriteEffects, 0);
            });

            return(false);
        }
Exemple #2
0
        public override bool PreDraw(SpriteBatch spriteBatch, Color lightColor)
        {
            spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, RasterizerState.CullNone, null, Main.GameViewMatrix.ZoomMatrix);

            Vector2 pos = Player.MountedCenter - Main.screenPosition;

            float progress = GetProgress();

            List <PrimitiveSlashArc> slashArcs = new List <PrimitiveSlashArc>();
            Effect effect = mod.GetEffect("Effects/NemesisBoonShader");

            effect.Parameters["white"].SetValue(Color.OrangeRed.ToVector4());
            effect.Parameters["opacity"].SetValue((float)Math.Sqrt(1 - progress));
            PrimitiveSlashArc slash = new PrimitiveSlashArc
            {
                BasePosition  = Player.Center - Main.screenPosition,
                StartDistance = (projectile.width * 0.3f) * projectile.scale,
                EndDistance   = (projectile.width * 0.85f) * (((projectile.scale - 1) * 0.5f) + 1),
                AngleRange    = new Vector2(SwingRadians / 2 * SwingDirection, -SwingRadians / 2 * SwingDirection),
                DirectionUnit = direction,
                Color         = Color.Red,
                SlashProgress = progress
            };

            slashArcs.Add(slash);
            PrimitiveRenderer.DrawPrimitiveShapeBatched(slashArcs.ToArray(), effect);

            spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, RasterizerState.CullNone, null, Main.GameViewMatrix.ZoomMatrix);

            Texture2D tex2 = Main.projectileTexture[projectile.type];
            Texture2D tex3 = ModContent.GetTexture(Texture + "_Glow");

            if (flip)
            {
                if (Empowered)
                {
                    spriteBatch.Draw(tex3, Player.Center - Main.screenPosition, null, Color.Red * (float)Math.Sqrt(1 - progress) * 0.3f, rotation + 2.355f, new Vector2(tex3.Width, tex3.Height), projectile.scale, SpriteEffects.FlipHorizontally, 0f);
                }
                spriteBatch.Draw(tex2, Player.Center - Main.screenPosition, null, lightColor * .5f, rotation + 2.355f, new Vector2(tex2.Width, tex2.Height), projectile.scale, SpriteEffects.FlipHorizontally, 0f);
            }
            else
            {
                if (Empowered)
                {
                    spriteBatch.Draw(tex3, Player.Center - Main.screenPosition, null, Color.Red * (float)Math.Sqrt(1 - progress) * 0.3f, rotation + 0.785f, new Vector2(0, tex3.Height), projectile.scale, SpriteEffects.None, 0f);
                }
                spriteBatch.Draw(tex2, Player.Center - Main.screenPosition, null, lightColor, rotation + 0.785f, new Vector2(0, tex2.Height), projectile.scale, SpriteEffects.None, 0f);
            }

            return(false);
        }
        public override bool PreDraw(SpriteBatch spriteBatch, Color lightColor)
        {
            spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, RasterizerState.CullNone, null, Main.GameViewMatrix.ZoomMatrix);

            float  opacity = (float)Math.Pow(Math.Sin(Timer * MathHelper.Pi / swingTime), 1.5f) * 0.75f;
            Effect effect  = mod.GetEffect("Effects/GSaber");

            effect.Parameters["baseTexture"].SetValue(mod.GetTexture("Textures/GeometricTexture_2"));
            effect.Parameters["baseColor"].SetValue(new Color(25, 132, 247).ToVector4());
            effect.Parameters["overlayTexture"].SetValue(mod.GetTexture("Textures/GeometricTexture_1"));
            effect.Parameters["overlayColor"].SetValue(new Color(99, 255, 229).ToVector4());

            effect.Parameters["xMod"].SetValue(1.5f);
            effect.Parameters["yMod"].SetValue(2.5f);

            float slashProgress = EaseFunction.EaseCircularInOut.Ease(Timer / swingTime);

            effect.Parameters["timer"].SetValue(-Main.GlobalTime * 6);
            effect.Parameters["progress"].SetValue(slashProgress);

            Vector2 pos = Owner.MountedCenter - Main.screenPosition;
            List <PrimitiveSlashArc> slashArcs = new List <PrimitiveSlashArc>();

            DrawAberration.DrawChromaticAberration(Vector2.UnitX, 2, delegate(Vector2 offset, Color colorMod)
            {
                PrimitiveSlashArc slash = new PrimitiveSlashArc
                {
                    BasePosition  = pos,
                    StartDistance = offset.X + projectile.Size.Length() * 0.33f,
                    EndDistance   = offset.X + projectile.Size.Length(),
                    AngleRange    = new Vector2(SwingRadians / 2 * SwingDirection, -SwingRadians / 2 * SwingDirection),
                    DirectionUnit = initialVelocity,
                    Color         = colorMod * opacity,
                    SlashProgress = slashProgress
                };
                slashArcs.Add(slash);
            });
            PrimitiveRenderer.DrawPrimitiveShapeBatched(slashArcs.ToArray(), effect);


            spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, RasterizerState.CullNone, null, Main.GameViewMatrix.ZoomMatrix);
            return(base.PreDraw(spriteBatch, lightColor));
        }
        //Temp, planning on moving sword trails to vertex strip system for convenience and lasting after projectile death
        private void DrawTrail(SpriteBatch spriteBatch, Color drawColor, float progress, float opacity)
        {
            spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, RasterizerState.CullNone, null, Main.GameViewMatrix.ZoomMatrix);

            Effect effect = mod.GetEffect("Effects/AstralSpellblade");

            effect.Parameters["baseTexture"].SetValue(mod.GetTexture("Textures/noise"));
            effect.Parameters["baseColorDark"].SetValue(new Color(67, 37, 143).ToVector4());
            effect.Parameters["baseColorLight"].SetValue(new Color(230, 55, 166).ToVector4());
            effect.Parameters["overlayTexture"].SetValue(mod.GetTexture("Textures/voronoiLooping"));
            effect.Parameters["overlayColor"].SetValue(new Color(255, 245, 245).ToVector4() * 3);

            effect.Parameters["xMod"].SetValue(0.5f);
            effect.Parameters["yMod"].SetValue(0.6f);
            effect.Parameters["overlayCoordMods"].SetValue(new Vector2(1f, 0.2f));

            effect.Parameters["timer"].SetValue(-Main.GlobalTime * 1.5f);
            effect.Parameters["progress"].SetValue(progress);

            Vector2           pos   = Owner.MountedCenter - Main.screenPosition;
            PrimitiveSlashArc slash = new PrimitiveSlashArc
            {
                BasePosition   = pos,
                StartDistance  = projectile.Size.Length() * 0.33f,
                EndDistance    = projectile.Size.Length() * 0.95f,
                AngleRange     = new Vector2(TOTAL_RADIANS / 2 * SwingDirection, -TOTAL_RADIANS / 2 * SwingDirection),
                DirectionUnit  = initialVelocity,
                Color          = Color.White * opacity,
                SlashProgress  = progress,
                RectangleCount = 30
            };

            PrimitiveRenderer.DrawPrimitiveShape(slash, effect);

            spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, RasterizerState.CullNone, null, Main.GameViewMatrix.ZoomMatrix);
        }