Exemple #1
0
        protected override void OnEnable()
        {
            screenContainer.renderer.isVisible = true;
            screenContainer.material.SetFloat("alpha", 1f);
            CoroutineExecutor.Add(Routine(), true);

            IEnumerator Routine()
            {
                var backBlack = new Entity().CreateComponent <Renderer>();

                backBlack.SetParent(screenContainer.renderer);
                backBlack.Position = new Vector3(0f, 0f, -2f);
                backBlack.size     = screenContainer.renderer.size;
                backBlack.onRender = (_, output) => Graphics.Clear(output, Color4.Black);

                GUIElement[] labelContainers = new GUIElement[data.captions.Length];
                GUIElement[] labels          = new GUIElement[data.captions.Length];

                for (int i = 0; i < data.captions.Length; i++)
                {
                    labelContainers[i] = GUIElement.CreateContainer(screenContainer.renderer, new Vector3(0f, (data.captions.Length - 1 - i * 2 + (i == 0 ? 0.2f : 0f)) * data.fontSize * data.interval, -3f), new Vector2(19.2f, 2f * data.fontSize), "Game/Alpha");
                    labels[i]          = GUIElement.CreateEmpty(labelContainers[i].renderer, new Vector3(0f, 0f, 0f), new Vector2(19.2f, 2f * data.fontSize));

                    {
                        var textBox = labels[i].Entity.CreateComponent <TextBox>();
                        textBox.InitFromRenderer();

                        textBox.CharHeight = i switch
                        {
                            0 => 1f,
                            _ => 0.8f,
                        } *data.fontSize;

                        textBox.Text  = new TextColored(data.captions[i], new SColor(1f, 1f, 1f));
                        textBox.Align = ODEngine.Core.Text.TextAlign.Center;
                    }

                    labelContainers[i].material.SetFloat("alpha", 0f);
                }

                foreach (var i in CoroutineExecutor.ForTime(data.startDelay)) // Start delay
                {
                    if (!isEnable)
                    {
                        Finish2();
                        yield break;
                    }

                    yield return(null);
                }

                if (data.isSimultaneous) // Labels fade in
                {
                    foreach (var i in CoroutineExecutor.ForTime(data.fadeInTime))
                    {
                        if (!isEnable)
                        {
                            Finish2();
                            yield break;
                        }

                        for (int j = 0; j < data.captions.Length; j++)
                        {
                            labelContainers[j].material.SetFloat("alpha", i * i);
                            yield return(null);
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < data.captions.Length; i++)
                    {
                        foreach (var j in CoroutineExecutor.ForTime(data.fadeInTime))
                        {
                            if (!isEnable)
                            {
                                Finish2();
                                yield break;
                            }

                            labelContainers[i].material.SetFloat("alpha", j * j);
                            yield return(null);
                        }
                    }
                }

                foreach (var _ in CoroutineExecutor.ForTime(data.showTime)) // Show
                {
                    if (!isEnable)
                    {
                        Finish2();
                        yield break;
                    }

                    yield return(null);
                }

                foreach (var i in CoroutineExecutor.ForTime(data.captionsFadeOutTime)) // Fade out
                {
                    if (!isEnable)
                    {
                        Finish2();
                        yield break;
                    }

                    for (int j = 0; j < data.captions.Length; j++)
                    {
                        labelContainers[j].material.SetFloat("alpha", (1f - i) * (1f - i));
                    }

                    yield return(null);
                }

                Finish2();

                void Finish2()
                {
                    for (int i = 0; i < data.captions.Length; i++)
                    {
                        labels[i].Entity.Destroy();
                        labelContainers[i].Entity.Destroy();
                    }
                }

                foreach (var i in CoroutineExecutor.ForTime(data.screenFadeOutTime))
                {
                    if (!isEnable)
                    {
                        Finish();
                        yield break;
                    }

                    screenContainer.material.SetFloat("alpha", (1f - i) * (1f - i));
                    yield return(null);
                }

                Finish();

                void Finish()
                {
                    backBlack.Entity.Destroy();
                    Disable();
                }
            }
        }
Exemple #2
0
        public MiniMenu(ScreenManagerVN screenManager, Renderer parent) : base(screenManager, parent)
        {
            int menuCounter = 0;

            GUIElement CreateNextButton(string text)
            {
                var ret = GUIElement.CreateContainer(screenContainer.renderer, new Vector3(0f, 1.75f - INTERVAL * menuCounter, -3f), new Vector2(7f, 0.56f), "Game/ColorAlpha");

                ret.renderer.name = text;
                ODEngine.Helpers.GUIHelper.TextButton(ret, new Vector3(0f, 0.02f, 0f), "Furore", 0.4f, text, new Color4(160, 185, 198, 255), Color4.White);
                var menuCounter2 = menuCounter;

                IEnumerator Enable()
                {
                    foreach (var i in CoroutineExecutor.ForTime(0.15f))
                    {
                        ret.renderer.PositionX = ((menuCounter2 % 2) * 2 - 1) * (1f - i) * 5f;
                        ret.material.SetFloat("alpha", MathF.Pow(i, 1.5f));
                        yield return(null);
                    }
                }

                IEnumerator Disable()
                {
                    foreach (var i in CoroutineExecutor.ForTime(0.15f))
                    {
                        ret.renderer.PositionX = ((menuCounter2 % 2) * 2 - 1) * i * 5f;
                        ret.material.SetFloat("alpha", MathF.Pow(1f - i, 1.5f));
                        yield return(null);
                    }
                }

                var menuButton = new MenuElement(ret, Enable, Disable);

                menuElements.Add(menuButton);
                menuCounter++;
                return(ret);
            }

            clickArea            = GUIElement.CreateTransparent(screenContainer.renderer, new Vector3(0f, 0f, -2f), new Vector2(19.2f, 10.8f));
            clickArea.MouseDown += ClickArea_MouseDown;

            buttonMainMenu             = CreateNextButton("Главное меню");
            buttonMainMenu.MouseClick += ButtonMainMenu_MouseClick;

            buttonSave             = CreateNextButton("Сохранить");
            buttonSave.MouseClick += ButtonSave_MouseClick;

            buttonLoad             = CreateNextButton("Загрузить");
            buttonLoad.MouseClick += ButtonLoad_MouseClick;

            buttonShit             = CreateNextButton("Не тыкать");
            buttonShit.MouseClick += ButtonShit_MouseClick;

            buttonSettings             = CreateNextButton("Настройки");
            buttonSettings.MouseClick += ButtonSettings_MouseClick;

            buttonExit             = CreateNextButton("Выход");
            buttonExit.MouseClick += ButtonExit_MouseClick;

            background = GUIElement.CreateImage(screenContainer.renderer, new Vector3(0f, 1.8f - (INTERVAL * (menuCounter - 1)) / 2f, -1f), new Vector2(5f, INTERVAL * menuCounter), "GUI/ec_night", new Material(null, "Game/Alpha"));
            {
                IEnumerator Enable()
                {
                    foreach (var i in CoroutineExecutor.ForTime(0.15f))
                    {
                        background.material.SetFloat("alpha", MathF.Pow(i, 1.5f));
                        yield return(null);
                    }
                }

                IEnumerator Disable()
                {
                    foreach (var i in CoroutineExecutor.ForTime(0.15f))
                    {
                        background.material.SetFloat("alpha", MathF.Pow(1f - i, 1.5f));
                        yield return(null);
                    }
                }

                menuElements.Add(new MenuElement(background, Enable, Disable));
            }

            screenContainer.renderer.isVisible = false;
        }
Exemple #3
0
        public ExitMenu(ScreenManager screenManager, Renderer parent) : base(screenManager, parent)
        {
            // Parent is scenario screen
            background = GUIElement.CreateContainer(screenContainer.renderer, new Vector3(0f, 0f, -1f), new Vector2(19.2f, 10.8f), "SimpleTransitionForMenu");
            {
                CoroutineExecutor.Add(Routine());

                IEnumerator Routine()
                {
                    var ticket1 = GPUTextureLoader.LoadAsync("Images/GUI/ec_exit_bg_1.png");
                    var ticket2 = GPUTextureLoader.LoadAsync("Images/GUI/ec_exit_bg_2.png");

                    while (ticket1.texture == null || ticket2.texture == null)
                    {
                        yield return(null);
                    }

                    background.material.SetTexture("Tex1", ticket1.texture);
                    background.material.SetTexture("Tex2", ticket2.texture);

                    while (true)
                    {
                        foreach (var i in CoroutineExecutor.ForTime(5f))
                        {
                            yield return(null);
                        }

                        foreach (var i in CoroutineExecutor.ForTime(0.5f))
                        {
                            background.material.SetFloat("CrossFade", i);
                            yield return(null);
                        }

                        foreach (var i in CoroutineExecutor.ForTime(0.5f))
                        {
                            background.material.SetFloat("CrossFade", 1f - i);
                            yield return(null);
                        }
                    }
                }
            }

            var label = GUIElement.CreateEmpty(screenContainer.renderer, new Vector3(-2.3f, 0f, -2f), new Vector2(10f, 1.08f));

            label.renderer.name = "Label";

            {
                var textBox = label.Entity.CreateComponent <TextBox>(name);
                textBox.InitFromRenderer();
                textBox.CharHeight = 0.4f;
                textBox.FontName   = "Furore";
                textBox.Text       = "Ты правда хочешь сбежать?";
            }

            buttonYes = GUIElement.CreateContainer(screenContainer.renderer, new Vector3(-5.2f, -1f, -2f), new Vector2(1.2f, 0.56f), "Game/Color");
            {
                buttonYes.renderer.name = "Yes";
                ODEngine.Helpers.GUIHelper.TextButton(buttonYes, new Vector3(0f, 0.02f, 0f), "Furore", 0.45f, "Да", new Color4(160, 185, 198, 255), Color4.White);
                buttonYes.MouseClick += ButtonYes_MouseClick;
            }

            buttonNo = GUIElement.CreateContainer(screenContainer.renderer, new Vector3(-2.35f, -1f, -2f), new Vector2(1.2f, 0.56f), "Game/Color");
            {
                buttonNo.renderer.name = "No";
                ODEngine.Helpers.GUIHelper.TextButton(buttonNo, new Vector3(0f, 0.02f, 0f), "Furore", 0.45f, "Нет", new Color4(160, 185, 198, 255), Color4.White);
                buttonNo.MouseClick += ButtonNo_MouseClick;
            }

            screenContainer.renderer.isVisible = false;
        }