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()); }
/// <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)); }
/// <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)); }