/// <summary> /// Initializes a new instance of the <see cref="MyScene" /> class. /// </summary> /// <param name="index">The index.</param> public MyScene(int index) { this.index = index; switch (this.index) { case (0): this.transition = new CrossFadeTransition(TRANSITIONTIME); break; case (1): this.transition = new PushTransition(TRANSITIONTIME, PushTransition.EffectOptions.FromLeft); break; case (2): this.transition = new ColorFadeTransition(Color.White, TRANSITIONTIME); break; case (3): this.transition = new DoorwayTransition(TRANSITIONTIME); break; case (4): this.transition = new CombTransition(TRANSITIONTIME, CombTransition.EffectOptions.Horizontal); break; case (5): this.transition = new CoverTransition(TRANSITIONTIME, CoverTransition.EffectOptions.FromLeft); break; case (6): this.transition = new CurtainsTransition(TRANSITIONTIME); break; case (7): this.transition = new FallingLinesTransition(TRANSITIONTIME); break; case (8): this.transition = new FanTransition(TRANSITIONTIME); break; case (9): this.transition = new RotateTransition(TRANSITIONTIME); break; case (10): this.transition = new ScaleTransition(TRANSITIONTIME); break; case (11): this.transition = new ShrinkAndSpinTransition(TRANSITIONTIME); break; case (12): this.transition = new SpinningSquaresTransition(TRANSITIONTIME); break; case (13): this.transition = new UncoverTransition(TRANSITIONTIME, UncoverTransition.EffectOptions.FromLeft); break; case (14): this.transition = new ZoomTransition(TRANSITIONTIME); break; case (15): this.transition = new ChequeredAppearTransition(TRANSITIONTIME); break; default: break; } this.transition.EaseFunction = easeFunction; }
public MyScene(int index) { switch (index) { case 0: this.transition = new CrossFadeTransition(TRANSITIONTIME); break; case 1: this.transition = new PushTransition(TRANSITIONTIME, PushTransition.EffectOptions.FromLeft); break; case 2: this.transition = new ColorFadeTransition(Color.White, TRANSITIONTIME); break; case 3: this.transition = new DoorwayTransition(TRANSITIONTIME); break; case 4: this.transition = new CombTransition(TRANSITIONTIME, CombTransition.EffectOptions.Horizontal); break; case 5: this.transition = new CoverTransition(TRANSITIONTIME, CoverTransition.EffectOptions.FromLeft); break; case 6: this.transition = new CurtainsTransition(TRANSITIONTIME); break; case 7: this.transition = new FallingLinesTransition(TRANSITIONTIME); break; case 8: this.transition = new FanTransition(TRANSITIONTIME); break; case 9: this.transition = new RotateTransition(TRANSITIONTIME); break; case 10: this.transition = new ScaleTransition(TRANSITIONTIME); break; case 11: this.transition = new ShrinkAndSpinTransition(TRANSITIONTIME); break; case 12: this.transition = new SpinningSquaresTransition(TRANSITIONTIME); break; case 13: this.transition = new UncoverTransition(TRANSITIONTIME, UncoverTransition.EffectOptions.FromLeft); break; case 14: this.transition = new ZoomTransition(TRANSITIONTIME); break; case 15: this.transition = new ChequeredAppearTransition(TRANSITIONTIME); break; default: break; } this.transition.EaseFunction = easeFunction; }
public ScreenManager() { _sourceRenderTarget = new RenderTarget2D(Game.GraphicsDevice, Game.Window.ClientBounds.Width, Game.Window.ClientBounds.Height); _targetRenderTarget = new RenderTarget2D(Game.GraphicsDevice, Game.Window.ClientBounds.Width, Game.Window.ClientBounds.Height); _executingScreenTransition = false; _currentTransition = new BlendTransition(); var screenTypes = typeof(Screen).Assembly.GetTypes().Where(t => typeof(Screen).IsAssignableFrom(t) && !t.IsAbstract); foreach(var screenType in screenTypes) { var screen = (Screen)Activator.CreateInstance(screenType); _screensByType.Add(screenType, screen); } }
public void SetTransition(ScreenTransition transition) { _transition = transition; }
/// <summary> /// used to reutn to the character selection screen /// </summary> public void GoToStart() { Time.timeScale = 1; if (!screenTransition) { screenTransition = FindObjectOfType <ScreenTransition>(); } for (int i = 0; i < screenTransition.transform.childCount; i++) { screenTransition.transform.GetChild(i).GetComponent <Image>().enabled = true; } if (FindObjectOfType <ScreenTransition>()) { FindObjectOfType <ScreenTransition>().CloseDoor(); } CameraControl.mInstance.enabled = false; Destroy(CameraControl.mInstance); //CameraControl.mInstance.m_Targets.Clear(); //clear the players list for (int i = 0; i < InGamePlayers.Count; i++) { InGamePlayers[i].Clear(); InGamePlayers[i].gameObject.SetActive(false); Destroy(InGamePlayers[i].gameObject, 1); } InGamePlayers = new List <PlayerStatus>(); //Quite literally a deconstrucotr PlayerWins.Clear(); PlayerWins = new Dictionary <PlayerStatus, int>(); InGamePlayers.Clear(); InGamePlayers = new List <PlayerStatus>(); m_gameMode = Gamemode_type.LAST_MAN_STANDING_DEATHMATCH; //FindObjectOfType<ScreenTransition>().CloseDoor(); mInstance = null; FinishUIPanel = null; m_bRoundOver = false; MapToLoad = null; PointSprite = null; PointContainers = null; PointsPanel = null; InGameScreenAnimator = null; mbFinishedShowingScores = false; // MenuPanel.SetActive(true); //mbLoadedIntoGame = false; mbInstanceIsMe = false; //mbFinishedPanelShown = false; mbMapLoaded = false; m_bGamePaused = false; m_bFirstTimeLoading = true; m_bDoReadyKill = true; m_bDoGlitch = true; //UIManager.Instance.gameObject.SetActive(false); ControllerManager.Instance.gameObject.SetActive(false); CharacterSelectionManager.Instance.gameObject.SetActive(false); //PlayerUIArray.Instance.gameObject.SetActive(false); UINavigation.Instance.gameObject.SetActive(false); //Destroy the singleton objects ///Destroy(PlayerUIArray.Instance.gameObject); Destroy(GameAudioPicker.Instance); Destroy(UINavigation.Instance); Destroy(CharacterSelectionManager.Instance); Destroy(ControllerManager.Instance); //Destroy(UIManager.Instance); Destroy(GameAudioPicker.Instance.gameObject); GetComponent <MusicFader>().FadeOut(); StartCoroutine(ReturnToMenu()); //Destroy(GameManagerc.Instance); //Destroy(this.gameObject); }
void OnSceneLoaded(Scene scene, LoadSceneMode mode) { //oh fukc //check if the instance is this game object //If the map to load isnt null, load it if (scene.buildIndex == 1) { m_bWinnerFound = false; m_bAllowPause = true; UINavigation LoadInstance = UINavigation.Instance; GetComponent <MusicFader>().FadeIn(); if (!m_bFirstTimeLoading) //if this isn't the first time loading into the scene { if (FindObjectOfType <ScreenTransition>()) { screenTransition = FindObjectOfType <ScreenTransition>(); for (int i = 0; i < screenTransition.transform.childCount; i++) { screenTransition.transform.GetChild(i).GetComponent <Image>().enabled = false; } } if (m_bDoGlitch) { //Reversee glitch StartCoroutine(InterpolateGlitch(true)); m_bPlayedGlitchAudio = false; m_AudioSource.clip = m_LMSDingSound; } } else { m_bFirstTimeLoading = false; } if (MapToLoad) //load the map first { GameObject go = Instantiate(MapToLoad); go.transform.position = Vector3.zero; go.transform.DetachChildren(); mInstance.mbMapLoaded = true; ControllerManager.Instance.FindSpawns(); CharacterSelectionManager.Instance.LoadPlayers(); } //If I found the finished game panel if (GameObject.Find("FinishedGamePanel")) { //Set the UI panel reference to that object FinishUIPanel = GameObject.Find("FinishedGamePanel"); //set the object buttons delegates FinishUIPanel.transform.Find("Rematch").GetComponent <Button>().onClick.AddListener(delegate { Rematch(); }); FinishUIPanel.transform.Find("Main Menu").GetComponent <Button>().onClick.AddListener(delegate { GoToStart(); }); //turn the children off (so this object can still be found if needed be); for (int i = 0; i < FinishUIPanel.transform.childCount; ++i) { FinishUIPanel.transform.GetChild(i).gameObject.SetActive(false); } } MenuPanel = GameObject.Find("PausePanel"); UIManager.Instance.SetDefaultPanel(MenuPanel); //MenuPanel.SetActive(true); //Find the points panel and populate the array. PointsPanel = GameObject.Find("PointsPanel"); InGameScreenAnimator = PointsPanel.GetComponentInParent <Animator>(); PointXPositions = new GameObject[GameObject.Find("PointXPositions").transform.childCount]; for (int i = 0; i < PointXPositions.Length; i++) { PointXPositions[i] = GameObject.Find("PointXPositions").transform.GetChild(i).gameObject; } //Populate the Y positions PointYPositions = new GameObject[GameObject.Find("PointYPositions").transform.childCount]; for (int i = 0; i < PointYPositions.Length; i++) { PointYPositions[i] = GameObject.Find("PointYPositions").transform.GetChild(i).gameObject; } //Populate the array #region Point panel, and point containers PointContainers = new GameObject[PointsPanel.transform.childCount]; GameObject[] ActivePanels = new GameObject[4 - CharacterSelectionManager.Instance.JoinedPlayers]; int ActivePanelIndex = 0; //Move the point containers depending on how many points are required. for (int i = 0; i < PointsPanel.transform.childCount; i++) { PointContainers[i] = PointsPanel.transform.GetChild(i).gameObject; for (int j = 0; j < PointContainers[i].transform.childCount; j++) { if (PointContainers[i].transform.GetChild(j).GetComponent <Animator>()) { switch (m_gameMode) { case Gamemode_type.LAST_MAN_STANDING_DEATHMATCH: PointContainers[i].transform.GetChild(j).GetComponent <Animator>().SetBool("CircuitBreaker", true); break; case Gamemode_type.HEAD_HUNTERS: PointContainers[i].transform.GetChild(j).GetComponent <Animator>().SetBool("HeadHunter", true); break; default: break; } } foreach (Image imagerenderer in PointContainers[i].transform.GetChild(j).GetComponentsInChildren <Image>()) { imagerenderer.enabled = false; } } Vector3 temp = PointContainers[i].transform.position; //Get the last object in container (portrait) PointContainers[i].transform.position = new Vector3(PointXPositions[m_iPointsIndex].transform.position.x, temp.y, temp.z); //For every object after the points neeeded, turn them off since their not required. for (int j = m_iPointsNeeded; j < PointContainers[i].transform.childCount - 1; j++) { PointContainers[i].transform.GetChild(j).gameObject.SetActive(false); } //Turn off the containers so they don't show up. } //Load player portraits. foreach (var item in CharacterSelectionManager.Instance.playerSelectedCharacter) { int playerNumber = (int)item.Key - 1; if (item.Value.GetComponent <BaseAbility>().m_CharacterPortrait) //If the character has a portrait { //Get the last object in point containers (the portrait container), get the first child (the "fill"- what is consitency) and change its sprite to the character's (item.value) sprite found in the base ability. PointContainers[playerNumber].transform.GetChild(PointContainers[playerNumber].transform.childCount - 1).GetChild(0).GetComponent <Image>().sprite = item.Value.GetComponent <BaseAbility>().m_CharacterPortrait; Image portraitOutline = PointContainers[playerNumber].transform.GetChild(PointContainers[playerNumber].transform.childCount - 1).GetChild(1).GetComponent <Image>(); portraitOutline.material.SetColor("_Color", Color.white); Move tempMove = item.Value.GetComponent <Move>(); Database ColorDatabase = Resources.Load("Database") as Database; Dictionary <string, Color> colorDictionary = new Dictionary <string, Color>(); for (int i = 0; i < ColorDatabase.colors.Length; i++) { if (!colorDictionary.ContainsKey(ColorDatabase.colors[i].PlayerType)) { colorDictionary.Add(ColorDatabase.colors[i].PlayerType, ColorDatabase.colors[i].playerColor); } } portraitOutline.color = colorDictionary[tempMove.ColorDatabaseKey]; } } //can also be used for the amount of players in the scene. XboxController[] JoinedXboxControllers = new XboxController[CharacterSelectionManager.Instance.playerSelectedCharacter.Count]; int nextIndex = 0; for (int i = 0; i < 4; i++) { if (CharacterSelectionManager.Instance.playerSelectedCharacter.ContainsKey(XboxController.First + i)) { JoinedXboxControllers[nextIndex] = XboxController.First + i; nextIndex++; } } //Turn every player's UI on. foreach (var item in JoinedXboxControllers) { PointContainers[(int)item - 1].SetActive(true); ActivePanels[ActivePanelIndex] = PointContainers[(int)item - 1]; ActivePanelIndex++; } //for (int i = PointContainers.Length - 1; i > ActivePanelIndex - 1; i--) //{ // PointContainers[i].SetActive(false); //} for (int i = 0; i < PointContainers.Length; i++) { PointContainers[i].SetActive(false); } foreach (var item in JoinedXboxControllers) { PointContainers[(int)item - 1].SetActive(true); for (int j = 0; j < PointContainers[(int)item - 1].transform.childCount; j++) { if (PointContainers[(int)item - 1].transform.GetChild(j).GetComponent <Animator>()) { switch (m_gameMode) { case Gamemode_type.LAST_MAN_STANDING_DEATHMATCH: PointContainers[(int)item - 1].transform.GetChild(j).GetComponent <Animator>().SetBool("CircuitBreaker", true); break; case Gamemode_type.HEAD_HUNTERS: PointContainers[(int)item - 1].transform.GetChild(j).GetComponent <Animator>().SetBool("HeadHunter", true); break; default: break; } } foreach (Image imagerenderer in PointContainers[(int)item - 1].transform.GetChild(j).GetComponentsInChildren <Image>()) { imagerenderer.enabled = false; } } } for (int i = 0; i < 4 - CharacterSelectionManager.Instance.JoinedPlayers; i++) { Vector3 temp = ActivePanels[i].transform.position; ActivePanels[i].transform.position = new Vector3(temp.x, PointYPositions[4 - CharacterSelectionManager.Instance.JoinedPlayers - 2].transform.GetChild(i).position.y, temp.z); } foreach (var Player in InGamePlayers) //For every player in the game. { int iPlayerIndex = XboxControllerPlayerNumbers[Player.GetComponent <ControllerSetter>().mXboxController]; for (int j = 0; j < PlayerWins[Player]; j++) //For every point the player has. { if (PlayerWins[Player] > 0) { if (PointContainers[iPlayerIndex].transform.GetChild(j).GetComponent <Animator>()) { Image temp = PointContainers[iPlayerIndex].transform.GetChild(j).GetComponent <Image>(); PointContainers[iPlayerIndex].transform.GetChild(j).GetComponent <Animator>().SetTrigger("PointGain"); PointContainers[iPlayerIndex].transform.GetChild(j).GetComponent <Image>().color = Color.blue; } } } } #endregion //PointsPanel.SetActive(false); ReadyKillContainer = GameObject.Find("StartScreen"); GameObject KillAudio = ReadyKillContainer.transform.GetChild(0).gameObject; GameObject GetReady = ReadyKillContainer.transform.GetChild(1).gameObject; //if (m_bShowReadyFight) if (m_bDoReadyKill) { StartCoroutine(ReadyKill(ReadyKillContainer)); } //find weapons and add shit to them _rbPausers.Clear(); _rbPausers = new List <RigidbodyPauser>(); foreach (Rigidbody2D item in FindObjectsOfType <Rigidbody2D>()) { if (item.GetComponentInParent <Weapon>()) { if (!item.GetComponent <RigidbodyPauser>()) { RigidbodyPauser rbp = item.gameObject.AddComponent <RigidbodyPauser>(); if (!_rbPausers.Contains(rbp)) { _rbPausers.Add(rbp); } } else { RigidbodyPauser rbp = item.gameObject.GetComponent <RigidbodyPauser>(); if (!_rbPausers.Contains(rbp)) { _rbPausers.Add(rbp); } } } } //m_bRoundReady = true; m_bDoLogoTransition = false; //PointsPanel.SetActive(false); //mInstance.mbLoadedIntoGame = true; } }
IEnumerator ReadyKill(GameObject ReadyFightContainer) { Debug.Log(ReadyFightContainer); GameObject Kill = ReadyFightContainer.transform.GetChild(0).gameObject; GameObject getReady = ReadyFightContainer.transform.GetChild(1).gameObject; Image KillImage = Kill.GetComponent <Image>(); Image GetReadyImage = getReady.GetComponent <Image>(); m_bRoundReady = false; MenuPanel.SetActive(false); ScreenTransition transition = FindObjectOfType <ScreenTransition>(); m_bAllowPause = false; if (transition) { Kill.GetComponent <Image>().enabled = false; getReady.GetComponent <Image>().enabled = false; if (!m_bRematchPressed) { InGameScreenAnimator.SetTrigger("ShowScreen"); } while (!transition.DoorOpened) { yield return(null); } //while the door hasn't opened yet. yield return(new WaitForSeconds(0.5f)); //if (m_bDoGlitch) //{ //Turn kill off KillImage.enabled = false; //turn get ready on GetReadyImage.enabled = true; //play the get ready audio getReady.GetComponent <AudioSource>().Play(); yield return(new WaitForSeconds(2)); //Turn get ready off GetReadyImage.enabled = false; //Turn kill on KillImage.enabled = true; //play kill audio Kill.GetComponent <AudioSource>().Play(); //remove screen yield return(new WaitForSeconds(1.5f)); //im sorry InGameScreenAnimator.SetTrigger("RemoveScreen"); m_bRematchPressed = false; m_bRoundReady = true; KillImage.enabled = false; m_bAllowPause = true; //ready to play //} } yield return(new WaitForSeconds(0.6f)); for (int i = 0; i < PointsPanel.transform.childCount; i++) { for (int j = 0; j < PointContainers[i].transform.childCount; j++) { foreach (Image imagerenderer in PointContainers[i].transform.GetChild(j).GetComponentsInChildren <Image>()) { imagerenderer.enabled = true; } } } yield return(null); }
/// <summary> /// Coroutine to load screen scene asynchronously /// </summary> /// <param name="screenType">Screen type</param> /// <param name="mode">Create screen mode</param> /// <param name="transition">Transition between screens</param> /// <param name="data">Data to send to the screen</param> /// <returns></returns> private IEnumerator _CreateScreen <TScreenType>(TScreenType screenType, CreateScreenMode mode, ScreenTransition transition, object data) where TScreenType : struct, IConvertible { //Check if type is an enum Type t = typeof(TScreenType); if (!t.IsEnum) { throw new Exception("Screen type is not an enumeration"); } //We can deduce the name of the scene from the screenType string screenName = screenType.ToString(CultureInfo.InvariantCulture); string scenePath = $"{CurrentThemePath}/{screenName}"; //Blocks interactions while loading if (_screenManager.NumberOfScreens != 0) { CurrentScreenGameObject.GetComponent <CanvasGroup>().blocksRaycasts = false; } //Show loading screen _ShowLoadingScreen(true); AsyncOperation asyncOp = SceneManager.LoadSceneAsync(scenePath, LoadSceneMode.Additive); while (!asyncOp.isDone) { yield return(new WaitForEndOfFrame()); } Scene loadedScene = SceneManager.GetSceneByName(screenName); while (!loadedScene.isLoaded) { yield return(new WaitForEndOfFrame()); } //Hide loading screen _ShowLoadingScreen(false); //Add scene to scene group _scenesRoots.Add(screenName, loadedScene.GetRootGameObjects()[0]); loadedScene.GetRootGameObjects()[0].name = screenName; loadedScene.GetRootGameObjects()[0].transform.SetParent(_scenesGroupGameObject.transform); //Play transition between screens yield return(_PlayScreenTransition(_scenesRoots[screenName], transition)); OnScreenSceneLoaded?.Invoke(this, new ScreenSceneLoadedEventArgs { LoadedScene = loadedScene, ScreenGameObject = _scenesRoots[screenName], Mode = mode, Screen = screenType, Transition = transition, Data = data }); }
/// <summary> /// Pop the current screen and go back to previous one /// </summary> /// <param name="transition"></param> public void PopScreen(ScreenTransition transition = ScreenTransition.None) { StartCoroutine(_PopScreen(transition)); }
public static void SetScreenTransition(ScreenTransition st) { screenTransition = st; }
void OnScreenTransitionFinish(ScreenTransition.State state) { switch(state) { case ScreenTransition.State.In: //notify? break; case ScreenTransition.State.Out: DoLoad(); break; } }
public void DefaultState() { var transition = new ScreenTransition(); Assert.AreEqual(TransitionState.Hidden, transition.State); }
// Use this for initialization void Start() { pauseManager = GetComponent <PauseManager>(); screenTransition = mainCamera.GetComponent <ScreenTransition>(); }
public async void ChangeScreen( string targetScreenId, ScreenTransition transition, float duration = 0.4f, float currentScreenTransitionDelay = 0f, float newScreenTransitionDelay = 0f, Vector2?transitionFocus = null, Action <Screen> onFinished = null, bool willDestroy = false, bool addTargetScreenToHistory = true, ScreenPayload payload = default ) { if (ChangingToScreenId != null) { print($"Warning: Already changing to {ChangingToScreenId}! Ignoring."); return; } if (ActiveScreen != null && targetScreenId == ActiveScreen.GetId()) { transition = ScreenTransition.None; newScreenTransitionDelay = duration / 2f; } if (ChangingToScreenId == targetScreenId) { print("Warning: Already changing to the same screen! Ignoring."); return; } ChangingToScreenId = targetScreenId; print($"Changing screen to {targetScreenId}"); if (transition == ScreenTransition.None) { duration = 0; } var lastScreen = ActiveScreen; var newScreen = createdScreens.Find(it => it.GetId() == targetScreenId); var newScreenWasCreated = false; if (newScreen == null) { newScreen = CreateScreen(targetScreenId); newScreenWasCreated = true; } var disableTransitions = Context.ShouldDisableMenuTransitions(); if (lastScreen != null) { if (disableTransitions) { OpaqueOverlay.Show(duration); try { await UniTask.Delay(TimeSpan.FromSeconds(duration), cancellationToken : (screenChangeCancellationTokenSource = new CancellationTokenSource()).Token); } catch { ChangingToScreenId = null; return; } lastScreen.CanvasGroup.alpha = 0; } lastScreen.State = ScreenState.Inactive; if (currentScreenTransitionDelay > 0) { try { await UniTask.Delay(TimeSpan.FromSeconds(currentScreenTransitionDelay), cancellationToken : (screenChangeCancellationTokenSource = new CancellationTokenSource()).Token); } catch { ChangingToScreenId = null; return; } } if (!disableTransitions) { lastScreen.CanvasGroup.DOFade(0, duration); if (transition != ScreenTransition.None) { switch (transition) { case ScreenTransition.In: if (transitionFocus.HasValue && transitionFocus != Vector2.zero) { var difference = new Vector2(Context.ReferenceWidth / 2f, Context.ReferenceHeight / 2f) - transitionFocus.Value; lastScreen.RectTransform.DOLocalMove(difference * 2f, duration); } lastScreen.RectTransform.DOScale(2f, duration); break; case ScreenTransition.Out: lastScreen.RectTransform.DOScale(0.5f, duration); break; case ScreenTransition.Left: lastScreen.RectTransform.DOLocalMove(new Vector3(Context.ReferenceWidth, 0), duration); break; case ScreenTransition.Right: lastScreen.RectTransform.DOLocalMove(new Vector3(-Context.ReferenceWidth, 0), duration); break; case ScreenTransition.Up: lastScreen.RectTransform.DOLocalMove(new Vector3(0, -Context.ReferenceHeight), duration); break; case ScreenTransition.Down: lastScreen.RectTransform.DOLocalMove(new Vector3(0, Context.ReferenceHeight), duration); break; case ScreenTransition.Fade: break; } } } } if (!newScreenWasCreated) { if (DoNotActivateGameObjects) { if (!newScreen.gameObject.activeSelf) { newScreen.gameObject.SetActive(true); } newScreen.ChildrenCanvases.ForEach(it => it.enabled = true); newScreen.ChildrenCanvasGroups.ForEach(it => it.enabled = true); newScreen.ChildrenGraphicRaycasters.ForEach(it => it.enabled = true); } else { newScreen.gameObject.SetActive(true); } } foreach (var listener in screenChangeListeners) { listener.OnScreenChangeStarted(lastScreen, newScreen); } if (newScreenTransitionDelay > 0) { try { await UniTask.Delay(TimeSpan.FromSeconds(newScreenTransitionDelay), cancellationToken : (screenChangeCancellationTokenSource = new CancellationTokenSource()).Token); } catch { ChangingToScreenId = null; return; } } if (payload == null) { payload = newScreen.GetDefaultPayload(); } newScreen.IntentPayload = payload; ActiveScreenId = newScreen.GetId(); newScreen.CanvasGroup.alpha = 0; newScreen.State = ScreenState.Active; var blocksRaycasts = newScreen.CanvasGroup.blocksRaycasts; newScreen.CanvasGroup.interactable = newScreen.CanvasGroup.blocksRaycasts = blocksRaycasts; // Special handling if (disableTransitions) { newScreen.CanvasGroup.alpha = 1f; /*try * { * await UniTask.Delay(TimeSpan.FromSeconds(duration), * cancellationToken: (screenChangeCancellationTokenSource = new CancellationTokenSource()).Token); * await UniTask.DelayFrame(4, * cancellationToken: (screenChangeCancellationTokenSource = new CancellationTokenSource()).Token); // UI rebuild * } * catch * { * ChangingToScreenId = null; * return; * }*/ newScreen.RectTransform.localPosition = Vector3.zero; newScreen.RectTransform.localScale = new Vector3(1, 1); OpaqueOverlay.Hide(duration); } else { newScreen.CanvasGroup.alpha = 0f; newScreen.CanvasGroup.DOFade(1f, duration); newScreen.RectTransform.DOLocalMove(Vector3.zero, duration); if (transition != ScreenTransition.None) { switch (transition) { case ScreenTransition.In: newScreen.RectTransform.localScale = new Vector3(0.5f, 0.5f); newScreen.RectTransform.DOScale(1f, duration); break; case ScreenTransition.Out: newScreen.RectTransform.localScale = new Vector3(2, 2); newScreen.RectTransform.DOScale(1f, duration); break; case ScreenTransition.Left: newScreen.RectTransform.localPosition = new Vector3(-Context.ReferenceWidth, 0); newScreen.RectTransform.localScale = new Vector3(1, 1); break; case ScreenTransition.Right: newScreen.RectTransform.localPosition = new Vector3(Context.ReferenceWidth, 0); newScreen.RectTransform.localScale = new Vector3(1, 1); break; case ScreenTransition.Up: newScreen.RectTransform.localPosition = new Vector3(0, Context.ReferenceHeight); newScreen.RectTransform.localScale = new Vector3(1, 1); break; case ScreenTransition.Down: newScreen.RectTransform.localPosition = new Vector3(0, -Context.ReferenceHeight); newScreen.RectTransform.localScale = new Vector3(1, 1); break; case ScreenTransition.Fade: break; } } } void Action() { ChangingToScreenId = null; if (lastScreen != null && lastScreen != newScreen) { if (DoNotActivateGameObjects) { lastScreen.ChildrenCanvases.ForEach(it => it.enabled = false); lastScreen.ChildrenCanvasGroups.ForEach(it => it.enabled = false); lastScreen.ChildrenGraphicRaycasters.ForEach(it => it.enabled = false); } else { lastScreen.gameObject.SetActive(false); } if (willDestroy) { DestroyScreen(lastScreen.GetId()); } } onFinished?.Invoke(newScreen); foreach (var listener in screenChangeListeners) { listener.OnScreenChangeFinished(lastScreen, newScreen); } } if (duration > 0) { Run.After(duration, Action); } else { Action(); } if (addTargetScreenToHistory) { print($"Adding {newScreen.GetId()} to history"); History.Push(new Intent(newScreen.GetId(), payload)); } }
/// <summary> Gets texture corrosponding to specified transition. </summary> /// <param name="transition"> The screen transition to get the texture for. </param> /// <returns> The texture corrosponding to the screen transition. </returns> private static Texture2D GetTexture(ScreenTransition screenTransition) => Resources.Load <Texture2D>("Shaders/PostProcessing/Screen Transitions/" + screenTransition.ToString());
private void OpenScreenTransition(ScreenTransition transition, Action transitionFinish) { transition.OnOpenTransition(() => DeactivateObject(transition.GetType(), transitionFinish)); }
void Start() { int numQuadX = camera.pixelWidth / quadPixelSize + 1; int numQuadY = camera.pixelHeight / quadPixelSize + 1; quads = new GameObject[numQuadX + 1, numQuadY + 1]; Vector3 worldStartPosition = camera.ViewportToWorldPoint(Vector3.zero); Vector3 worldOffset = camera.ScreenToWorldPoint(new Vector3(quadPixelSize, quadPixelSize, 2)) - camera.ScreenToWorldPoint(Vector3.zero); baseScale = new Vector3(worldOffset.x + overlap, worldOffset.y + overlap, 1); for (int xi = 0; xi <= numQuadX; xi++) { for (int yi = 0; yi <= numQuadY; yi++) { Vector3 position = worldStartPosition + Vector3.Scale(worldOffset, new Vector3(xi, yi, 1)); quads[xi, yi] = (GameObject)Instantiate(screenTransitionQuad, position, Quaternion.identity); quads[xi, yi].name = "Screen Transition Quad (" + xi + ", " + yi + ")"; quads[xi, yi].transform.parent = transform; quads[xi, yi].transform.localScale = baseScale; } } time = domainMin; targetTime = domainMax; nextSceneName = ""; instance = this; isTransitioning = true; StartCoroutine(setTransitioningFalse(0.5f)); }
/// <summary> /// Create a new screen for the application /// </summary> /// <param name="screenType">Screen type</param> /// <param name="mode">Create screen mode</param> /// <param name="transition">Transition between screens</param> /// <param name="data">Data to send to the screen</param> public void CreateScreen <TScreenType>(TScreenType screenType, CreateScreenMode mode, ScreenTransition transition = ScreenTransition.None, object data = null) where TScreenType : struct, IConvertible { StartCoroutine(_CreateScreen(screenType, mode, transition, data)); }