更新背包接收地图生成的技能

This commit is contained in:
997146918 2025-09-24 12:13:42 +08:00
parent 33a7fb06f1
commit 5ddb1b45f9
10 changed files with 55 additions and 2 deletions

View File

@ -2,7 +2,7 @@
"BuildId": "37670630",
"Modules":
{
"ProjectFish": "UnrealEditor-ProjectFish-0001.dll",
"ProjectFishEditor": "UnrealEditor-ProjectFishEditor-0001.dll"
"ProjectFish": "UnrealEditor-ProjectFish.dll",
"ProjectFishEditor": "UnrealEditor-ProjectFishEditor.dll"
}
}

View File

@ -31,4 +31,11 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category= MapConfig, meta = (ToolTip = "战斗节点名称"))
FName BattleMapName = FName(TEXT("Dabaza"));
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category= MapConfig, meta = (ToolTip = "道具节点提供的技能"))
TArray<class USkillAsset*> RandomSkills;
// UPROPERTY(EditAnywhere, BlueprintReadWrite, Category= MapConfig, meta = (AllowedClasses = "SkillAsset", ToolTip = "道具节点提供的技能"))
// TArray<FSoftObjectPath> RandomSkills;
};

View File

@ -1,4 +1,6 @@
#include "FishingMapSubSystem.h"
#include "FishingRodConfigSubsystem.h"
#include "Engine/Engine.h"
#include "Kismet/GameplayStatics.h"
#include "ProjectFish/DataAsset/MapConfigAsset.h"
@ -100,6 +102,17 @@ void UFishingMapSubSystem::MoveToNode(FGuid NodeID)
UGameplayStatics::OpenLevel(this, MapConfig->BattleMapName);
break;
case EMapNodeType::Skill:
//添加技能到背包系统中
if (UGameInstance* GameInstance = GetGameInstance())
{
//USkillAsset* RandomSkill =LoadObject<USkillAsset>(this, * MapConfig->RandomSkills[FMath::RandRange(0, MapConfig->RandomSkills.Num() - 1)].ToString());
USkillAsset* RandomSkill = DuplicateObject<USkillAsset>(MapConfig->RandomSkills[FMath::RandRange(0, MapConfig->RandomSkills.Num() - 1)], this);
if (!GameInstance->GetSubsystem<UFishingRodConfigSubsystem>()->AddSkillToPlayerInventory(RandomSkill))
{
UE_LOG(LogTemp, Error, TEXT("道具节点添加道具失败,背包没有多余位置"));
}
}
break;;
}
}

View File

@ -4,6 +4,7 @@
#include "FishingRodConfigSubsystem.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h"
void UFishingRodConfigSubsystem::CreateFishingRodInventory(class UBagShapeAsset* FishingRodShape, class UBagShapeAsset* PlayerBagShape)
{
@ -24,3 +25,27 @@ UBagConfigAsset* UFishingRodConfigSubsystem::GetPlayerInventory()
{
return playerInventoryConfig;
}
bool UFishingRodConfigSubsystem::AddSkillByConfig(USkillAsset* SkillAsset, UBagConfigAsset* InventoryConfig,
FIntPoint Position)
{
return InventoryConfig->AddSkill(SkillAsset, Position.X, Position.Y);
}
bool UFishingRodConfigSubsystem::AddSkillToPlayerInventory(USkillAsset* SkillAsset)
{
int32 width = playerInventoryConfig->BagShapeAsset->BagWidth;
int32 height = playerInventoryConfig->BagShapeAsset->BagHeight;
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
if (playerInventoryConfig->AddSkill(SkillAsset, x, y))
{
return true;
}
}
}
return false;
}

View File

@ -3,6 +3,7 @@
#pragma once
#include "CoreMinimal.h"
#include "ProjectFish/DataAsset/SkillAsset.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "FishingRodConfigSubsystem.generated.h"
@ -22,6 +23,13 @@ public:
UBagConfigAsset* GetFishingRodInventory();
UFUNCTION(BlueprintPure, Category = "PlayerInventorySubsystem")
UBagConfigAsset* GetPlayerInventory();
UFUNCTION(BlueprintPure, Category = "PlayerInventorySubsystem")
bool AddSkillByConfig(USkillAsset* SkillAsset, UBagConfigAsset* InventoryConfig, FIntPoint Position);
UFUNCTION(BlueprintPure, Category = "PlayerInventorySubsystem")
bool AddSkillToPlayerInventory(USkillAsset* SkillAsset);
private:
UPROPERTY()
class UBagConfigAsset* fishingRodInventoryConfig = nullptr;