public void AutoScroll(Vector3 pTch)
    {
        mWasInside = mTchArea.IsInside(pTch);
        if (dodgeAutoScrlVec(pTch) || dodgeAutoScrl())
        {
            return;
        }

        //("AutoScroll" + mName.LogWith ("Frm") + mTchArea.Center.LogWith ("Cen") + pTch.LogWith ("Vect")).HtLog ();
        Vector3 dirVec = Vector3.Scale(mTchArea.Center - pTch, myDirect);

        //("AutoScroll" + dirVec.LogWith("Dir") + dirVec.magnitude.LogWith("Mag") + mScreenLength.LogWith("Screen") ).HtLog ();

        if (dirVec.magnitude < mFrmOpt.AutoScrollLimitRatio * mFrameLength)
        {
            return;
        }
        dirVec /= (mScreenLength * 1.5f);
        DoScroll(dirVec);
    }
    //  _////////////////////////////////////////////////_    _///////////////////////_    _____  Mouse  _____  H O L D  _____
    public override void MouseHold(Vector3 pWorldPo, Vector3 pScreenPo, GameObject pAlien)
    { // Set muiPrvTouchCo, muiTouchCo, muiAccumDist
        if (muiState == UiState.SPEED_LIMIT)
        {
            return;
        }
        base.MouseHold(pWorldPo, pScreenPo, pAlien);

        bool isInside = muiWagu.IsInside(pWorldPo);

        if (isInside)
        {
            if (muiState == UiState.ALIEN_WENT)
            {
                MyObjectAlienCameBack();
                SetState(UiState.SELECTED);
            }
        }
        else      // Outside Case ...

        {
            if (muiState == UiState.ALIEN_CAME)   // Alien went out ..
            {
                SetState(UiState.NONE);
                if (mAlienTarget != null)
                {
                    mAlienTarget.CellCs().Released();
                    mAlienTarget = null;
                }
                return;
            }

            if (muiLimit2Inside)          // Touch Sequence Manage ...
            {
                muiPrvTouchCo = pWorldPo; // Scroll From Outside to Inside ... No MouseDown Event ..
                if (touchStt.HasValue && touchStt.Value)
                {
                    MouseUp();
                }
                return;
            }
            else
            {
                if (MouseHoldOutsideAction(pWorldPo, pScreenPo, pAlien))
                {
                    return;
                }
            }
        }

        // Inside Case ....   Alien has come !!!!!!!
        if (pAlien != null && isInside)
        {
            if (SpeedLimit())
            {
                return;
            }

            //(mName.LogWith ("Wagu") + "   Alien is not Null ..  ").HtLog ();
            if (muiSelectedObj == null)
            {
                (mName.LogWith("Wagu") + "   SelectedObj is NULL    Accept       >>> Alien is Here <<< .. ..  ").HtLog();
                int     xIdx, yIdx;
                Vector3 v4tile = pWorldPo.AppliedDist(muiOption.scrlVert.Value, -muiWagu.mContDist);
                bool    inside = mTileObj.IsInside(v4tile, out xIdx, out yIdx);
                if (inside)
                {
                    SetState(UiState.ALIEN_CAME);
                    AlienIsInside(xIdx, yIdx, pAlien);
                    return;
                }
                else if (pAlien == muiSelectedObj) // My Case ..
                {
                    return;                        //ReleaseAliens ();
                }
            }
            else
            {
                return;
            }
        }
        //base.MouseHold (pWorldPo, pScreenPo, pAlien);
        //if (isInside) (mName.LogWith ("Wagu") + muiWagu.mContDist.LogWith ("Distance")).HtLog ();

        if (!muiOption.scrlVert.HasValue)
        {
            return; // No Scroll Allowed .. !!!!
        }
        switch (muiState)
        {
        case UiState.SCROLL_OFFLIMIT:
        case UiState.SCROLL:

            if (optnScrlEnable)
            {
                DoScroll(muiTouchCo - muiPrvTouchCo);
            }

            bool?minCase;
            if (muiWagu.OffLimitOf(out minCase))
            {
                SetState(UiState.SCROLL_OFFLIMIT);
            }
            if (muiOption.numSelection < muiTouchCnt && muiAccumDist < muiOption.accumDistLimit4Selection)   // Selection ..
            {
                muiSelectedObj = muiTouchCo.GetNearestFrom(null, dicCell);
                if (muiSelectedObj != null)
                {
                    if (muiSelectedObj.CellCs().muiSortOrStuck.HasValue&& muiSelectedObj.CellCs().muiSortOrStuck.Value)
                    {
                        return;
                    }
                    muiSelectedObj.CellCs().Selected("Drag");
                    SetState(UiState.SELECTED);
                    Ag.LogDouble(" Selected :: " + muiSelectedObj.name);
                }
            }
            return; // Translate and Finish !!!

        case UiState.SELECTED:
            (mName.LogWith("Wagu") + "   Mouse Hold :::   Selected   ").HtLog();
            muiSelectedObj.CellCs().SetCurrPosi(pWorldPo);

            if (SpeedLimit())
            {
                return;
            }

            muiSelectedObj.CellCs().dlgtAlien = null;
            SwitchingProcess("Sort");
            return;

        //        case UiState.SCROLL_OFFLIMIT:
        //            DoScroll (muiTouchCo - muiPrvTouchCo);
        //            return;


        case UiState.ALIEN_WENT:
            (mName.LogWith("Wagu") + muiState + "  Inside : " + isInside).HtLog();
            return;
        }
        return;
    }