Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using Holoville.HOTween;
- using Holoville.HOTween.Plugins;
- using UnityEditor;
- using UnityEngine;
- using System.Collections;
- public class SceneTransitionOverlay : MonoBehaviour
- {
- public GameObject PanelsGroup;
- public GameObject LeftPanel;
- public GameObject RightPanel;
- public UISlider ProgressBar;
- public UISprite CenterSeal;
- //Close
- public float ShutterDoorClose = 0.6f;
- public AnimationCurve DoorCloseAnimationCurve;
- //Open
- public float ShutterDoorOpen = 0.4f;
- //General
- public bool ProgressBarEnabled = false;
- private Sequence _closeSequence;
- private Sequence _openSequence;
- public delegate void OnTransitionFinished();
- private OnTransitionFinished _transitionCallback;
- void Awake()
- {
- //We're going to position the two panels outside of the view on game start due to varying widths. They'll
- //already be most of the way out of the way from the editor, but we want to be sure
- int panelOffset = Mathf.FloorToInt(UIRoot.GetPixelSizeAdjustment(LeftPanel)*(Screen.width/2f))+1;
- LeftPanel.transform.localPosition = new Vector3(-panelOffset, 0, 0);
- RightPanel.transform.localPosition = new Vector3(panelOffset, 0, 0);
- #region Close Door Sequence
- //Now create our Sequence so we can play it forward/backward to open/close the shutter.
- _closeSequence = new Sequence(new SequenceParms().AutoKill(false));
- //Bounce the two doors in:
- _closeSequence.AppendCallback(() => NGUITools.SetActive(PanelsGroup, true));
- _closeSequence.Insert(0, HOTween.To(LeftPanel.transform, ShutterDoorClose, new TweenParms().Prop("localPosition", new PlugVector3X(0)).Ease(DoorCloseAnimationCurve)));
- _closeSequence.Insert(0, HOTween.To(RightPanel.transform, ShutterDoorClose, new TweenParms().Prop("localPosition", new PlugVector3X(0)).Ease(DoorCloseAnimationCurve)));
- //As soon as the two doors are closed, we want to enable the black strip in the middle to cover things up.
- _closeSequence.AppendCallback(() => NGUITools.SetActive(CenterSeal.gameObject, true));
- _closeSequence.Append(HOTween.From(CenterSeal.transform, 0.1f, new TweenParms().Prop("localScale", new PlugVector3Y(0))));
- //Now we're going to make the progress bar appear. It's going to drop down and scale up slightly at the same time.
- float sequenceOffset = 0f;
- if (ProgressBarEnabled)
- {
- sequenceOffset = _closeSequence.fullDuration;
- _closeSequence.InsertCallback(sequenceOffset, () => NGUITools.SetActive(ProgressBar.gameObject, true));
- _closeSequence.Insert(sequenceOffset, HOTween.From(ProgressBar.transform, 0.25f, new TweenParms().Prop("localPosition", new PlugVector3Y(-60)).Ease(EaseType.EaseOutBack)));
- }
- _closeSequence.AppendCallback(SequenceFinishedCallback);
- Debug.Log("Appened Callback on _closeSequence at: " + _closeSequence.fullDuration);
- #endregion
- #region Open Door Sequence
- _openSequence = new Sequence(new SequenceParms().AutoKill(false));
- //Minimize the black stripe.
- _openSequence.Insert(0f, HOTween.To(CenterSeal.transform, 0.1f, new TweenParms().Prop("localScale", new PlugVector3Y(0))));
- _openSequence.AppendCallback(() => NGUITools.SetActive(CenterSeal.gameObject, false));
- //Pull the progress bar up
- if (ProgressBarEnabled)
- {
- _openSequence.Append(HOTween.To(ProgressBar.transform, 0.15f, new TweenParms().Prop("localPosition", new PlugVector3Y(-60)).Ease(EaseType.EaseInQuad)));
- _openSequence.InsertCallback(0.14f, () => NGUITools.SetActive(ProgressBar.gameObject, false));
- }
- //Now pull our door halves apart.
- sequenceOffset = _openSequence.fullDuration;
- _openSequence.Insert(sequenceOffset, HOTween.To(LeftPanel.transform, ShutterDoorOpen, new TweenParms().Prop("localPosition", new PlugVector3X(-panelOffset)).Ease(EaseType.EaseOutQuad)));
- _openSequence.Insert(sequenceOffset, HOTween.To(RightPanel.transform, ShutterDoorOpen, new TweenParms().Prop("localPosition", new PlugVector3X(panelOffset)).Ease(EaseType.EaseOutQuad).OnComplete(() => NGUITools.SetActive(PanelsGroup, false))));
- _openSequence.AppendCallback(SequenceFinishedCallback);
- Debug.Log("Appended Callback on _openSequence at: " + _openSequence.fullDuration);
- #endregion
- }
- private void SequenceFinishedCallback()
- {
- if (_transitionCallback != null)
- _transitionCallback();
- }
- private void JumpToClosePosition()
- {
- //Enable Everything
- NGUITools.SetActive(PanelsGroup, true);
- NGUITools.SetActive(CenterSeal.gameObject, true);
- if (ProgressBarEnabled)
- NGUITools.SetActive(ProgressBar.gameObject, true);
- //Close the two doors
- LeftPanel.transform.localPosition = new Vector3(0, 0, 0);
- RightPanel.transform.localPosition = new Vector3(0, 0, 0);
- //Drop the progress bar down to final location
- ProgressBar.transform.localPosition = new Vector3(0, -95, -10);
- //Maximize the black stripe.
- CenterSeal.transform.localScale = new Vector3(64, 800, 0);
- }
- public void CloseShutter(OnTransitionFinished callback = null, bool instant = false)
- {
- EditorApplication.ExecuteMenuItem("Edit/Pause");
- Debug.Log("Closing Shutter. Instant: " + instant);
- _transitionCallback = callback;
- if (instant)
- {
- JumpToClosePosition();
- }
- else
- {
- _closeSequence.Rewind();
- _closeSequence.Play();
- }
- }
- public void OpenShutter(OnTransitionFinished callback = null)
- {
- Debug.Log("Opening Shutter.");
- _transitionCallback = callback;
- _openSequence.Rewind();
- _openSequence.Play();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement