public void GetForce(float[] output, int nsamples) { Array.Clear(output, 0, nsamples); while (impactrb.TryDequeue(out SoftImpact imp)) { if (numimpacts < MAXIMPACTS) { impacts[numimpacts++] = imp; } } int i = 0; while (i < numimpacts) { SoftImpact imp = impacts[i]; for (uint n = 0; n < nsamples; n++) { float impact = imp.Process(); output[n] += impact; } if (imp.t > imp.T) { imp = impacts[--numimpacts]; } else { ++i; } } }
public void Hit(float duration, float maxforce) { SoftImpact imp = new SoftImpact(duration, sampleRate) { maxForce = maxforce }; impactrb.Enqueue(imp); }