Esempio n. 1
0
        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;
                }
            }
        }
Esempio n. 2
0
        public void Hit(float duration, float maxforce)
        {
            SoftImpact imp = new SoftImpact(duration, sampleRate)
            {
                maxForce = maxforce
            };

            impactrb.Enqueue(imp);
        }