protected override void OnDelayedAttachAsMain(Character target)
        {
            GameObject targetGo = targetEntity.GetComponent <EntityGameObjectComponent>().GameObject;

            vibration = VibrateTarget(
                info.XAmplitude, duration, info.Frequency, info.ShouldDecay, info.DecayConstant,
                targetGo, () => { }
                );
        }
 protected VibrationRequest.Vibration VibrateTarget(float xAmplitude, float duration, int frequency,
                                                    bool shouldDecay, float decayConstant,
                                                    GameObject go, Action onComplete)
 {
     VibrationRequest.Vibration v = new VibrationRequest.Vibration(
         new Pos(go.transform.Find("Renderer")),
         xAmplitude, duration, frequency, shouldDecay, decayConstant
         );
     Timing.RunCoroutine(_VibrateTarget(v, onComplete));
     return(v);
 }
        private IEnumerator <float> _VibrateTarget(VibrationRequest.Vibration v, Action onComplete)
        {
            while (true)
            {
                float waitTime = 0.02f;
                yield return(Timing.WaitForSeconds(waitTime));

                v.Update(waitTime);
                if (v.Completed)
                {
                    onComplete();
                    break;
                }
            }
        }