/// <summary>
 /// _s the on gem clicked.
 /// </summary>
 /// <param name="gemView">Gem view.</param>
 private void _OnGemViewClicked(GemViewComponent gemView)
 {
     //
     if (_model.GameState == GameState.PLAYING && _model.IsInputEnabled)
     {
         if (_model.SelectedGemVO == null)
         {
             //	1. SELECT FIRST GEM IN A PAIR
             _controller.SelectedGemVO = gemView.GemVO;
         }
         else if (_model.SelectedGemVO == gemView.GemVO)
         {
             //	2. DESELECT FIRST GEM IN A PAIR
             _controller.SelectedGemVO = null;
         }
         else if (Model.AreGemVOsSwappable(_model.SelectedGemVO, gemView.GemVO))
         {
             //	3. SWAP FIRST & SECOND GEM IN A PAIR
             _AttemptSwapTwoGemVOs(_model.SelectedGemVO, gemView.GemVO);
             _controller.SelectedGemVO = null;
         }
         else
         {
             //	4. DESELECTED ALL
             _controller.SelectedGemVO = null;
         }
     }
     else
     {
         if (AudioManager.IsInstantiated())
         {
             AudioManager.Instance.PlayAudioResourcePath(TripleMatchConstants.PATH_GEM_CLICK_FAIL_AUDIO, TripleMatchConstants.VOLUME_SCALE_SFX_2);
         }
     }
 }
        /// <summary>
        /// _s the do create and add gem view.
        /// </summary>
        /// <param name="nextGemVO">Next gem V.</param>
        private void _DoCreateAndAddGemView(GemVO nextGemVO)
        {
            //	CREATE AND REPARENT

            GameObject nextGemViewPrefab = Instantiate(Resources.Load(TripleMatchConstants.PATH_GEM_VIEW_PREFAB)) as GameObject;

            nextGemViewPrefab.transform.parent = _gemsParent.transform;

            //	INITIALIZE WITH DATA VO
            GemViewComponent nextGemView = nextGemViewPrefab.GetComponent <GemViewComponent>();


            //
            Vector3 spawnPointForGemsVector3 = new Vector3
                                               (
                TripleMatchConstants.COLUMN_SIZE * nextGemVO.ColumnIndex,
                5,
                transform.localPosition.z
                                               );

            //
            nextGemView.OnTweenToNewPositionEntryCompleted += _OnGemTweenToNewPositionEntryCompleted;
            nextGemView.OnClicked += _OnGemViewClicked;
            nextGemView.Initialize(nextGemVO, spawnPointForGemsVector3);

            _gemViews.Add(nextGemView);
        }
 /// <summary>
 /// _s the do destroy and remove gem view.
 /// </summary>
 /// <param name="gemView">Gem view.</param>
 private void _DoDestroyAndRemoveGemView(GemViewComponent gemView)
 {
     gemView.OnClicked -= _OnGemViewClicked;
     gemView.OnTweenToNewPositionEntryCompleted -= _OnGemTweenToNewPositionEntryCompleted;
     gemView.Destroy();
     _gemViews.Remove(gemView);
 }
        //--------------------------------------
        //  Event Handlers
        //--------------------------------------

        /// <summary>
        /// _s the on tween to new position entry completed.
        /// </summary>
        /// <param name="gemView">Gem view.</param>
        private void _OnGemTweenToNewPositionEntryCompleted(GemViewComponent gemView)
        {
            gemView.OnTweenToNewPositionEntryCompleted -= _OnGemTweenToNewPositionEntryCompleted;

            //	ARE 100% IN PROPER TARGET POSITION?
            if (_gemViews.Where(nextGemView => nextGemView.IsAtTargetPosition()).Count() == _gemViews.Count)
            {
                CoroutineManager.Instance.WaitForSecondsToCall(_controller.CheckForMatches, TripleMatchConstants.DURATION_DELAY_BEFORE_CHECK_FOR_MATCHES);
            }
        }
        /// <summary>
        /// _s the get gem view for gem vo.
        /// </summary>
        private GemViewComponent _GetGemViewForGemVo(GemVO gemVO)
        {
            GemViewComponent gemViewFound = null;

            if (_gemViews != null)
            {
                foreach (GemViewComponent gemView in _gemViews)
                {
                    if (gemView.GemVO == gemVO)
                    {
                        gemViewFound = gemView;
                    }
                }
            }

            return(gemViewFound);
        }