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