添加仓库UI

This commit is contained in:
997146918 2025-10-21 19:33:48 +08:00
parent 905e881cab
commit 427bede723
12 changed files with 79 additions and 9 deletions

View File

@ -140,20 +140,22 @@ TArray<FContainerItemSaveData> UContainerInfo::GetSaveData() const
return SaveDataArray; return SaveDataArray;
} }
void UContainerInfo::LoadFromSaveData(UPlayerInfoSaveGame* SaveGameData) bool UContainerInfo::LoadFromSaveData(FPrimaryAssetId ShapeID, const TArray<FContainerItemSaveData>& ContainerItems)
{ {
// 清空当前数据 // 清空当前数据
Items.Empty(); Items.Empty();
SlotInUsing.Empty(); SlotInUsing.Empty();
//从存档中加载仓库形状 //从存档中加载仓库形状
if (IsValid(SaveGameData)) FSoftObjectPath ShipShapePath = UAssetManager::Get().GetPrimaryAssetPath(ShapeID);
UShapeAsset* ShapeAsset = Cast<UShapeAsset>(ShipShapePath.TryLoad());
if (!IsValid(ShapeAsset))
{ {
FSoftObjectPath ShipShapePath = UAssetManager::Get().GetPrimaryAssetPath(SaveGameData->ShipContainerShapeID); return false;
InitContainerByShape(Cast<UShapeAsset>(ShipShapePath.TryLoad())); }
;} InitContainerByShape(ShapeAsset);
// 获得仓库中的物品信息 // 获得仓库中的物品信息
TArray<FPrimaryAssetId> AssetsToLoad; TArray<FPrimaryAssetId> AssetsToLoad;
for (const FContainerItemSaveData& ItemData : SaveGameData->ShipContainerItems) for (const FContainerItemSaveData& ItemData : ContainerItems)
{ {
FContainerItem NewItem; FContainerItem NewItem;
NewItem.DegreeType = ItemData.DegreeType; NewItem.DegreeType = ItemData.DegreeType;
@ -164,4 +166,43 @@ void UContainerInfo::LoadFromSaveData(UPlayerInfoSaveGame* SaveGameData)
FIntPoint Position(ItemData.PosX, ItemData.PosY); FIntPoint Position(ItemData.PosX, ItemData.PosY);
AddContainerItem(NewItem, Position); AddContainerItem(NewItem, Position);
} }
return true;
} }
// bool UContainerInfo::LoadFromSaveData(UPlayerInfoSaveGame* SaveGameData)
// {
// // 清空当前数据
// Items.Empty();
// SlotInUsing.Empty();
// //从存档中加载仓库形状
// if (IsValid(SaveGameData))
// {
// FSoftObjectPath ShipShapePath = UAssetManager::Get().GetPrimaryAssetPath(SaveGameData->ShipContainerShapeID);
// UShapeAsset* ShapeAsset = Cast<UShapeAsset>(ShipShapePath.TryLoad());
// if (!IsValid(ShapeAsset))
// {
// return false;
// }
// InitContainerByShape(ShapeAsset);
// // 获得仓库中的物品信息
// TArray<FPrimaryAssetId> AssetsToLoad;
// for (const FContainerItemSaveData& ItemData : SaveGameData->ShipContainerItems)
// {
// FContainerItem NewItem;
// NewItem.DegreeType = ItemData.DegreeType;
// //获得物品形状
// FSoftObjectPath RewardItemPath = UAssetManager::Get().GetPrimaryAssetPath(ItemData.RewardItemAssetId);
// NewItem.RewardItem = Cast<UFishingRewardDataAsset>(RewardItemPath.TryLoad());
// //添加物品到容器中
// FIntPoint Position(ItemData.PosX, ItemData.PosY);
// AddContainerItem(NewItem, Position);
// }
// }
// else
// {
// return false;
// }
//
// return true;
// }

View File

@ -117,8 +117,11 @@ public:
TArray<FContainerItemSaveData> GetSaveData() const; TArray<FContainerItemSaveData> GetSaveData() const;
// 从存档数据加载 // 从存档数据加载
// UFUNCTION(BlueprintCallable, Category = "ContainerInfo")
// bool LoadFromSaveData(UPlayerInfoSaveGame* SaveGameData);
UFUNCTION(BlueprintCallable, Category = "ContainerInfo") UFUNCTION(BlueprintCallable, Category = "ContainerInfo")
void LoadFromSaveData(UPlayerInfoSaveGame* SaveGameData); bool LoadFromSaveData(FPrimaryAssetId ShapeID, const TArray<FContainerItemSaveData>& ContainerItems);
private: private:
//要添加的物品是否会覆盖其他物品 //要添加的物品是否会覆盖其他物品

View File

@ -44,10 +44,33 @@ bool UGameInfoManager::LoadGameInfo()
return false; return false;
} }
void UGameInfoManager::CreateGameInfo(UContainerInfo* ShipContainer) void UGameInfoManager::CreateGameInfo(UContainerInfo* ShipContainer, UContainerInfo* PlayerContainer)
{ {
PlayerInfo = NewObject<UPlayerInfoSaveGame>(this); PlayerInfo = NewObject<UPlayerInfoSaveGame>(this);
PlayerInfo->ShipContainerItems = ShipContainer->GetSaveData(); PlayerInfo->ShipContainerItems = ShipContainer->GetSaveData();
PlayerInfo->ShipContainerShapeID = ShipContainer->ContainerShape->GetPrimaryAssetId(); PlayerInfo->ShipContainerShapeID = ShipContainer->ContainerShape->GetPrimaryAssetId();
PlayerInfo->PlayerContainerItems = PlayerContainer->GetSaveData();
PlayerInfo->PlayerContainerShapeID = PlayerContainer->ContainerShape->GetPrimaryAssetId();
SaveGameInfo();
}
void UGameInfoManager::CreateGameInfoAndSave(UShapeAsset* ShipContainerShape, UShapeAsset* PlayerContainerShape)
{
//创建仓库信息
UContainerInfo* ShipContainer = NewObject<UContainerInfo>();
ShipContainer->InitContainerByShape(ShipContainerShape);
UContainerInfo* PlayerContainer = NewObject<UContainerInfo>();
PlayerContainer->InitContainerByShape(PlayerContainerShape);
//创建要保存的额存档信息
PlayerInfo = NewObject<UPlayerInfoSaveGame>(this);
PlayerInfo->ShipContainerItems = ShipContainer->GetSaveData();
PlayerInfo->ShipContainerShapeID = ShipContainer->ContainerShape->GetPrimaryAssetId();
PlayerInfo->PlayerContainerItems = PlayerContainer->GetSaveData();
PlayerInfo->PlayerContainerShapeID = PlayerContainer->ContainerShape->GetPrimaryAssetId();
SaveGameInfo(); SaveGameInfo();
} }

View File

@ -23,7 +23,10 @@ protected:
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
bool LoadGameInfo(); bool LoadGameInfo();
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)
void CreateGameInfo(UContainerInfo* ShipContainer); void CreateGameInfo(UContainerInfo* ShipContainer, UContainerInfo* PlayerContainer);
UFUNCTION(BlueprintCallable)
void CreateGameInfoAndSave(UShapeAsset* ShipContainerShape, UShapeAsset* PlayerContainerShape);
protected: protected:
UPROPERTY(BlueprintReadOnly) UPROPERTY(BlueprintReadOnly)
TObjectPtr<class UPlayerInfoSaveGame> PlayerInfo; TObjectPtr<class UPlayerInfoSaveGame> PlayerInfo;