void RegisterWordHit(ClickAreaCtrl cArea, WordGameObjectCtrl wrd)
    {
        if (wrd.isFake)
        {
            //Debug.Log("FAKE HIT");
            ScoreCtrl.FakeClick();
            UIEventManager.FakeWordHitEvent();
            return;
        }

        hitFX = PoolManager.SpawnObject(successWordHitFX);
        HitWordFX hitWordFX = hitFX.GetComponent <HitWordFX>();

        isPerfect = Mathf.Abs(currentAudioTime - wrd.hitTime) < Config.CLICK_PERFECT_TIME_OFFSET;
        if (isPerfect)
        {
            hitWordFX.perfect = true;
        }
        else
        {
            hitWordFX.perfect = false;
        }
        GameLogger.AddTap(wrd.hitTime, currentAudioTime, wrd.wordData.text);
        hitFX.transform.position = cArea.gameObject.transform.position;
        hitWordFX.runAnim();
        ScoreCtrl.WordHit(wrd.orderIndex, currentAudioTime, wrd.hitTime, isPerfect);
    }
 void RegisterHoldingWord(ClickAreaCtrl cAreaCtrl)
 {
 }
    void CheckTouches()
    {
        if (Input.touchCount < 1)
        {
            return;
        }

        foreach (Touch touch in Input.touches)
        {
            if (touch.phase == TouchPhase.Began)
            {
                RaycastHit2D hitInfo = Physics2D.Raycast(cam.ScreenToWorldPoint(touch.position), Vector2.zero);
                if (hitInfo)
                {
                    GameObject recipient = hitInfo.transform.gameObject;
                    if (recipient.tag == "ClickArea")
                    {
                        clickAreaCtrl   = recipient.GetComponent <ClickAreaCtrl>();
                        wgCollidingCtrl = clickAreaCtrl.GetCollidingWord(); // returns a word if it is not clicked already
                        if (wgCollidingCtrl != null)
                        {
                            RegisterWordHit(clickAreaCtrl, wgCollidingCtrl);
                            if (wgCollidingCtrl.wordData.duration > 0.0)
                            {
                                clickAreaCtrl.StartHolding(touch.fingerId, (float)wgCollidingCtrl.wordData.duration, currentAudioTime);
                            }
                        }
                        else
                        {
                            // empty click. kill streak
                            //RegisterWordMiss(clickAreaCtrl);
                            RegisterEmptyClick();
                        }
                    }
                }
            }

            if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)
            {
                foreach (ClickAreaCtrl caCtrl in clickAreas)
                {
                    if (touch.fingerId == caCtrl.fingerIdDown)
                    {
                        //Debug.Log("STOP HOLDING " + caCtrl.gameObject.name + " fid =" +caCtrl.fingerIdDown+ " WITH FINGER ID "+ touch.fingerId);
                        float timePressed = currentAudioTime - caCtrl.startHoldTime;
                        //Debug.Log("HODING FOR : " + timePressed + " ["+caCtrl.durationToHold+"]");
                        caCtrl.fingerIdDown   = 100;
                        caCtrl.startHoldTime  = 0;
                        caCtrl.durationToHold = 0;
                        caCtrl.StopParticles();
                    }
                }
            }

            if (touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary)
            {
                foreach (ClickAreaCtrl caCtrl in clickAreas)
                {
                    if (caCtrl.fingerIdDown != 100 && caCtrl.durationToHold != 0)
                    {
                        ScoreCtrl.AddHoldPoints(caCtrl.wordCtrl.hitTime, caCtrl.startHoldTime, caCtrl.durationToHold, currentAudioTime);
                    }
                }
            }
        }
    }