private HapticHandle CreateImpulseHandle(SideOfHaptic side)
        {
            if (TypeOfImpulse == ImpulseType.None)
            {
                return(null);
            }
            else if (TypeOfImpulse == ImpulseType.Emanation)
            {
                bool mirror  = side == SideOfHaptic.Left;
                var  impulse = ImpulseGenerator.BeginEmanatingEffect(mirror ? StartLocation.Mirror() : StartLocation, depth);

                HapticSequence seq = new HapticSequence();
                seq.LoadFromAsset(HapticSequence);

                impulse.WithEffect(seq).WithAttenuation(attenuationPercentage).WithDuration(Duration);

                return(impulse.Play());
            }
            else if (TypeOfImpulse == ImpulseType.Traversal)
            {
                bool mirror  = side == SideOfHaptic.Left;
                var  impulse = ImpulseGenerator.BeginTraversingImpulse(
                    mirror ? StartLocation.Mirror() : StartLocation,
                    mirror ? EndLocation.Mirror() : EndLocation);

                HapticSequence seq = new HapticSequence();
                seq.LoadFromAsset(HapticSequence);

                impulse.WithEffect(seq).WithAttenuation(attenuationPercentage).WithDuration(Duration);

                return(impulse.Play());
            }
            return(null);
        }
        private HapticHandle CreateHandle(SideOfHaptic side)
        {
            HapticHandle handle = null;

            if (TypeOfPlayable == PlayableType.Sequence)
            {
                HapticSequence seq = new HapticSequence();
                seq.LoadFromAsset(PlayableResourceName);

                var areaFlag = side == SideOfHaptic.Left ? Where.Mirror() : Where;
                handle = seq.CreateHandle(areaFlag);
            }
            else if (TypeOfPlayable == PlayableType.Pattern)
            {
                HapticPattern pat = new HapticPattern();
                pat.LoadFromAsset(PlayableResourceName);
                handle = pat.CreateHandle();
            }
            else if (TypeOfPlayable == PlayableType.Experience)
            {
                HapticExperience exp = new HapticExperience();
                exp.LoadFromAsset(PlayableResourceName);
                handle = exp.CreateHandle();
            }
            else if (TypeOfPlayable == PlayableType.Impulse)
            {
                return(CreateImpulseHandle(side));
            }

            return(handle);
        }
 public void Play(SideOfHaptic side)
 {
     if (ReadyToPlay)
     {
         //Debug.Log(side.ToString() + "\n", this);
         handle = MyHaptic.TryToPlayPlay(side);
         ResetDelayBetweenPlay();
     }
 }
 public HapticHandle TryToPlayPlay(SideOfHaptic side)
 {
     if (CanPlay(side))
     {
         var handle = CreateHandle(side);
         if (handle != null)
         {
             handle.Play();
             return(handle);
         }
     }
     return(null);
 }
        public bool CanPlay(SideOfHaptic side)
        {
            //Debug.Log("Can Play: " + side.ToString() + "\n");
            if (side == SideOfHaptic.None)
            {
                return(false);
            }

            if (TypeOfPlayable == PlayableType.Sequence)
            {
                return(PlayableResourceName.Length > 0 && Where != AreaFlag.None);
            }
            else if (TypeOfPlayable == PlayableType.Pattern)
            {
                return(PlayableResourceName.Length > 0);
            }
            else if (TypeOfPlayable == PlayableType.Experience)
            {
                return(PlayableResourceName.Length > 0);
            }
            else if (TypeOfPlayable == PlayableType.Impulse)
            {
                if (TypeOfImpulse == ImpulseType.None)
                {
                    return(false);
                }
                else if (TypeOfImpulse == ImpulseType.Emanation)
                {
                    return(HapticSequence.Length > 0 && StartLocation != AreaFlag.None);
                }
                else if (TypeOfImpulse == ImpulseType.Traversal)
                {
                    return(HapticSequence.Length > 0 && StartLocation != AreaFlag.None && EndLocation != AreaFlag.None);
                }
            }
            return(true);
        }