Files
ProjectEleri/Source/ProjectEleri/Private/UI/MainGameWidget.cpp

177 lines
4.4 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#include "UI/MainGameWidget.h"
#include "EleriPlayerController.h"
#include "EnhancedInputSubsystems.h"
#include "Kismet/GameplayStatics.h"
#include "UI/InventoryWidget.h"
#include "UI/MainMenuWidget.h"
#include "UI/TradeWidget.h"
#include "UI/AlchemyWidget.h"
void UMainGameWidget::TogglePlaceableUI(bool bEnabled)
{
PlaceableOverlay->SetVisibility(bEnabled ? ESlateVisibility::Visible : ESlateVisibility::Collapsed);
}
void UMainGameWidget::SwitchKeybindsDisplay(int32 Index)
{
KeybindsSwitcher->SetActiveWidgetIndex(Index);
}
void UMainGameWidget::CloseLastWidget()
{
if (WidgetStack.IsEmpty()) return;
CloseWidget(WidgetStack[WidgetStack.Num() - 1]);
}
void UMainGameWidget::OpenWidget(UEleriBaseWidget* Widget)
{
if (!Widget) return;
Widget->ToggleWidget(true);
WidgetStack.AddUnique(Widget);
CheckOpenWidgets();
}
void UMainGameWidget::CloseWidget(UEleriBaseWidget* Widget)
{
if (!Widget) return;
Widget->ToggleWidget(false);
WidgetStack.Remove(Widget);
CheckOpenWidgets();
}
void UMainGameWidget::ToggleBookWidget(bool bActive)
{
if (bActive)
WidgetStack.AddUnique(GetBookWidget());
CheckOpenWidgets();
}
void UMainGameWidget::ToggleAlchemyWidget(bool bActive)
{
AlchemyOpen = bActive;
if (bActive)
WidgetStack.AddUnique(GetAlchemyWidget());
CheckOpenWidgets();
}
void UMainGameWidget::ToggleBigNotificationWidget(bool bActive)
{
BigNotificationOpen = bActive;
BigNotification_Widget->ToggleWidget(BigNotificationOpen);
}
void UMainGameWidget::ToggleDialogueWidget(bool bActive)
{
DialogueOpen = bActive;
}
UMinigameBaseWidget *UMainGameWidget::ToggleMinigamesWidget(EMinigameType MinigameType, const TSoftObjectPtr<UBaseMinigameDataAsset> &DataAsset)
{
MinigameOpen = MinigameType;
CurrentlyOpenMinigameWidget = K2_OnMinigameOpen(MinigameOpen, DataAsset);
return CurrentlyOpenMinigameWidget;
}
void UMainGameWidget::ToggleMainMenuWidget(bool bActive)
{
MainMenuOpen = bActive;
MainMenuScreenUI_Widget->ToggleWidget(MainMenuOpen);
}
UEleriBaseWidget *UMainGameWidget::ShowAmountPickerWidget()
{
AmountPicker_Widget->ToggleWidget(true);
return AmountPicker_Widget;
}
UEleriBaseWidget *UMainGameWidget::ShowImportantDialoguePromptWidget()
{
ImportantDialoguePrompt_Widget->ToggleWidget(true);
return ImportantDialoguePrompt_Widget;
}
void UMainGameWidget::OpenTradeWidget(UInventoryComponent *Inventory, const TArray<EInventoryTabType>& InRestrictTabs)
{
TradeOpen = true;
Trade_Widget->OpenTradeWidget(Inventory, InRestrictTabs);
}
void UMainGameWidget::CloseTradeWidget()
{
TradeOpen = false;
Trade_Widget->ToggleWidget(false);
CheckOpenWidgets();
}
void UMainGameWidget::ToggleCalendarWidget(bool bActive)
{
CalendarOpen = bActive;
Calendar_Widget->ToggleWidget(CalendarOpen);
CheckOpenWidgets();
}
void UMainGameWidget::ToggleBazarWidget(bool bActive) {
BazarWidgetOpen = bActive;
Bazar_Widget->ToggleWidget(BazarWidgetOpen);
CheckOpenWidgets();
}
void UMainGameWidget::CheckOpenWidgets()
{
if (!PlayerController)
{
PlayerController = UGameplayStatics::GetPlayerController(this, 0);
}
//const bool bAnyOpenWidgets = IsAlchemyOpen() || IsAnyMinigameOpen() || IsBazarWidgetOpen() || IsBigNotificationOpen() ||
// IsBookOpen() || IsCalendarOpen() || IsDialogueOpen() || IsInventoryOpen() || IsMainMenuOpen() || IsTradeOpen();
const bool bAnyOpenWidgets = AnyWidgetOpen();
const bool bShouldBePaused = WidgetStack.Contains(GetBookWidget());
if (bAnyOpenWidgets)
{
PlayerController->SetInputMode(FInputModeGameAndUI());
}
else
{
PlayerController->SetInputMode(FInputModeGameOnly());
}
PlayerController->SetShowMouseCursor(bAnyOpenWidgets);
PlayerController->SetPause(bShouldBePaused);
// Get the Enhanced Input Local Player Subsystem from the Local Player related to our Player Controller.
if (UEnhancedInputLocalPlayerSubsystem *Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer()))
{
if (const AEleriPlayerController* EleriPC = Cast<AEleriPlayerController>(PlayerController))
{
if (bAnyOpenWidgets)
{
if (!Subsystem->HasMappingContext(EleriPC->MainUiContext))
{
Subsystem->AddMappingContext(EleriPC->MainUiContext, 98);
}
}
else
{
if (Subsystem->HasMappingContext(EleriPC->MainUiContext))
{
Subsystem->RemoveMappingContext(EleriPC->MainUiContext);
}
}
}
}
}