Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified Content/G2I_Game/Core/BP_GameInstance.uasset
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added Content/G2I_Game/UI/DA_CutScenesParameters.uasset
Binary file not shown.
Binary file modified Content/G2I_Game/UI/DA_StringTablesCatalog.uasset
Binary file not shown.
Binary file modified Content/G2I_Game/UI/DA_WidgetsCatalog.uasset
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added Content/G2I_Game/UI/StringsRu/ST_CutScenes.uasset
Binary file not shown.
6 changes: 6 additions & 0 deletions Source/G2I/Private/Controls/G2IPlayerController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,12 @@ void AG2IPlayerController::CallPause(const FInputActionValue& Value)
SetPause(true);

UIManager->OpenWidget(EG2IWidgetNames::Pause);
UIManager->SetupPauseWidget([this]()
{
SetInputMode(FInputModeGameOnly());
bShowMouseCursor = false;
SetPause(false);
});
}

void AG2IPlayerController::SetRotationTowardsCamera(const UCameraComponent& Camera)
Expand Down
10 changes: 10 additions & 0 deletions Source/G2I/Private/Game/G2IGameInstance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ UG2IWidgetComponentParameters* UG2IGameInstance::GetWidgetComponentParameters()
return WidgetComponentsParameters;
}

UG2ICutScenesParameters* UG2IGameInstance::GetCutScenesParameters()
{
return CutScenesParameters;
}

FString UG2IGameInstance::GetMainMenuLevelName() const
{
return MainMenuLevelName;
Expand Down Expand Up @@ -98,6 +103,11 @@ EG2ILevelName UG2IGameInstance::GetLevelEnum(const FString& LevelName) const
return EG2ILevelName::None;
}

EG2ILevelName UG2IGameInstance::GetCurrentLevelEnum() const
{
return CurrentLevelEnum;
}

bool UG2IGameInstance::IsMainMenuLevel() const
{
return MainMenuLevelName == CurrentLevelName;
Expand Down
100 changes: 98 additions & 2 deletions Source/G2I/Private/UI/G2IUIManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "G2ICharacterDaughter.h"
#include "G2ICharacterEngineer.h"
#include "G2IConfirmationWidget.h"
#include "G2ICutScenesParameters.h"
#include "G2IGameInstance.h"
#include "G2ILevelLoadingScreen.h"
#include "G2IPlayerController.h"
Expand All @@ -20,6 +21,7 @@
#include "Gameplay/G2IKeyHintWidget.h"
#include "HUD/G2IAimingWidget.h"
#include "Menu/G2ICreatorsWidget.h"
#include "Menu/G2IPauseWidget.h"
#include "Menu/Elements/NumericalRow/G2INumericalMultiValuePropertyRow.h"
#include "Menu/Elements/G2IControlListItem.h"
#include "Menu/Elements/G2IControlRow.h"
Expand Down Expand Up @@ -74,7 +76,14 @@ void UG2IUIManager::InitializeDefaultsInStartGame()
if (!ensure(WidgetComponentParameters))
{
UE_LOG(LogG2I, Error, TEXT("%s: Couldn't find %s"),
*UG2IWidgetComponentParameters::StaticClass()->GetName(), *GetName());
*GetName(), *UG2IWidgetComponentParameters::StaticClass()->GetName());
}

CutScenesParameters = GameInstance->GetCutScenesParameters();
if (!ensure(CutScenesParameters))
{
UE_LOG(LogG2I, Error, TEXT("%s: Couldn't find %s"),
*GetName(), *UG2ICutScenesParameters::StaticClass()->GetName());
}

DisplayManager = NewObject<UG2IUIDisplayManager>(this);
Expand Down Expand Up @@ -140,11 +149,83 @@ void UG2IUIManager::InitializeNewLevelUI() const
if (GameInstance->IsMainMenuLevel())
{
OpenWidget(EG2IWidgetNames::MainMenu);
return;
}

if (!ensure(DisplayManager))
{
UE_LOG(LogG2I, Error, TEXT("%s: Couldn't find %s"), *GetName(),
*UG2IUIDisplayManager::StaticClass()->GetName());
OpenHUD();
return;
}

const EG2ILevelName LevelName = GameInstance->GetCurrentLevelEnum();

#if WITH_EDITOR
if (!ensure(CutScenesParameters))
{
UE_LOG(LogG2I, Error, TEXT("%s: Couldn't find %s"),
*GetName(), *UG2ICutScenesParameters::StaticClass()->GetName());
}
if (!CutScenesParameters->bIsDebugOn)
{
OpenHUD();
return;
}
#endif

