2026-07-11 10:43:52 +02:00
|
|
|
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
|
|
|
|
|
|
#include "UI/MainGameWidget.h"
|
2026-07-22 23:27:33 +02:00
|
|
|
|
|
|
|
|
#include "EleriPlayerController.h"
|
|
|
|
|
#include "EnhancedInputSubsystems.h"
|
|
|
|
|
#include "Kismet/GameplayStatics.h"
|
2026-07-11 10:43:52 +02:00
|
|
|
#include "UI/InventoryWidget.h"
|
|
|
|
|
#include "UI/MainMenuWidget.h"
|
|
|
|
|
#include "UI/TradeWidget.h"
|
2026-07-24 00:22:06 +02:00
|
|
|
#include "UI/AlchemyWidget.h"
|
2026-07-11 10:43:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
void UMainGameWidget::TogglePlaceableUI(bool bEnabled)
|
|
|
|
|
{
|
|
|
|
|
PlaceableOverlay->SetVisibility(bEnabled ? ESlateVisibility::Visible : ESlateVisibility::Collapsed);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UMainGameWidget::SwitchKeybindsDisplay(int32 Index)
|
|
|
|
|
{
|
|
|
|
|
KeybindsSwitcher->SetActiveWidgetIndex(Index);
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-22 23:27:33 +02:00
|
|
|
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)
|
2026-07-11 10:43:52 +02:00
|
|
|
{
|
2026-07-22 23:27:33 +02:00
|
|
|
if (!Widget) return;
|
|
|
|
|
|
|
|
|
|
Widget->ToggleWidget(false);
|
|
|
|
|
WidgetStack.Remove(Widget);
|
|
|
|
|
CheckOpenWidgets();
|
2026-07-11 10:43:52 +02:00
|
|
|
}
|
|
|
|
|
|
2026-07-22 23:27:33 +02:00
|
|
|
void UMainGameWidget::ToggleBookWidget(bool bActive)
|
2026-07-11 10:43:52 +02:00
|
|
|
{
|
2026-07-22 23:27:33 +02:00
|
|
|
if (bActive)
|
|
|
|
|
WidgetStack.AddUnique(GetBookWidget());
|
|
|
|
|
|
|
|
|
|
CheckOpenWidgets();
|
2026-07-11 10:43:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UMainGameWidget::ToggleAlchemyWidget(bool bActive)
|
|
|
|
|
{
|
|
|
|
|
AlchemyOpen = bActive;
|
2026-07-24 00:22:06 +02:00
|
|
|
if (bActive)
|
|
|
|
|
WidgetStack.AddUnique(GetAlchemyWidget());
|
|
|
|
|
|
|
|
|
|
CheckOpenWidgets();
|
2026-07-11 10:43:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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);
|
2026-07-22 23:27:33 +02:00
|
|
|
CheckOpenWidgets();
|
2026-07-11 10:43:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UMainGameWidget::ToggleCalendarWidget(bool bActive)
|
|
|
|
|
{
|
|
|
|
|
CalendarOpen = bActive;
|
|
|
|
|
Calendar_Widget->ToggleWidget(CalendarOpen);
|
2026-07-22 23:27:33 +02:00
|
|
|
CheckOpenWidgets();
|
2026-07-11 10:43:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UMainGameWidget::ToggleBazarWidget(bool bActive) {
|
|
|
|
|
BazarWidgetOpen = bActive;
|
|
|
|
|
Bazar_Widget->ToggleWidget(BazarWidgetOpen);
|
2026-07-22 23:27:33 +02:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-07-11 10:43:52 +02:00
|
|
|
}
|