79 lines
3.0 KiB
C#
79 lines
3.0 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System;
|
|||
|
|
namespace BookCurlPro
|
|||
|
|
{
|
|||
|
|
public class PageFlipper : MonoBehaviour
|
|||
|
|
{
|
|||
|
|
public float duration;
|
|||
|
|
public BookPro book;
|
|||
|
|
bool isFlipping = false;
|
|||
|
|
Action finish;
|
|||
|
|
float elapsedTime = 0;
|
|||
|
|
//center x-coordinate
|
|||
|
|
float xc, pageWidth, pageHeight;
|
|||
|
|
FlipMode flipMode;
|
|||
|
|
public static void FlipPage(BookPro book, float duration, FlipMode mode, Action OnComplete)
|
|||
|
|
{
|
|||
|
|
PageFlipper flipper = book.GetComponent<PageFlipper>();
|
|||
|
|
if (!flipper)
|
|||
|
|
flipper = book.gameObject.AddComponent<PageFlipper>();
|
|||
|
|
flipper.enabled = true;
|
|||
|
|
flipper.book = book;
|
|||
|
|
flipper.isFlipping = true;
|
|||
|
|
flipper.duration = duration - Time.deltaTime;
|
|||
|
|
flipper.finish = OnComplete;
|
|||
|
|
flipper.xc = (book.EndBottomLeft.x + book.EndBottomRight.x) / 2;
|
|||
|
|
flipper.pageWidth = (book.EndBottomRight.x - book.EndBottomLeft.x) / 2;
|
|||
|
|
flipper.pageHeight = Mathf.Abs(book.EndBottomRight.y);
|
|||
|
|
flipper.flipMode = mode;
|
|||
|
|
flipper.elapsedTime = 0;
|
|||
|
|
float x;
|
|||
|
|
if (mode == FlipMode.RightToLeft)
|
|||
|
|
{
|
|||
|
|
x = flipper.xc + (flipper.pageWidth * 0.99f);
|
|||
|
|
float y = (-flipper.pageHeight / (flipper.pageWidth * flipper.pageWidth)) * (x - flipper.xc) * (x - flipper.xc);
|
|||
|
|
book.DragRightPageToPoint(new Vector3(x, y, 0));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
x = flipper.xc - (flipper.pageWidth * 0.99f);
|
|||
|
|
float y = (-flipper.pageHeight / (flipper.pageWidth * flipper.pageWidth)) * (x - flipper.xc) * (x - flipper.xc);
|
|||
|
|
book.DragLeftPageToPoint(new Vector3(x, y, 0));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// Update is called once per frame
|
|||
|
|
void Update()
|
|||
|
|
{
|
|||
|
|
if (isFlipping)
|
|||
|
|
{
|
|||
|
|
elapsedTime += Time.deltaTime;
|
|||
|
|
if (elapsedTime < duration)
|
|||
|
|
{
|
|||
|
|
if (flipMode == FlipMode.RightToLeft)
|
|||
|
|
{
|
|||
|
|
float x = xc + (0.5f - elapsedTime / duration) * 2 * (pageWidth);
|
|||
|
|
float y = (-pageHeight / (pageWidth * pageWidth)) * (x - xc) * (x - xc);
|
|||
|
|
book.UpdateBookRTLToPoint(new Vector3(x, y, 0));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
float x = xc - (0.5f - elapsedTime / duration) * 2 * (pageWidth);
|
|||
|
|
float y = (-pageHeight / (pageWidth * pageWidth)) * (x - xc) * (x - xc);
|
|||
|
|
book.UpdateBookLTRToPoint(new Vector3(x, y, 0));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
book.Flip();
|
|||
|
|
isFlipping = false;
|
|||
|
|
this.enabled = false;
|
|||
|
|
if (finish != null)
|
|||
|
|
finish();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|