if (LevelName == EG2ILevelName::BoilerRoom)
{
if (DisplayManager->GetWidget(EG2IWidgetNames::CutSceneStartBoilerRoom))
{
OpenWidget(EG2IWidgetNames::CutSceneStartBoilerRoom);
return;
}
OpenHUD();
return;
}
if (LevelName == EG2ILevelName::ChildrenRoom)
{
if (DisplayManager->GetWidget(EG2IWidgetNames::CutSceneStartChildrenRoom))
{
OpenWidget(EG2IWidgetNames::CutSceneStartChildrenRoom);
return;
}
OpenHUD();
return;
}
else
if (LevelName == EG2ILevelName::Hall)
{
if (DisplayManager->GetWidget(EG2IWidgetNames::CutSceneStartHall))
{
OpenWidget(EG2IWidgetNames::CutSceneStartHall);
return;
}
OpenHUD();
return;
}

// Other levels
OpenHUD();
}

void UG2IUIManager::CloseCutScene(const EG2IWidgetNames WidgetName) const
{
CloseWidget(WidgetName);
if (WidgetName == EG2IWidgetNames::CutSceneEndGame)
{
if (!ensure(GameInstance))
{
UE_LOG(LogG2I, Error, TEXT("%s: Couldn't find %s"), *GetName(),
*UG2IGameInstance::StaticClass()->GetName());
return;
}
GameInstance->LoadMainMenuLevel();
return;
}

OpenHUD();
}

void UG2IUIManager::CloseLevelUI()
Expand Down Expand Up @@ -660,6 +741,21 @@ void UG2IUIManager::SetActionControl(const FText& ActionName, const FText& KeyNa
}
}

void UG2IUIManager::SetupPauseWidget(const TFunction<void()>& NewContinueAction) const
{
if (!ensure(DisplayManager))
{
UE_LOG(LogG2I, Error, TEXT("%s: Couldn't find %s"), *GetName(),
*UG2IUIDisplayManager::StaticClass()->GetName());
return;
}
if (UG2IPauseWidget *Widget = Cast<UG2IPauseWidget>(
DisplayManager->GetWidget(EG2IWidgetNames::Pause)))
{
Widget->OnContinue = NewContinueAction;
}
}

