/// <summary>
        /// Subscribes a play object to all relevant gestures - tap, pan,
        /// press, release
        /// </summary>
        /// <param name="go">Game object</param>
        /// <param name="draggable">If set to <c>true</c> is a draggable object.</param>
        public void AddAndSubscribeToGestures(GameObject go, bool draggable, bool storypage)
        {
            // add a tap gesture component if one doesn't exist
            TapGesture tg = go.GetComponent <TapGesture>();

            if (tg == null)
            {
                tg = go.AddComponent <TapGesture>();
            }
            // checking for null anyway in case adding the component didn't work
            if (tg != null)
            {
                tg.Tapped += tappedHandler; // subscribe to tap events
                Logger.Log(go.name + " subscribed to tap events");
            }
            // if this object is draggable, handle pan events
            if (draggable)
            {
                // add pan gesture component if one doesn't exist yet
                TransformGesture trg = go.GetComponent <TransformGesture>();
                if (trg == null)
                {
                    trg      = go.AddComponent <TransformGesture>();
                    trg.Type = TouchScript.Gestures.Base.TransformGestureBase.TransformType.Translation;
                }
                if (trg != null)
                {
                    trg.CombineTouchesInterval = 0.2f;
                    trg.TransformStarted      += transformStartedHandler;
                    trg.Transformed           -= transformedHandler;
                    trg.TransformCompleted    += transformCompleteHandler;
                    Logger.Log(go.name + " subscribed to pan events");
                }

                // make sure we do have a transformer if we're draggable
                Transformer tr = go.GetComponent <Transformer>();
                if (tr == null)
                {
                    tr = go.AddComponent <Transformer>();
                }
            }

            PressGesture prg = go.GetComponent <PressGesture>();

            if (prg == null)
            {
                prg = go.AddComponent <PressGesture>();
            }
            if (prg != null)
            {
                prg.Pressed += pressedHandler;
                Logger.Log(go.name + " subscribed to press events");
            }
            ReleaseGesture rg = go.GetComponent <ReleaseGesture>();

            if (rg == null)
            {
                rg = go.AddComponent <ReleaseGesture>();
            }
            if (rg != null)
            {
                rg.Released += releasedHandler;
                Logger.Log(go.name + " subscribed to release events");
            }


            // if this is a story page, handle swipe/flick events
            if (storypage)
            {
                // add flick gesture component if one doesn't exist yet
                FlickGesture fg = go.GetComponent <FlickGesture>();
                if (fg == null)
                {
                    fg = go.AddComponent <FlickGesture>();
                }
                if (fg != null)
                {
                    fg.Flicked += flickHandler;
                    fg.AddFriendlyGesture(tg);
                    fg.MinDistance       = 0.4f;
                    fg.FlickTime         = 0.5f;
                    fg.MovementThreshold = 0.1f;
                    Logger.Log(go.name + " subscribed to flick events");
                }
            }
        }