Пример #1
0
        public HapticHandle CreateCodeHaptic()
        {
            //Debug.Log("Hit\n");
            CodeSequence seq = new CodeSequence();

            seq.AddEffect(0.0f, new CodeEffect("buzz", .2f));
            seq.AddEffect(0.3f, new CodeEffect("click", 0.0f));
            //seq.Play(AreaFlag.All_Areas);

            CodePattern pat = new CodePattern();

            pat.AddSequence(0.5f, AreaFlag.Lower_Ab_Both, seq);
            pat.AddSequence(1.0f, AreaFlag.Mid_Ab_Both, seq);
            pat.AddSequence(1.5f, AreaFlag.Upper_Ab_Both, seq);
            pat.AddSequence(2.0f, AreaFlag.Chest_Both, seq);
            pat.AddSequence(2.5f, AreaFlag.Shoulder_Both, seq);
            pat.AddSequence(2.5f, AreaFlag.Back_Both, seq);
            pat.AddSequence(3.0f, AreaFlag.Upper_Arm_Both, seq);
            pat.AddSequence(3.5f, AreaFlag.Forearm_Both, seq);
            return(pat.Play());
        }
Пример #2
0
        /// <summary>
        /// Begins an emanating impulse at the provided origin.
        /// Defaults to a simple 'hum' effect if you don't call WithEffect()
        /// Remember to call .Play() on the returned impulse.
        /// </summary>
        /// <param name="origin">The starting AreaFlag. Only provided a single AreaFlag pad.</param>
        /// <param name="depth">How many pads this will traverse before ending (will not reverb off 'end paths')</param>
        /// <returns>An Impulse object which can be given a CodeSequence, duration or Attenuation parameters
        /// Remember to call Play() on the returned object to begin the emanation
        /// <returns>The Impulse that you can call .Play() on to play a create a HapticHandle referencing that Haptic</returns>
        public static Impulse BeginEmanatingEffect(AreaFlag origin, int depth = 2)
        {
            if (depth < 0)
            {
                Debug.LogError("Depth for emanation is negative: " + depth + "\n\tThis will be clamped to 0 under the hood, negative numbers will likely do nothing");
            }

            CreateImpulse creation = delegate(float attenuation, float totalLength, CodeSequence seq)
            {
                CodePattern emanation = new CodePattern();
                var         stages    = _grapher.BFS(origin, depth);

                float timeStep = totalLength / stages.Count;
                float time     = 0.0f;
                for (int i = 0; i < stages.Count; i++)
                {
                    AreaFlag area = AreaFlag.None;
                    foreach (var item in stages[i])
                    {
                        area |= item.Location;
                    }
                    if (i > 0)
                    {
                        seq.Strength *= (1.0f - attenuation);
                    }

                    seq.Strength = Mathf.Clamp((float)seq.Strength, 0, 1.0f);

                    emanation.AddSequence(time, area, seq);
                    time += timeStep;
                }

                return(emanation.Play());
            };

            return(new Impulse(creation));
        }
Пример #3
0
        /// <summary>
        /// Begins a traversing impulse at the provided origin.
        /// Will play on pads that are the origin, destination or 'in-between' them.
        /// Defaults to a simple 'hum' effect if you don't call WithEffect()
        /// Remember to call .Play() on the returned impulse.
        /// </summary>
        /// <param name="origin">The starting AreaFlag. Only provided a single AreaFlag pad.</param>
        /// <param name="destination">The ending location for the traversing impulse.</param>
        /// <returns>The Impulse that you can call .Play() on to play a create a HapticHandle referencing that Haptic</returns>
        public static Impulse BeginTraversingImpulse(AreaFlag origin, AreaFlag destination)
        {
            CreateImpulse creation = delegate(float attenuation, float totalLength, CodeSequence seq)
            {
                CodePattern emanation = new CodePattern();
                var         stages    = _grapher.Dijkstras(origin, destination);

                float timeStep = totalLength / stages.Count;
                float time     = 0.0f;
                for (int i = 0; i < stages.Count; i++)
                {
                    if (i > 0)
                    {
                        seq.Strength *= (1.0f - attenuation);
                    }
                    emanation.AddSequence(time, stages[i].Location, seq);
                    time += timeStep;
                }

                return(emanation.Play());
            };

            return(new Impulse(creation));
        }