Skip to content

UMG Event

xg_55 edited this page Nov 8, 2016 · 1 revision

Copyed from Demo project

namespace Game
{
    /// <summary>
    /// Main Scene UI
    /// </summary>
    public class MainUI:UnrealEngine.UMonoActorComponent
    {
        public TSubclassOf<UUserWidget> MainWidget;

        APlayerController PC;
        UUserWidget widget;

        public static MainUI Instance;

        public MainUI()
        {
            Instance = this;
        }

        /// <summary>
        /// called on register 
        /// </summary>
        void OnRegister()
        {
            Instance = this;
        }

        /// <summary>
        /// called on unregister 
        /// </summary>
        void OnUnRegister()
        {
            Instance = null;
        }

        /// <summary>
        /// called on begin play
        /// </summary>
        void BeginPlay()
        {
            //Show UI
            _Open();
        }


        /// <summary>
        /// Called On End Play
        /// </summary>
        void OnDestroy()
        {
            Instance = null;
        }

        void Init()
        {
            if (widget != null)
                return;
            PC = UGameplayStatics.GetPlayerController(GetWorld(), 0);
            widget = UWidgetBlueprintLibrary.Create(this, MainWidget, PC);

            //bind start game button event
            {
                UButton BtnStart = widget.WidgetTree.FindWidget<UButton>("Button_Start");
                FMulticastScriptDelegate OnClick = BtnStart.OnClicked;
                OnClick.Add(this, "OnClickStart");
                BtnStart.OnClicked = OnClick;
            }
            //bind quit game button event
            {
                UButton BtnStart = widget.WidgetTree.FindWidget<UButton>("Button_Quit");
                FMulticastScriptDelegate OnClick = BtnStart.OnClicked;
                OnClick.Add(this, "OnClickQuit");
                BtnStart.OnClicked = OnClick;
            }
        }

        /// <summary>
        /// This Must be Public for export to blueprint
        /// </summary>
        public void OnClickStart()
        {
            LogInfo("ClickStart");
            UGameplayStatics.LoadStreamLevel(this, "ThirdPersonExampleMap", true, true, new FLatentActionInfo());
            ULevelStreaming LvStreaming = UGameplayStatics.GetStreamingLevel(this, "ThirdPersonExampleMap");
            FMulticastScriptDelegate Del = LvStreaming.OnLevelLoaded;
            Del.Add(Engine.Instance, "OnThirdPersonExampleMapShown");
            LvStreaming.OnLevelShown = Del;

            //Close UI
            _Close();
            //Unload UI Level
            UGameplayStatics.UnloadStreamLevel(this, "UI", new FLatentActionInfo());
        }

        /// <summary>
        /// This Must be Public for export to blueprint
        /// </summary>
        public void OnClickQuit()
        {
            LogInfo("OnClickQuit");
            _Close();
            UKismetSystemLibrary.QuitGame(GetWorld(), PC, EQuitPreference.Quit);
        }



        void _Close()
        {
            if (widget != null)
            {
                widget.RemoveFromParent();
            }
            PC.bShowMouseCursor = false;
            UWidgetBlueprintLibrary.SetInputMode_GameOnly(PC);
        }

        void _Open()
        {
            if (widget == null)
            {
                Init();
            }
            widget.AddToViewport();
            PC.bShowMouseCursor = true;
            UWidgetBlueprintLibrary.SetInputMode_UIOnlyEx(PC, widget);
        }
    }
}
Clone this wiki locally