Exemple #1
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));
        }
    }
Exemple #2
0
    /// <summary>
    /// Animtate the position and scale of the root canvas of title event objects
    /// </summary>
    /// <param name="status"></param>
    /// <param name="newTitleStatus"></param>
    /// <returns></returns>
    private IEnumerator TitleCanvasFade(CanvasFadeStatus status, TitleEventStatus newTitleStatus, float posX = 0, float posY = 0)
    {
        if (status == CanvasFadeStatus.CLOSE)
        {
            for (float i = CANVAS_CLOSE_TIME; i >= 0; i -= Time.deltaTime)
            {
                float percentage = i / CANVAS_CLOSE_TIME;
                // Cell gets bigger and bigger, until it finally appears.
                gameObject.transform.localScale = Vector3.one * percentage;
                yield return(null);
            }
        }
        else if (status == CanvasFadeStatus.OPEN)
        {
            // For the x-rotation, it is restricted to 0 (vertical) to 90 (flat horizontal). For the y-axis, it is free (user turns head 360 degrees in round desk).
            // And z-rotation is set to 0 so its text is parallel to ground.
            Vector3 targetVec = PageOrg.CalcTargetEulerAngles();
            gameObject.transform.localEulerAngles = targetVec;

            // Update: since the pie menu center is anchored to center, we just need to move a little bit to save space for titles.
            gameObject.transform.position = PageOrg.CurrDocObj.transform.position;
            // Move along top (negative y-axis of AR tag, DOWN)
            gameObject.transform.Translate(-PageOrg.CurrDocObj.transform.up * (0.06f * Mathf.Sin(targetVec.x * Mathf.Deg2Rad)), Space.World);

            //gameObject.transform.Translate(new Vector3(0, 0.06f * Mathf.Sin(targetVec.x * Mathf.Deg2Rad), 0.06f * Mathf.Cos(targetVec.x * Mathf.Deg2Rad)), Space.World);

            Vector3 moveUp = new Vector3(0, 0.06f * Mathf.Cos(targetVec.x * Mathf.Deg2Rad), 0);

            for (float i = 0; i <= CANVAS_OPEN_TIME; i += Time.deltaTime)
            {
                float percentage = i / CANVAS_OPEN_TIME;
                // Cell gets bigger and bigger, until it finally appears.
                gameObject.transform.Translate(moveUp * Time.deltaTime / CANVAS_OPEN_TIME, Space.World);
                gameObject.transform.localScale = Vector3.one * percentage;
                yield return(null);
            }
            Debug.Log("New Opened Title euler angles:" + gameObject.transform.localEulerAngles);
        }
        else if (status == CanvasFadeStatus.MODIFY)
        {
            Vector3 targetVec = PageOrg.CalcTargetEulerAngles();
            gameObject.transform.localEulerAngles = targetVec;

            Vector3 oldPos = gameObject.transform.position;
            gameObject.transform.position = PageOrg.CurrDocObj.transform.position;
            // Move along top (negative y-axis of AR tag, DOWN)
            gameObject.transform.Translate(-PageOrg.CurrDocObj.transform.up * (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);
            Vector3 posDist = gameObject.transform.position - oldPos;

            for (float i = 0; i <= CANVAS_OPEN_TIME; i += Time.deltaTime)
            {
                float percentage = i / CANVAS_OPEN_TIME;
                //gameObject.transform.localEulerAngles += anglePerSec * Time.deltaTime;
                gameObject.transform.position = oldPos + posDist * percentage;
                yield return(null);
            }
            Debug.Log("Modified Title euler angles:" + gameObject.transform.localEulerAngles);
        }
    }