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