示例#1
0
文件: MyScene.cs 项目: noatom/Samples
        /// <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;
        }
示例#2
0
        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;
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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;
        }
示例#5
0
 public void SetTransition(ScreenTransition transition)
 {
     _transition = transition;
 }
示例#6
0
    /// <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);
    }
示例#7
0
    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;
        }
    }
示例#8
0
    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);
    }
示例#9
0
        /// <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
            });
        }
示例#10
0
 /// <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));
 }
示例#11
0
 public static void SetScreenTransition(ScreenTransition st)
 {
     screenTransition = st;
 }
示例#12
0
    void OnScreenTransitionFinish(ScreenTransition.State state)
    {
        switch(state) {
        case ScreenTransition.State.In:
            //notify?
            break;

        case ScreenTransition.State.Out:
            DoLoad();
            break;
        }
    }
示例#13
0
        /// <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;
        }
示例#14
0
        public void DefaultState()
        {
            var transition = new ScreenTransition();

            Assert.AreEqual(TransitionState.Hidden, transition.State);
        }
示例#15
0
 // Use this for initialization
 void Start()
 {
     pauseManager     = GetComponent <PauseManager>();
     screenTransition = mainCamera.GetComponent <ScreenTransition>();
 }
示例#16
0
    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));
        }
    }
示例#17
0
 /// <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());
示例#18
0
 private void OpenScreenTransition(ScreenTransition transition, Action transitionFinish)
 {
     transition.OnOpenTransition(() => DeactivateObject(transition.GetType(), transitionFinish));
 }
示例#19
0
    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));
    }
示例#20
0
 /// <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));
 }