diff --git a/Assets/Scripts/Support/ParticleTrailController.cs b/Assets/Scripts/Support/ParticleTrailController.cs index 2dda512..6b0565c 100644 --- a/Assets/Scripts/Support/ParticleTrailController.cs +++ b/Assets/Scripts/Support/ParticleTrailController.cs @@ -40,7 +40,7 @@ public class ParticleTrailController : MonoBehaviour case ParticleTrail.Blood: { main.gravityModifierMultiplier = 0.05f; - main.startColor = SetupGradient(BloodColorKeys); + main.startColor = new ParticleSystem.MinMaxGradient(BloodColorMin, BloodColorMax); shape.scale = new Vector3(6f, 6f, 6f); break; @@ -48,13 +48,20 @@ public class ParticleTrailController : MonoBehaviour case ParticleTrail.Tracer: case ParticleTrail.Tracer2: { - // Split trails, e.g. Scrag projectile + main.startLifetime = 0.5f; + main.startColor = type == ParticleTrail.Tracer + ? new ParticleSystem.MinMaxGradient(TracerColorMin, TracerColorMax) + : new ParticleSystem.MinMaxGradient(Tracer2ColorMin, Tracer2ColorMax); + + var velocityOverLifetime = effect.velocityOverLifetime; + velocityOverLifetime.enabled = true; + velocityOverLifetime.radial = new ParticleSystem.MinMaxCurve(-30, 30); break; } case ParticleTrail.SlightBlood: { main.gravityModifierMultiplier = 0.05f; - main.startColor = SetupGradient(BloodColorKeys); + main.startColor = new ParticleSystem.MinMaxGradient(BloodColorMin, BloodColorMax); shape.scale = new Vector3(6f, 6f, 6f); emission.rateOverDistance = 1.0f / (interval + 3); @@ -63,7 +70,7 @@ public class ParticleTrailController : MonoBehaviour case ParticleTrail.VoreBall: { main.startLifetime = 0.3f; - main.startColor = SetupGradient(VoreColorKeys); + main.startColor = new ParticleSystem.MinMaxGradient(VoreColorMin, VoreColorMax); shape.scale = new Vector3(16f, 16f, 16f); break; @@ -78,15 +85,6 @@ public class ParticleTrailController : MonoBehaviour transform.position = endPosition; } - private static ParticleSystem.MinMaxGradient SetupGradient(GradientColorKey[] colorKeys) - { - return new ParticleSystem.MinMaxGradient(new Gradient - { - mode = GradientMode.Blend, - colorKeys = colorKeys, - }); - } - private static ParticleSystem.MinMaxGradient SetupGradients(GradientColorKey[] minKeys, GradientColorKey[] maxKeys) { return new ParticleSystem.MinMaxGradient @@ -97,6 +95,8 @@ public class ParticleTrailController : MonoBehaviour }; } + // TODO: these colors ought to be initialized from the Quake palette instead of being hard-coded. + // That will allow them to work with custom palettes from total conversions. private static readonly GradientColorKey[] RocketColorKeys = { new GradientColorKey(new Color32(223, 171, 39, 255), 0.167f), @@ -121,15 +121,15 @@ public class ParticleTrailController : MonoBehaviour new GradientColorKey(new Color32(47, 47, 47, 255), 1.0f), }; - private static readonly GradientColorKey[] BloodColorKeys = - { - new GradientColorKey(new Color32(31, 0, 0, 255), 0.5f), - new GradientColorKey(new Color32(55, 0, 0, 255), 1.0f), - }; - - private static readonly GradientColorKey[] VoreColorKeys = - { - new GradientColorKey(new Color32(95, 51, 63, 255), 0.5f), - new GradientColorKey(new Color32(59, 31, 35, 255), 1.0f), - }; + private static readonly Color BloodColorMin = new Color32(31, 0, 0, 255); + private static readonly Color BloodColorMax = new Color32(55, 0, 0, 255); + + private static readonly Color TracerColorMin = new Color32(27, 27, 0, 255); + private static readonly Color TracerColorMax = new Color32(83, 83, 11, 255); + + private static readonly Color Tracer2ColorMin = new Color32(147, 31, 7, 255); + private static readonly Color Tracer2ColorMax = new Color32(239, 191, 119, 255); + + private static readonly Color VoreColorMin = new Color32(95, 51, 63, 255); + private static readonly Color VoreColorMax = new Color32(59, 31, 35, 255); }