void UWidgetBlueprintLibrary::SetInputMode_UIOnly(APlayerController* Target, UWidget* InWidgetToFocus, bool bLockMouseToViewport) { if (Target != nullptr) { FInputModeUIOnly InputMode; InputMode.SetLockMouseToViewport(bLockMouseToViewport); if (InWidgetToFocus != nullptr) { InputMode.SetWidgetToFocus(InWidgetToFocus->TakeWidget()); } Target->SetInputMode(InputMode); } }
void APacmanMainMenuHUD::DisplayMenu(TSharedPtr<SCompoundWidget> MenuToDisplay) { // If there is visible menu, hide it if (DisplayedMenuStack.Num() > 0) { GEngine->GameViewport->RemoveViewportWidgetContent(DisplayedMenuStack.Top().ToSharedRef()); } // Show new menu GEngine->GameViewport->AddViewportWidgetContent(MenuToDisplay.ToSharedRef()); DisplayedMenuStack.Push(MenuToDisplay.ToSharedRef()); // Only GUI elements can handle input FInputModeUIOnly InputMode; InputMode.SetLockMouseToViewport(true); InputMode.SetWidgetToFocus(MenuToDisplay); GetOwningPlayerController()->SetInputMode(InputMode); }
void APacmanMainMenuHUD::HideMenu() { // There must be at least 2 menus, main menu and one sub-menu that we want to hide if (DisplayedMenuStack.Num() < 2) { return; } GEngine->GameViewport->RemoveViewportWidgetContent(DisplayedMenuStack.Pop().ToSharedRef()); auto &MenuToDisplay = DisplayedMenuStack.Top(); // Show previous menu GEngine->GameViewport->AddViewportWidgetContent(MenuToDisplay.ToSharedRef()); // Only GUI elements can handle input FInputModeUIOnly InputMode; InputMode.SetLockMouseToViewport(true); InputMode.SetWidgetToFocus(MenuToDisplay); GetOwningPlayerController()->SetInputMode(InputMode); }