Advertisement
Guest User

Untitled

a guest
Sep 16th, 2013
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.89 KB | None | 0 0
  1. using System;
  2. using Holoville.HOTween;
  3. using Holoville.HOTween.Plugins;
  4. using UnityEditor;
  5. using UnityEngine;
  6. using System.Collections;
  7.  
  8. public class SceneTransitionOverlay : MonoBehaviour
  9. {
  10.     public GameObject PanelsGroup;
  11.     public GameObject LeftPanel;
  12.     public GameObject RightPanel;
  13.     public UISlider ProgressBar;
  14.     public UISprite CenterSeal;
  15.  
  16.     //Close
  17.     public float ShutterDoorClose = 0.6f;
  18.     public AnimationCurve DoorCloseAnimationCurve;
  19.  
  20.     //Open
  21.     public float ShutterDoorOpen = 0.4f;
  22.  
  23.     //General
  24.     public bool ProgressBarEnabled = false;
  25.  
  26.  
  27.     private Sequence _closeSequence;
  28.     private Sequence _openSequence;
  29.     public delegate void OnTransitionFinished();
  30.  
  31.     private OnTransitionFinished _transitionCallback;
  32.  
  33.     void Awake()
  34.     {
  35.        
  36.         //We're going to position the two panels outside of the view on game start due to varying widths. They'll
  37.         //already be most of the way out of the way from the editor, but we want to be sure
  38.         int panelOffset = Mathf.FloorToInt(UIRoot.GetPixelSizeAdjustment(LeftPanel)*(Screen.width/2f))+1;
  39.         LeftPanel.transform.localPosition = new Vector3(-panelOffset, 0, 0);
  40.         RightPanel.transform.localPosition = new Vector3(panelOffset, 0, 0);
  41.  
  42.         #region Close Door Sequence
  43.         //Now create our Sequence so we can play it forward/backward to open/close the shutter.
  44.         _closeSequence = new Sequence(new SequenceParms().AutoKill(false));
  45.  
  46.         //Bounce the two doors in:
  47.         _closeSequence.AppendCallback(() => NGUITools.SetActive(PanelsGroup, true));
  48.         _closeSequence.Insert(0, HOTween.To(LeftPanel.transform, ShutterDoorClose, new TweenParms().Prop("localPosition", new PlugVector3X(0)).Ease(DoorCloseAnimationCurve)));
  49.         _closeSequence.Insert(0, HOTween.To(RightPanel.transform, ShutterDoorClose, new TweenParms().Prop("localPosition", new PlugVector3X(0)).Ease(DoorCloseAnimationCurve)));
  50.  
  51.         //As soon as the two doors are closed, we want to enable the black strip in the middle to cover things up.
  52.         _closeSequence.AppendCallback(() => NGUITools.SetActive(CenterSeal.gameObject, true));
  53.         _closeSequence.Append(HOTween.From(CenterSeal.transform, 0.1f, new TweenParms().Prop("localScale", new PlugVector3Y(0))));
  54.  
  55.         //Now we're going to make the progress bar appear. It's going to drop down and scale up slightly at the same time.
  56.         float sequenceOffset = 0f;
  57.         if (ProgressBarEnabled)
  58.         {
  59.             sequenceOffset = _closeSequence.fullDuration;
  60.             _closeSequence.InsertCallback(sequenceOffset, () => NGUITools.SetActive(ProgressBar.gameObject, true));
  61.             _closeSequence.Insert(sequenceOffset, HOTween.From(ProgressBar.transform, 0.25f, new TweenParms().Prop("localPosition", new PlugVector3Y(-60)).Ease(EaseType.EaseOutBack)));
  62.         }
  63.         _closeSequence.AppendCallback(SequenceFinishedCallback);
  64.         Debug.Log("Appened Callback on _closeSequence at: " + _closeSequence.fullDuration);
  65.         #endregion
  66.  
  67.         #region Open Door Sequence
  68.         _openSequence = new Sequence(new SequenceParms().AutoKill(false));
  69.  
  70.         //Minimize the black stripe.
  71.         _openSequence.Insert(0f, HOTween.To(CenterSeal.transform, 0.1f, new TweenParms().Prop("localScale", new PlugVector3Y(0))));
  72.         _openSequence.AppendCallback(() => NGUITools.SetActive(CenterSeal.gameObject, false));
  73.  
  74.         //Pull the progress bar up
  75.         if (ProgressBarEnabled)
  76.         {
  77.             _openSequence.Append(HOTween.To(ProgressBar.transform, 0.15f, new TweenParms().Prop("localPosition", new PlugVector3Y(-60)).Ease(EaseType.EaseInQuad)));
  78.             _openSequence.InsertCallback(0.14f, () => NGUITools.SetActive(ProgressBar.gameObject, false));
  79.         }
  80.  
  81.         //Now pull our door halves apart.
  82.         sequenceOffset = _openSequence.fullDuration;
  83.         _openSequence.Insert(sequenceOffset, HOTween.To(LeftPanel.transform, ShutterDoorOpen, new TweenParms().Prop("localPosition", new PlugVector3X(-panelOffset)).Ease(EaseType.EaseOutQuad)));
  84.         _openSequence.Insert(sequenceOffset, HOTween.To(RightPanel.transform, ShutterDoorOpen, new TweenParms().Prop("localPosition", new PlugVector3X(panelOffset)).Ease(EaseType.EaseOutQuad).OnComplete(() => NGUITools.SetActive(PanelsGroup, false))));
  85.         _openSequence.AppendCallback(SequenceFinishedCallback);
  86.         Debug.Log("Appended Callback on _openSequence at: " + _openSequence.fullDuration);
  87.         #endregion
  88.     }
  89.  
  90.     private void SequenceFinishedCallback()
  91.     {
  92.         if (_transitionCallback != null)
  93.             _transitionCallback();
  94.     }
  95.  
  96.     private void JumpToClosePosition()
  97.     {
  98.         //Enable Everything
  99.         NGUITools.SetActive(PanelsGroup, true);
  100.         NGUITools.SetActive(CenterSeal.gameObject, true);
  101.  
  102.         if (ProgressBarEnabled)
  103.             NGUITools.SetActive(ProgressBar.gameObject, true);
  104.  
  105.         //Close the two doors
  106.         LeftPanel.transform.localPosition = new Vector3(0, 0, 0);
  107.         RightPanel.transform.localPosition = new Vector3(0, 0, 0);
  108.  
  109.         //Drop the progress bar down to final location
  110.         ProgressBar.transform.localPosition = new Vector3(0, -95, -10);
  111.  
  112.         //Maximize the black stripe.
  113.         CenterSeal.transform.localScale = new Vector3(64, 800, 0);
  114.     }
  115.  
  116.     public void CloseShutter(OnTransitionFinished callback = null, bool instant = false)
  117.     {
  118.         EditorApplication.ExecuteMenuItem("Edit/Pause");
  119.         Debug.Log("Closing Shutter. Instant: " + instant);
  120.  
  121.         _transitionCallback = callback;
  122.  
  123.         if (instant)
  124.         {
  125.             JumpToClosePosition();
  126.         }
  127.         else
  128.         {
  129.             _closeSequence.Rewind();
  130.             _closeSequence.Play();
  131.         }
  132.     }
  133.  
  134.     public void OpenShutter(OnTransitionFinished callback = null)
  135.     {
  136.         Debug.Log("Opening Shutter.");
  137.  
  138.         _transitionCallback = callback;
  139.         _openSequence.Rewind();
  140.         _openSequence.Play();
  141.     }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement