diff --git a/ModelMultiParticlePersistFX.cs b/ModelMultiParticlePersistFX.cs index 9a287d6..b8ddf6f 100644 --- a/ModelMultiParticlePersistFX.cs +++ b/ModelMultiParticlePersistFX.cs @@ -120,6 +120,8 @@ public class ModelMultiParticlePersistFX : EffectBehaviour public MultiInputCurve offset; + public MultiInputCurve force; + // Logarithmic growth applied to to the particle. // The size at time t after emission will be approximately // (Log(logarithmicGrowth * t + 1) + 1) * initialSize, assuming grow = 0. @@ -394,10 +396,9 @@ public void FixedUpdate() } finally { - particles[j].velocity = (persistentEmitters[i].pe.useWorldSpace - ? (Vector3)pVel - : persistentEmitters[i].pe.transform.InverseTransformDirection( - pVel)) - Krakensbane.GetFrameVelocity(); + particles[j].velocity = (persistentEmitters[i].pe.useWorldSpace ? + (Vector3)(pVel - Krakensbane.GetFrameVelocity()) : + persistentEmitters[i].pe.transform.InverseTransformDirection(pVel - Krakensbane.GetFrameVelocity())); particles[j].position = persistentEmitters[i].pe.useWorldSpace ? (Vector3)pPos : persistentEmitters[i].pe.transform.InverseTransformPoint(pPos); @@ -620,8 +621,12 @@ public void UpdateEmitters(float power) pkpe.pe.minEnergy = pkpe.minEnergyBase * energyPower; pkpe.pe.maxEnergy = pkpe.maxEnergyBase * energyPower; - float localVelocityPower = speed.Value(inputs); - pkpe.pe.localVelocity = pkpe.localVelocityBase * localVelocityPower; + float velocityPower = speed.Value(inputs); + pkpe.pe.localVelocity = pkpe.localVelocityBase * velocityPower; + pkpe.pe.worldVelocity = pkpe.worldVelocityBase * velocityPower; + + float forcePower = force.Value(inputs); + pkpe.pe.force = pkpe.forceBase * forcePower; pkpe.pe.sizeGrow = grow.Value(inputs); @@ -786,6 +791,7 @@ public override void OnLoad(ConfigNode node) scale = new MultiInputCurve("scale"); size = new MultiInputCurve("size"); offset = new MultiInputCurve("offset", true); + force = new MultiInputCurve("force", true); logGrow = new MultiInputCurve("logGrow", true); ConfigNode.LoadObjectFromConfig(this, node); @@ -796,6 +802,7 @@ public override void OnLoad(ConfigNode node) scale.Load(node); size.Load(node); offset.Load(node); + force.Load(node); logGrow.Load(node); @@ -813,6 +820,7 @@ public override void OnSave(ConfigNode node) scale.Save(node); size.Save(node); offset.Save(node); + force.Save(node); logGrow.Save(node); angle.Save(node); @@ -968,6 +976,7 @@ private float minInput(int id) min = Mathf.Min(min, scale.minInput[id]); min = Mathf.Min(min, size.minInput[id]); min = Mathf.Min(min, offset.minInput[id]); + min = Mathf.Min(min, force.minInput[id]); min = Mathf.Min(min, logGrow.minInput[id]); return min; @@ -982,6 +991,7 @@ private float maxInput(int id) max = Mathf.Max(max, scale.maxInput[id]); max = Mathf.Max(max, size.maxInput[id]); max = Mathf.Max(max, offset.maxInput[id]); + max = Mathf.Max(max, force.maxInput[id]); max = Mathf.Max(max, logGrow.maxInput[id]); return max; diff --git a/PersistentKSPParticleEmitter.cs b/PersistentKSPParticleEmitter.cs index 226fd7f..48b71b1 100644 --- a/PersistentKSPParticleEmitter.cs +++ b/PersistentKSPParticleEmitter.cs @@ -58,6 +58,10 @@ public class PersistentKSPParticleEmitter public readonly Vector3 localVelocityBase; + public readonly Vector3 worldVelocityBase; + + public readonly Vector3 forceBase; + public PersistentKSPParticleEmitter( GameObject go, KSPParticleEmitter pe, @@ -79,6 +83,9 @@ public class PersistentKSPParticleEmitter maxSizeBase = (float)templateKspParticleEmitter.maxSize; localVelocityBase = templateKspParticleEmitter.localVelocity; + worldVelocityBase = templateKspParticleEmitter.worldVelocity; + + forceBase = templateKspParticleEmitter.force; PersistentEmitterManager.Add(this); } diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 2afb15b..82ea695 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -33,4 +33,4 @@ // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("0.9.0.0")] -[assembly: AssemblyFileVersion("2.0.0.0")] +[assembly: AssemblyFileVersion("2.0.1.0")] diff --git a/SmokeScreenUtil.cs b/SmokeScreenUtil.cs index 145d9d1..2c123f7 100644 --- a/SmokeScreenUtil.cs +++ b/SmokeScreenUtil.cs @@ -38,7 +38,7 @@ static class SmokeScreenUtil public static string WriteRootNode(ConfigNode node) { StringBuilder builder = new StringBuilder(); - print("node.values.Count " + node.values.Count + " node.nodes.Count " + node.nodes.Count); + //print("node.values.Count " + node.values.Count + " node.nodes.Count " + node.nodes.Count); for (int i = 0; i < node.values.Count; i++) { ConfigNode.Value item = node.values[i];