public void Draw(Projectile proj, Color color, float Saturation, float Opacity) { this.trailColor = color; EMiscShaderData miscShaderData = ResourceLoader.MagicMissile; miscShaderData.UseImage0(Entrogic.ModTexturesTable["MagicMissile0"]); miscShaderData.UseImage1(Entrogic.ModTexturesTable["MagicMissile-RainbowRod"]); miscShaderData.UseImage2(Entrogic.ModTexturesTable["MagicMissile2"]); miscShaderData.UseSaturation(-Saturation); miscShaderData.UseOpacity(Opacity); miscShaderData.Apply(null); _vertexStrip.PrepareStripWithProceduralPadding(proj.oldPos, proj.oldRot, new VertexStrip.StripColorFunction(this.StripColors), new VertexStrip.StripHalfWidthFunction(this.StripWidth), -Main.screenPosition + proj.Size / 2f, true); _vertexStrip.DrawTrail(); Main.pixelShader.CurrentTechnique.Passes[0].Apply(); }
public virtual void Apply(DrawData?drawData = null) { base.Shader.Parameters["uColor"].SetValue(this._uColor); base.Shader.Parameters["uSaturation"].SetValue(this._uSaturation); base.Shader.Parameters["uSecondaryColor"].SetValue(this._uSecondaryColor); base.Shader.Parameters["uTime"].SetValue((float)(Main._drawInterfaceGameTime.TotalGameTime.TotalSeconds % 3600.0)); base.Shader.Parameters["uOpacity"].SetValue(this._uOpacity); base.Shader.Parameters["uShaderSpecificData"].SetValue(this._shaderSpecificData); if (drawData != null) { DrawData value = drawData.Value; Vector4 zero = Vector4.Zero; if (drawData.Value.sourceRect != null) { zero = new Vector4((float)value.sourceRect.Value.X, (float)value.sourceRect.Value.Y, (float)value.sourceRect.Value.Width, (float)value.sourceRect.Value.Height); } base.Shader.Parameters["uSourceRect"].SetValue(zero); base.Shader.Parameters["uWorldPosition"].SetValue(Main.screenPosition + value.position); base.Shader.Parameters["uImageSize0"].SetValue(new Vector2((float)value.texture.Width, (float)value.texture.Height)); } else { base.Shader.Parameters["uSourceRect"].SetValue(new Vector4(0f, 0f, 4f, 4f)); } if (this._uImage0 != null) { Main.graphics.GraphicsDevice.Textures[0] = this._uImage0; Main.graphics.GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap; base.Shader.Parameters["uImageSize0"].SetValue(new Vector2((float)this._uImage0.Width, (float)this._uImage0.Height)); } if (this._uImage1 != null) { Main.graphics.GraphicsDevice.Textures[1] = this._uImage1; Main.graphics.GraphicsDevice.SamplerStates[1] = SamplerState.LinearWrap; base.Shader.Parameters["uImageSize1"].SetValue(new Vector2((float)this._uImage1.Width, (float)this._uImage1.Height)); } if (this._uImage2 != null) { Main.graphics.GraphicsDevice.Textures[2] = this._uImage2; Main.graphics.GraphicsDevice.SamplerStates[2] = SamplerState.LinearWrap; base.Shader.Parameters["uImageSize2"].SetValue(new Vector2((float)this._uImage2.Width, (float)this._uImage2.Height)); } if (this._useProjectionMatrix) { base.Shader.Parameters["uMatrixTransform0"].SetValue(EMiscShaderData.GetNormalizedTransformationmatrix(Main.GameViewMatrix)); } base.Apply(); }