//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)); } }
/// <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); } }