コード例 #1
0
    /// <summary>
    /// Clear the reference objects based on current flag
    /// </summary>
    /// <param name="flag"></param>
    private void ClearReferenceObjects(RefEventStatus flag)
    {
        switch (flag)
        {
        case RefEventStatus.OFF:
            break;

        case RefEventStatus.META_DATA:
            // Hide the title
            StartCoroutine(ReferenceMetaDataFade(ChildObjFadeStatus.CLOSE));
            break;

        case RefEventStatus.PREVIEW:
            // Hide the reference. Flag: ON -> OFF.
            StartCoroutine(ReferencePreviewFade(ChildObjFadeStatus.CLOSE));
            break;

        case RefEventStatus.FULL_PAPER:
            // Hide the full paper.
            StartCoroutine(ReferenceFullPaperFade(ChildObjFadeStatus.CLOSE));
            break;

        case RefEventStatus.VIDEO:
            // Stop the video.
            StartCoroutine(PageOrg.VideoFade(VideoObj, ChildObjFadeStatus.CLOSE));
            break;

        default:
            Debug.Log("unhandled levels:" + RefFlag);
            break;
        }
    }
コード例 #2
0
 public void CloseRefDocument()
 {
     if (RefFlag == RefEventStatus.FULL_PAPER)
     {
         // Close the full paper
         refAnimationCounter++;
         StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.CLOSE, RefFlag, refAnimationCounter));
         ClearReferenceObjects(RefFlag);
         RefFlag = RefEventStatus.OFF;
         GazeGestureManager.Instance.Transition(GazeGestureManager.Instance.NavigationRecognizer);
         Debug.Log("Fullpaper closed by gesture.");
     }
 }
