Skip to content

Commit

Permalink
Fixed inventory/state transfer between levels
Browse files Browse the repository at this point in the history
  • Loading branch information
xthebat committed May 6, 2024
1 parent 28e7bca commit 9124b4c
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 18 deletions.
45 changes: 30 additions & 15 deletions Source/Cloud9/Game/Cloud9GameInstance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,35 +27,50 @@
#include "Cloud9/Character/Components/Cloud9InventoryComponent.h"
#include "Cloud9/Tools/Extensions/ACharacter.h"

// TODO: Add multiplayer save-load game (!!!)

void UCloud9GameInstance::SaveCharacterInfo(const ACloud9Character* Character)
{
using namespace EACharacter;

var PlayerSavedInfo = FPlayerSavedInfo();
if (let PlayerId = Character | GetPlayerId{}; IsPlayerIdValid(PlayerId))
{
var PlayerSavedInfo = FPlayerSavedInfo();

let Inventory = Character->GetInventoryComponent();
let Inventory = Character->GetInventoryComponent();

PlayerSavedInfo.WeaponConfigs = Inventory->GetWeapons()
| ETContainer::Filter{[](let Weapon) { return IsValid(Weapon); }}
| ETContainer::Transform{[](let Weapon) { return FWeaponConfig::FromWeapon(Weapon); }}
| ETContainer::ToArray{};
PlayerSavedInfo.WeaponConfigs = Inventory->GetWeapons()
| ETContainer::Filter{[](let Weapon) { return IsValid(Weapon); }}
| ETContainer::Transform{[](let Weapon) { return FWeaponConfig::FromWeapon(Weapon); }}
| ETContainer::ToArray{};

if (let SelectedWeapon = Inventory->GetSelectedWeapon(); IsValid(SelectedWeapon))
{
PlayerSavedInfo.WeaponSlot = SelectedWeapon->GetWeaponSlot();
}
if (let SelectedWeapon = Inventory->GetSelectedWeapon(); IsValid(SelectedWeapon))
{
PlayerSavedInfo.WeaponSlot = SelectedWeapon->GetWeaponSlot();
}

SavedInfo.Players.Add(Character->GetFName(), PlayerSavedInfo);
SavedInfo.Player = PlayerSavedInfo;
SavedInfo.IsPlayerStored = true;
}
}

void UCloud9GameInstance::LoadCharacterInfo(ACloud9Character* Character)
{
let Inventory = Character->GetInventoryComponent();
let& PlayerSavedInfo = SavedInfo.Players[Character->GetFName()];
Inventory->Initialize(PlayerSavedInfo.WeaponConfigs, PlayerSavedInfo.WeaponSlot);
using namespace EACharacter;

if (HasCharacterInfo(Character))
{
let Inventory = Character->GetInventoryComponent();
// let& PlayerSavedInfo = SavedInfo.Players[Character->GetFName()];
let& PlayerSavedInfo = SavedInfo.Player;
Inventory->Initialize(PlayerSavedInfo.WeaponConfigs, PlayerSavedInfo.WeaponSlot);
}
}

bool UCloud9GameInstance::HasCharacterInfo(const ACloud9Character* Character) const
{
return SavedInfo.Players.Contains(Character->GetFName());
using namespace EACharacter;

let PlayerId = Character | GetPlayerId{};
return SavedInfo.IsPlayerStored and IsPlayerIdValid(PlayerId);
}
3 changes: 2 additions & 1 deletion Source/Cloud9/Structures/SavedInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@

void FSavedInfo::Reset()
{
Players.Reset();
Player.Reset();
IsPlayerStored = false;
}
12 changes: 10 additions & 2 deletions Source/Cloud9/Structures/SavedInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,16 @@ struct FSavedInfo
{
GENERATED_BODY()

UPROPERTY(Category=Weapon, BlueprintReadOnly)
TMap<FName, FPlayerSavedInfo> Players;
// TODO: Add multiplayer save-load game (!!!)

// UPROPERTY(Category=Weapon, BlueprintReadOnly)
// TMap<FName, FPlayerSavedInfo> Players;

UPROPERTY(Category=Player, BlueprintReadOnly)
FPlayerSavedInfo Player;

UPROPERTY(Category=Player, BlueprintReadOnly)
bool IsPlayerStored = false;

void Reset();
};

0 comments on commit 9124b4c

Please sign in to comment.