/* Scripted Intro */ void Intro() { //Late-bindings ButtonListener lCancelListener = null; //later-defined CoroutineExtensions.Action lExplore = null; //later-defined CoroutineExtensions.Action lFinishIntro = null; //later-defined Coroutine lIntro = null; //later-defined, changes multiple times Camera camera = Camera.main; Vector3 initialPosition = camera.transform.position; Vector2 exitLocation = exit.transform.position; lExplore = () => { Managers.Fog.Explore(initialPosition); Managers.Fog.Explore(exitLocation, (durationOfCameraMotionToExit + durationOfStareAtExit / 2)); }; lFinishIntro = () => { camera.transform.position = initialPosition; Managers.Turn.TurnInProgress = false; lCancelListener.Remove(); }; lIntro = Managers.UI.ShowPreScreen() .Then(delegate() { lExplore(); lIntro = camera.MotionTo(exitLocation, durationOfCameraMotionToExit) .Then(new WaitForSeconds(durationOfStareAtExit)) .Then(() => { //.MotionTo must not be eval'd immediately return(lIntro = camera.MotionTo(initialPosition, durationOfCameraMotionToSpawn) .Start(this)); }) .Then(lFinishIntro) .Start(this); }).Start(this); lCancelListener = this.OnButtonDown("Cancel", () => { StopCoroutine(lIntro); lExplore(); if (lFinishIntro != null) { lFinishIntro(); } else { Managers.UI.SkipScreen(); } }); }
public static void RemoveButtonListener(this MonoBehaviour script, ButtonListener listener) { listener.Remove(); }