コード例 #3
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="newDoc"></param>
    /// <param name="newRef"></param>
    /// <param name="normPosX">Normalized position X</param>
    /// <param name="normPosY">Normalized position Y</param>
    /// <param name="newRefType"></param>
    public void UpdateRefEvent(RefEventStatus newRefEvent, string newDoc = "", string newRef = "", float normPosX = 0, float normPosY = 0)
    {
        refAnimationCounter++;

        bool docDiff = (newDoc.Length > 0);

        bool refDiff = false;

        if (newRef.Length > 0 && newRef != refFileName)
        {
            refFileName = newRef;
            refDiff     = true;
            if (PageOrganizer.DictDocuments.ContainsKey(refFileName))
            {
                refDoc = PageOrganizer.DictDocuments[refFileName];
            }
            else
            {
                refDoc = null;
            }
        }

        // Should update the canvas if the ref changed.
        bool shouldUpdate = docDiff || refDiff;

        Debug.Log(string.Format("parsing the events, name:{0}, current status:{1}, new status:{2}", refFileName, RefFlag, newRefEvent));

        // Same Ref *Diff Type: if from OFF: open canvas, open new content, else: clear old, keep canvas, and open new content
        // Diff Ref *Diff Type: if from OFF: open canvas, open new content, else: clear old, modify canvas, open new
        // Diff Ref Same Type: modify canvas, close&open new
        // Check the level info from the pen, and update the _refFlag
        switch (newRefEvent)
        {
        case RefEventStatus.OFF:
            if (RefFlag != RefEventStatus.OFF)
            {
                ClearReferenceObjects(RefFlag);
                // Close (ON -> OFF)
                StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.CLOSE, RefFlag, refAnimationCounter));
                RefFlag = RefEventStatus.OFF;
            }
            break;

        case RefEventStatus.META_DATA:
            if (RefFlag != RefEventStatus.META_DATA)
            {
                if (RefFlag == RefEventStatus.OFF)
                {
                    StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.OPEN, newRefEvent, refAnimationCounter, normPosX, normPosY));
                }
                else
                {
                    ClearReferenceObjects(RefFlag);

                    if (shouldUpdate)
                    {
                        StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.MODIFY, newRefEvent, refAnimationCounter, normPosX, normPosY));
                    }
                }

                StartCoroutine(ReferenceMetaDataFade(ChildObjFadeStatus.OPEN));
            }
            else if (shouldUpdate)
            {
                // level didn't change, but contents changed
                StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.MODIFY, newRefEvent, refAnimationCounter, normPosX, normPosY));
                StartCoroutine(ReferenceMetaDataFade(ChildObjFadeStatus.CLOSE_AND_OPEN));
            }
            RefFlag = RefEventStatus.META_DATA;
            break;

        case RefEventStatus.PREVIEW:
            if (RefFlag != RefEventStatus.PREVIEW)
            {
                if (RefFlag == RefEventStatus.OFF)
                {
                    StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.OPEN, newRefEvent, refAnimationCounter, normPosX, normPosY));
                }
                else
                {
                    ClearReferenceObjects(RefFlag);
                    if (shouldUpdate)
                    {
                        StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.MODIFY, newRefEvent, refAnimationCounter, normPosX, normPosY));
                    }
                }

                StartCoroutine(ReferencePreviewFade(ChildObjFadeStatus.OPEN));
            }
            else if (shouldUpdate)
            {
                // level didn't change, but contents changed
                StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.MODIFY, newRefEvent, refAnimationCounter, normPosX, normPosY));
                StartCoroutine(ReferencePreviewFade(ChildObjFadeStatus.CLOSE_AND_OPEN));
            }
            RefFlag = RefEventStatus.PREVIEW;
            break;

        case RefEventStatus.FULL_PAPER:
            if (RefFlag != RefEventStatus.FULL_PAPER)
            {
                if (RefFlag == RefEventStatus.OFF)
                {
                    StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.OPEN, newRefEvent, refAnimationCounter, normPosX, normPosY));
                }
                else
                {
                    ClearReferenceObjects(RefFlag);
                    if (shouldUpdate)
                    {
                        StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.MODIFY, newRefEvent, refAnimationCounter, normPosX, normPosY));
                    }
                }

                StartCoroutine(ReferenceFullPaperFade(ChildObjFadeStatus.OPEN));
            }
            else if (shouldUpdate)
            {
                // level didn't change, but contents changed
                StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.MODIFY, newRefEvent, refAnimationCounter, normPosX, normPosY));
                StartCoroutine(ReferenceFullPaperFade(ChildObjFadeStatus.CLOSE_AND_OPEN));
            }
            RefFlag = RefEventStatus.FULL_PAPER;
            break;

        case RefEventStatus.VIDEO:
            if (RefFlag != RefEventStatus.VIDEO)
            {
                if (RefFlag == RefEventStatus.OFF)
                {
                    StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.OPEN, newRefEvent, refAnimationCounter, normPosX, normPosY));
                }
                else
                {
                    ClearReferenceObjects(RefFlag);
                    if (shouldUpdate)
                    {
                        StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.MODIFY, newRefEvent, refAnimationCounter, normPosX, normPosY));
                    }
                }

                if (refDoc != null && refDoc.videoLink.Length > 0)
                {
                    StartCoroutine(PageOrg.VideoFade(VideoObj, ChildObjFadeStatus.OPEN, refDoc.videoLink));
                }
            }
            else if (shouldUpdate)
            {
                if (refDoc != null && refDoc.videoLink.Length > 0)
                {
                    StartCoroutine(ReferenceCanvasFade(CanvasFadeStatus.MODIFY, newRefEvent, refAnimationCounter, normPosX, normPosY));
                    StartCoroutine(PageOrg.VideoFade(VideoObj, ChildObjFadeStatus.CLOSE_AND_OPEN, refDoc.videoLink));
                }
            }
            RefFlag = RefEventStatus.VIDEO;
            break;

        default:
            // negative values
            Debug.Log("UpdateRef: negative values: " + newRefEvent);
            break;
        }
    }
コード例 #4
0
    //public void Init ()
    //{
    //    fullPaperGrid = FullPaperObj.GetComponent<HorizontalLayoutGroup>();

    //    bkgMetaData = MetaDataObj.GetComponent<CanvasGroup>();
    //    bkgMetaData.alpha = 0;

    //    bkgPreview = PreviewObj.GetComponent<CanvasGroup>();
    //    bkgPreview.alpha = 0;

    //    bkgFullPaper = FullPaperObj.GetComponent<CanvasGroup>();
    //    bkgFullPaper.alpha = 0;


    //    VideoObj.SetActive(false);   // YouTube Video panel not controlled by UI transparency
    //}

    #region Animations (IEnumerator)
    /// <summary>
    ///
    /// </summary>
    /// <param name="status"></param>
    /// <param name="newRefStatus"></param>
    /// <param name="refAnimationCounter"></param>
    /// <param name="normPosX">Normalized position X</param>
    /// <param name="normPosY">Normalized position Y</param>
    /// <returns></returns>
    private IEnumerator ReferenceCanvasFade(CanvasFadeStatus status, RefEventStatus newRefStatus, int refAnimationCounter, float normPosX = 0, float normPosY = 0)
    {
        // While closing, newRef is currRef. While opening or modifying, newRef is new, and _refFlag is old.
        float currHeight = RefCanvasHeight[(int)newRefStatus];

        if (status == CanvasFadeStatus.CLOSE)
        {
            for (float i = CANVAS_CLOSE_TIME; i >= 0; i -= Time.deltaTime)
            {
                float percentage = i / CANVAS_CLOSE_TIME;
                gameObject.transform.localScale = Vector3.one * percentage;
                yield return(null);
            }
        }
        else if (status == CanvasFadeStatus.OPEN)
        {
            if (newRefStatus == RefEventStatus.FULL_PAPER)
            {
                // Dynamic ones: For full papers, the width currently stores value for single page
                PreloadRefPages(refFileName);
            }

            Vector3 moveUp = Vector3.zero;
            switch (PenOrganizer.PenControlCode)
            {
            case CONTROL_CODE.DEFAULT:
                //gameObject.transform.SetParent(PageOrg.transform);

                // Rotate based on view point
                Vector3 targetVec = PageOrg.CalcTargetEulerAngles();
                gameObject.transform.localEulerAngles = targetVec;

                // Set starting position
                gameObject.transform.position = PageOrg.CurrDocObj.transform.position;
                // Move along right (x-axis of AR tag, RIGHT)
                gameObject.transform.Translate(PageOrg.CurrDocObj.transform.right * (normPosX * PAPER_WIDTH - 0.02f), Space.World);
                // Move along bottom (y-axis of AR tag, UP)
                gameObject.transform.Translate(PageOrg.CurrDocObj.transform.up * (normPosY * PAPER_HEIGHT - 0.02f - 0.06f * Mathf.Sin(targetVec.x * Mathf.Deg2Rad)), Space.World);

                // Set moving direction (world coordinate)
                moveUp = new Vector3(0, 0.06f * Mathf.Cos(targetVec.x * Mathf.Deg2Rad), 0);
                break;

            case CONTROL_CODE.SIDE_BY_SIDE:
                //gameObject.transform.SetParent(PageOrg.transform);

                // Flat on surface
                gameObject.transform.localEulerAngles = new Vector3(90, 0, 0);

                // Set starting position
                gameObject.transform.position = PageOrg.CurrDocObj.transform.position;
                // Move along right (x-axis of AR tag, RIGHT) to side by side
                gameObject.transform.Translate(PageOrg.CurrDocObj.transform.right * PAPER_WIDTH, Space.World);
                // Move along bottom (y-axis of AR tag, UP) to lower bottom
                gameObject.transform.Translate(PageOrg.CurrDocObj.transform.up * PAPER_HEIGHT * 0.65f, Space.World);

                break;

            case CONTROL_CODE.VERTICAL:
                //gameObject.transform.SetParent(PageOrg.transform);

                gameObject.transform.localEulerAngles = Vector3.zero;

                // Set starting position
                gameObject.transform.position = new Vector3(-0.1f, -0.15f, 0.8f);

                break;

            case CONTROL_CODE.HUD:
                //gameObject.transform.SetParent(PageOrg.hololensCamera.transform);

                gameObject.transform.localEulerAngles = new Vector3(PageOrg.hololensCamera.transform.localEulerAngles.x, PageOrg.hololensCamera.transform.localEulerAngles.y, 0);
                gameObject.transform.position         = PageOrg.hololensCamera.transform.position;
                gameObject.transform.Translate(PageOrg.hololensCamera.transform.forward * HUD_FORWARD, Space.World);
                break;
            }


            // Scale up, move up
            for (float i = 0; i <= CANVAS_OPEN_TIME; i += Time.deltaTime)
            {
                float percentage = i / CANVAS_OPEN_TIME;
                if (PenOrganizer.PenControlCode != CONTROL_CODE.HUD)
                {
                    gameObject.transform.Translate(moveUp * Time.deltaTime / CANVAS_OPEN_TIME, Space.World);
                }
                gameObject.transform.localScale = Vector3.one * percentage;
                yield return(null);
            }
            Debug.Log(string.Format("New Opened Reference position:{0}, euler angles:{1}", gameObject.transform.position, gameObject.transform.localEulerAngles));
        }
        else if (status == CanvasFadeStatus.MODIFY)
        {
            if (newRefStatus == RefEventStatus.FULL_PAPER)
            {
                // Dynamic ones: For full papers, the width currently stores value for single page
                PreloadRefPages(refFileName);
            }

            Vector3 oldPos  = gameObject.transform.position;
            Vector3 posDist = Vector3.zero;

            switch (PenOrganizer.PenControlCode)
            {
            case CONTROL_CODE.DEFAULT:
                // Rotate the canvas
                Vector3 targetVec = PageOrg.CalcTargetEulerAngles();
                gameObject.transform.localEulerAngles = targetVec;

                gameObject.transform.position = PageOrg.CurrDocObj.transform.position;
                // Move along right (x-axis of AR tag, RIGHT)
                gameObject.transform.Translate(PageOrg.CurrDocObj.transform.right * (normPosX * PAPER_WIDTH - 0.02f), Space.World);
                // Move along bottom (y-axis of AR tag, UP)
                gameObject.transform.Translate(PageOrg.CurrDocObj.transform.up * (normPosY * PAPER_HEIGHT - 0.02f - 0.06f * Mathf.Sin(targetVec.x * Mathf.Deg2Rad)), Space.World);
                // Move up (world)
                gameObject.transform.Translate(0, 0.06f * Mathf.Cos(targetVec.x * Mathf.Deg2Rad), 0, Space.World);

                posDist = gameObject.transform.position - oldPos;
                break;

            case CONTROL_CODE.SIDE_BY_SIDE:
                // Set starting position
                gameObject.transform.position = PageOrg.CurrDocObj.transform.position;
                // Move along right (x-axis of AR tag, RIGHT) to side by side
                gameObject.transform.Translate(PageOrg.CurrDocObj.transform.right * PAPER_WIDTH, Space.World);
                // Move along bottom (y-axis of AR tag, UP) to lower bottom
                gameObject.transform.Translate(PageOrg.CurrDocObj.transform.up * PAPER_HEIGHT * 0.65f, Space.World);

                posDist = gameObject.transform.position - oldPos;
                break;

            case CONTROL_CODE.HUD:
                // Directly go to the new place
                gameObject.transform.localEulerAngles = new Vector3(PageOrg.hololensCamera.transform.localEulerAngles.x, PageOrg.hololensCamera.transform.localEulerAngles.y, 0);
                gameObject.transform.position         = PageOrg.hololensCamera.transform.position;
                gameObject.transform.Translate(PageOrg.hololensCamera.transform.forward * HUD_FORWARD, Space.World);
                break;
            }

            if (PenOrganizer.PenControlCode != CONTROL_CODE.HUD)
            {
                for (float i = 0; i <= CANVAS_OPEN_TIME; i += Time.deltaTime)
                {
                    float percentage = i / CANVAS_OPEN_TIME;
                    gameObject.transform.position = oldPos + posDist * percentage;
                    //gameObject.transform.localEulerAngles += anglePerSec * Time.deltaTime;
                    yield return(null);
                }
            }

            Debug.Log(string.Format("Modified Reference position:{0}, euler angles:{1}", gameObject.transform.position, gameObject.transform.localEulerAngles));
        }
    }