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(); } } }
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; }
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; }