void UG2IUIManager::SetupControlsWidget(UWidgetSwitcher* CharacterControlsSwitcher) const
{
if (!ensure(CharacterControlsSwitcher))
Expand Down
20 changes: 20 additions & 0 deletions Source/G2I/Private/UI/Widgets/CutScenes/G2ICutSceneSheetWidget.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#include "CutScenes/G2ICutSceneSheetWidget.h"
#include "Components/Image.h"

bool UG2ICutSceneSheetWidget::ShowNextFrames()
{
const int32 FrameSetsNum = FrameImages.Num();
++CurrentFrameIndex;
if (CurrentFrameIndex < FrameSetsNum && FrameImages.IsValidIndex(CurrentFrameIndex))
{
for (UImage *Frame : FrameImages[CurrentFrameIndex].FramesOneClick)
{
if (Frame)
{
Frame->SetVisibility(ESlateVisibility::Visible);
}
}
return true;
}
return false;
}
189 changes: 189 additions & 0 deletions Source/G2I/Private/UI/Widgets/CutScenes/G2ICutSceneWidget.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
#include "CutScenes/G2ICutSceneWidget.h"
#include "G2I.h"
#include "G2ICutScenesParameters.h"
#include "G2IGameInstance.h"
#include "G2IUIManager.h"
#include "Components/Image.h"
#include "Components/RichTextBlock.h"
#include "Components/WidgetSwitcher.h"
#include "CutScenes/G2ICutSceneSheetWidget.h"

void UG2ICutSceneWidget::NativePreConstruct()
{
Super::NativePreConstruct();

if (SkipBarImage)
{
SkipBarMaterialInstance = SkipBarImage->GetDynamicMaterial();
SetSkipPercent(0.f);
}
}

void UG2ICutSceneWidget::InitializeAfterManagerLoading()
{
Super::InitializeAfterManagerLoading();

if (!ensure(GameInstance))
{
UE_LOG(LogG2I, Error, TEXT("%s: Couldn't find %s"),
*GetName(), *UG2IGameInstance::StaticClass()->GetName());
return;
}
const UG2ICutScenesParameters *CutScenesParameters = GameInstance->GetCutScenesParameters();
if (!ensure(CutScenesParameters))
{
UE_LOG(LogG2I, Error, TEXT("%s: Couldn't find %s in %s"),
*GetName(), *UG2ICutScenesParameters::StaticClass()->GetName(), *GameInstance->GetName());
return;
}
SkipSpeed = CutScenesParameters->SpeedSkip;
}

void UG2ICutSceneWidget::NativeTick(const FGeometry& MyGeometry, float InDeltaTime)
{
Super::NativeTick(MyGeometry, InDeltaTime);

if (bIsSkipPressed)
{
const float CurrentPercent = GetSkipPercent();
const float NewPercent = FMath::Clamp(CurrentPercent + SkipSpeed * InDeltaTime, 0.0f, 1.0f);
SetSkipPercent(NewPercent);
if (NewPercent == 1.f)
{
CloseWidget();
}
}
}

FReply UG2ICutSceneWidget::NativeOnKeyDown(const FGeometry& InGeometry, const FKeyEvent& InKeyEvent)
{
if (!bIsEnabled)
{
return FReply::Unhandled();
}

FReply Reply = Super::NativeOnKeyDown(InGeometry, InKeyEvent);

if (InKeyEvent.GetKey() == SkipKey)
{
bIsSkipPressed = true;
return Reply;
}
#if WITH_EDITOR
if (InKeyEvent.GetKey() == DebugPauseKey)
#else
if (InKeyEvent.GetKey() == PauseKey)
#endif
{
if (!ensure(UIManager))
{
UE_LOG(LogG2I, Error, TEXT("%s isn't defined in %s"),
*UG2IUIManager::StaticClass()->GetName(), *GetName());
return Reply;
}
UIManager->OpenWidget(EG2IWidgetNames::Pause);
bIsEnabled = false;

UIManager->SetupPauseWidget([this]()
{
SetFocus();
bIsEnabled = true;
});
}

return Reply;
}

FReply UG2ICutSceneWidget::NativeOnMouseButtonDown(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent)
{
if (!bIsEnabled)
{
return FReply::Unhandled();
}

FReply Reply = Super::NativeOnMouseButtonDown(InGeometry, InMouseEvent);

if (InMouseEvent.IsMouseButtonDown(NextKey))
{
if (!ensure(SheetsSwitcher))
{
UE_LOG(LogG2I, Error, TEXT("%s: Couldn't find SheetsSwitcher"), *GetName());
CloseWidget();
return Reply;
}

UG2ICutSceneSheetWidget *CurrentSheet = Cast<UG2ICutSceneSheetWidget>(SheetsSwitcher->GetActiveWidget());
if (CurrentSheet->ShowNextFrames())
{
return Reply;
}

const int32 ActiveIndex = SheetsSwitcher->GetActiveWidgetIndex();
const int32 SheetsNum = SheetsSwitcher->GetNumWidgets();
if (ActiveIndex < (SheetsNum - 1))
{
SheetsSwitcher->SetActiveWidgetIndex(ActiveIndex + 1);
return Reply;
}

CloseWidget();
}

return Reply;
}

FReply UG2ICutSceneWidget::NativeOnKeyUp(const FGeometry& InGeometry, const FKeyEvent& InKeyEvent)
{
FReply Reply = Super::NativeOnKeyUp(InGeometry, InKeyEvent);

if (InKeyEvent.GetKey() == SkipKey)
{
bIsSkipPressed = false;
SetSkipPercent(0.f);
}

return Reply;
}

void UG2ICutSceneWidget::SetSkipPercent(const float Percent) const
{
if (!ensure(SkipBarMaterialInstance))
{
UE_LOG(LogG2I, Error, TEXT("%s: SkipBarImage doesn't have material for circle bar"), *GetName());
return;
}

float OutValue;
if (!ensure(SkipBarMaterialInstance->GetScalarParameterValue(FName("Percent"), OutValue)))
{
UE_LOG(LogG2I, Error, TEXT("%s: SkipBarImage's material for circle bar doesn't have Percent value"),
*GetName());
return;
}

SkipBarMaterialInstance->SetScalarParameterValue(FName("Percent"), Percent);
}

float UG2ICutSceneWidget::GetSkipPercent() const
{
float OutValue = 0.f;
if (!ensure(SkipBarMaterialInstance))
{
UE_LOG(LogG2I, Error, TEXT("%s: SkipBarImage doesn't have material for circle bar"), *GetName());
return OutValue;
}

SkipBarMaterialInstance->GetScalarParameterValue(FName("Percent"), OutValue);
return OutValue;
}

void UG2ICutSceneWidget::CloseWidget() const
{
if (!ensure(UIManager))
{
UE_LOG(LogG2I, Error, TEXT("%s: Couldn't find %s"), *GetName(),
*UG2IUIManager::StaticClass()->GetName());
return;
}
UIManager->CloseCutScene(CurrentWidgetName);
}
Loading