This commit is contained in:
Oleg Petruny 2025-07-11 19:01:22 +02:00
parent 43cdf0d91c
commit f32f8f9149
13 changed files with 60 additions and 44 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -130,21 +130,19 @@ void UCustomGameInstance::SaveGame(FName checkpointName)
if(!levelScript)
return;
auto player = APlayerBase::Get();
if(!player)
return;
saveData->level = GetWorld()->GetFName();
saveData->state = levelScript->GetState();
saveData->checkpoint = checkpointName;
if(player->leftPocketItem)
auto player = APlayerBase::Get();
if(player && player->leftPocketItem)
saveData->playerLeftPocketItem = player->leftPocketItem->GetFName();
else
saveData->playerLeftPocketItem = FName(TEXT(""));
if(player->rightPocketItem)
saveData->playerLeftPocketItem = {};
if(player && player->rightPocketItem)
saveData->playerRightPocketItem = player->rightPocketItem->GetFName();
else
saveData->playerRightPocketItem = FName(TEXT(""));
saveData->playerRightPocketItem = {};
UGameplayStatics::SaveGameToSlot(saveData, saveName, saveIndex);
}

View File

@ -10,6 +10,7 @@
#include "Engine/SkyLight.h"
#include "LevelSequencePlayer.h"
#include "CustomGameInstance.h"
#include "CutsceneManager.h"
void ALevel1::BeginPlay()
@ -19,6 +20,9 @@ void ALevel1::BeginPlay()
//TurnLight(false);
//TurnFog(false);
if(auto GI = UCustomGameInstance::Get())
GI->SaveGame({});
CallNextState();
}

View File

@ -2,9 +2,14 @@
#include "Level2.h"
#include "CustomGameInstance.h"
void ALevel2::BeginPlay()
{
ALevelBase::BeginPlay();
if(auto GI = UCustomGameInstance::Get())
GI->SaveGame({});
CallNextState();
}

View File

@ -8,6 +8,7 @@
#include "Engine/SkyLight.h"
#include "LevelSequencePlayer.h"
#include "CustomGameInstance.h"
#include "CutsceneManager.h"
#include "MainGameModeBase.h"
@ -15,5 +16,8 @@ void ALevel3::BeginPlay()
{
ALevelBase::BeginPlay();
CallNextState();
if(auto GI = UCustomGameInstance::Get())
GI->SaveGame({});
//CallNextState();
}

View File

@ -89,6 +89,8 @@ void ALevelBase::ApplySaveData()
if(!player)
return;
if(!GI->saveData->checkpoint.IsNone())
{
for(TActorIterator<ACheckpoint> it(GetWorld()); it; ++it)
{
if(it->GetFName() == GI->saveData->checkpoint)
@ -98,10 +100,16 @@ void ALevelBase::ApplySaveData()
break;
}
}
}
if(!GI->saveData->playerLeftPocketItem.IsNone() || !GI->saveData->playerRightPocketItem.IsNone())
{
int pocketItems = 0;
for(TActorIterator<AInteractable> it(GetWorld()); it; ++it)
{
if(pocketItems > 1)
break;
if(it->GetFName() == GI->saveData->playerLeftPocketItem)
{
++pocketItems;
@ -112,9 +120,6 @@ void ALevelBase::ApplySaveData()
++pocketItems;
player->TakeItemToRightHand(*it);
}
if(pocketItems > 1)
{
break;
}
}
}