Esempio n. 1
0
        public List <double> GetForce(JOYSTICK_INPUT joystickInput, Dictionary <string, object> structDictonary, double elapsedTime)
        {
            SET_EFFECT eff      = (SET_EFFECT)structDictonary["SET_EFFECT"];
            PERIOD     periodic = (PERIOD)structDictonary["PERIOD"];
            ENVELOPE   env      = (ENVELOPE)structDictonary["ENVELOPE"];

            List <double> forces    = new List <double>();
            double        offset    = periodic.offset;
            double        magnitude = periodic.magnitude;
            double        phase     = periodic.phase;
            double        period    = periodic.period;

            magnitude = _calculationProvider.ApplyGain(magnitude, eff.gain);

            double angle     = ((elapsedTime / period) + (phase / _reportDescriptorProperties.MAX_PHASE) * period) * 2 * Math.PI;
            double sine      = Math.Sin(angle);
            double tempforce = sine * magnitude;

            tempforce += offset;

            double envelope = _calculationProvider.ApplyGain(_calculationProvider.GetEnvelope(env, elapsedTime, eff.duration), eff.gain);

            List <double> directions = _calculationProvider.GetDirection(eff);

            foreach (var direction in directions)
            {
                forces.Add(tempforce * envelope * direction);
            }
            return(forces);
        }
Esempio n. 2
0
        public List <double> GetForce(JOYSTICK_INPUT joystickInput, Dictionary <string, object> structDictonary, double elapsedTime)
        {
            SET_EFFECT eff = (SET_EFFECT)structDictonary["SET_EFFECT"];
            RAMP       rmp = (RAMP)structDictonary["RAMP"];
            ENVELOPE   env = (ENVELOPE)structDictonary["ENVELOPE"];

            List <double> forces = new List <double>();

            double end      = rmp.end;
            double start    = rmp.start;
            double duration = eff.duration;

            double slope     = (end - start) / duration;
            double magnitude = start + slope * elapsedTime;

            magnitude = _calculationProvider.ApplyGain(magnitude, eff.gain);

            double envelope = _calculationProvider.ApplyGain(_calculationProvider.GetEnvelope(env, elapsedTime, eff.duration), eff.gain);

            List <double> directions = _calculationProvider.GetDirection(eff);

            foreach (var direction in directions)
            {
                forces.Add(magnitude * envelope * direction);
            }

            return(forces);
        }
        public List <double> GetForce(JOYSTICK_INPUT joystickInput, Dictionary <string, object> structDictonary, double elapsedTime)
        {
            SET_EFFECT eff      = (SET_EFFECT)structDictonary["SET_EFFECT"];
            PERIOD     periodic = (PERIOD)structDictonary["PERIOD"];
            ENVELOPE   env      = (ENVELOPE)structDictonary["ENVELOPE"];

            List <double> forces    = new List <double>();
            double        offset    = periodic.offset;
            double        magnitude = periodic.magnitude;
            double        phase     = periodic.phase;
            double        period    = periodic.period;

            magnitude = _calculationProvider.ApplyGain(magnitude, eff.gain);

            double max       = offset + magnitude;
            double min       = offset - magnitude;
            double phasetime = (phase * period) / _reportDescriptorProperties.MAX_PHASE;
            double time      = elapsedTime + phasetime;
            double reminder  = time % period;
            double slope     = (max - min) / period;
            double tempforce = 0;

            tempforce  = slope * reminder;
            tempforce += min;

            double envelope = _calculationProvider.ApplyGain(_calculationProvider.GetEnvelope(env, elapsedTime, eff.duration), eff.gain);

            List <double> directions = _calculationProvider.GetDirection(eff);

            foreach (var direction in directions)
            {
                forces.Add(tempforce * envelope * direction);
            }
            return(forces);
        }
Esempio n. 4
0
        public List <double> GetForce(JOYSTICK_INPUT joystickInput, Dictionary <string, object> structDictonary, double elapsedTime)
        {
            SET_EFFECT       eff  = (SET_EFFECT)structDictonary["SET_EFFECT"];
            List <CONDITION> cond = (List <CONDITION>)structDictonary["CONDITION"];
            ENVELOPE         env  = (ENVELOPE)structDictonary["ENVELOPE"];

            List <double> forces = joystickInput.axesPositions.Select(x => 0d).ToList();

            if (previousAxesPositions != null)
            {
                var axesSpeeds = joystickInput.axesPositions.Zip(previousAxesPositions, (u, v) => u - v).ToList();

                if (previousAxesSpeeds != null)
                {
                    var axesAccelerations = axesSpeeds.Zip(previousAxesSpeeds, (u, v) => u - v).ToList();

                    forces = _calculationProvider.GetCondition(cond, axesAccelerations);
                }

                previousAxesSpeeds = axesSpeeds;
            }

            previousAxesPositions = joystickInput.axesPositions;

            return(forces);
        }
Esempio n. 5
0
        public void SetDuration(int effectBlockIndex, long loopCount)
        {
            IEffect    effect    = _effects.GetEffect(effectBlockIndex);
            SET_EFFECT setEffect = (SET_EFFECT)effect.GetParameter("SET_EFFECT");

            if (loopCount == _reportDescriptorProperties.MAX_LOOP)
            {
                ENVELOPE envelope = (ENVELOPE)effect.GetParameter("ENVELOPE");

                setEffect.duration = _reportDescriptorProperties.DURATION_INFINITE;
                envelope.fadeTime  = 0d;
            }
            else
            {
                setEffect.duration *= loopCount;
            }
        }
Esempio n. 6
0
        public List <double> GetForce(JOYSTICK_INPUT joystickInput, Dictionary <string, object> structDictonary, double elapsedTime)
        {
            ENVELOPE   env      = (ENVELOPE)structDictonary["ENVELOPE"];
            SET_EFFECT eff      = (SET_EFFECT)structDictonary["SET_EFFECT"];
            CONSTANT   constant = (CONSTANT)structDictonary["CONSTANT"];

            List <double> forces = new List <double>();

            double magnitude = _calculationProvider.ApplyGain(constant.magnitude, eff.gain);

            double envelope = _calculationProvider.ApplyGain(_calculationProvider.GetEnvelope(env, elapsedTime, eff.duration), eff.gain);

            List <double> directions = _calculationProvider.GetDirection(eff);

            foreach (var direction in directions)
            {
                forces.Add(magnitude * envelope * direction);
            }
            return(forces);
        }
Esempio n. 7
0
        public double GetEnvelope(ENVELOPE envParms, double elapsedTime, double duration)
        {
            double attackTime  = envParms.attackTime;
            double fadeTime    = envParms.fadeTime;
            double attackLevel = envParms.attackLevel;
            double fadeLevel   = envParms.fadeLevel;
            double envelope    = 1;

            if (elapsedTime < attackTime)
            {
                double attackSlope = (_reportDescriptorProperties.ENVELOPE_MAX - attackLevel) / attackTime;
                envelope = (attackLevel + (attackSlope * elapsedTime)) / _reportDescriptorProperties.ENVELOPE_MAX;
            }
            if (elapsedTime > (duration - fadeTime))
            {
                double fadeSlope = (_reportDescriptorProperties.ENVELOPE_MAX - fadeLevel) / fadeTime;
                envelope = (fadeLevel + (fadeSlope * (duration - elapsedTime))) / _reportDescriptorProperties.ENVELOPE_MAX;
            }

            return(envelope);
        }