调整资源类型

This commit is contained in:
997146918 2025-10-15 18:25:31 +08:00
parent 37dd8f735e
commit 4c07e0601d
47 changed files with 410 additions and 401 deletions

View File

@ -100,6 +100,9 @@ ManualIPAddress=
+ClassRedirects=(OldName="/Script/ProjectFish.PlayerInventorySubsystem",NewName="/Script/ProjectFish.FishingRodConfigSubsystem") +ClassRedirects=(OldName="/Script/ProjectFish.PlayerInventorySubsystem",NewName="/Script/ProjectFish.FishingRodConfigSubsystem")
+ClassRedirects=(OldName="/Script/ProjectFish.SimpleMapSystem",NewName="/Script/ProjectFish.FishingMapSubSystem") +ClassRedirects=(OldName="/Script/ProjectFish.SimpleMapSystem",NewName="/Script/ProjectFish.FishingMapSubSystem")
+ClassRedirects=(OldName="/Script/ProjectFish.FishingMapSystem",NewName="/Script/ProjectFish.FishingMapSubSystem") +ClassRedirects=(OldName="/Script/ProjectFish.FishingMapSystem",NewName="/Script/ProjectFish.FishingMapSubSystem")
+ClassRedirects=(OldName="/Script/ProjectFish.BagShapeAsset",NewName="/Script/ProjectFish.ShapeAsset")
+ClassRedirects=(OldName="/Script/ProjectFishEditor.BagShapeFactory",NewName="/Script/ProjectFishEditor.ShapeFactory")
+ClassRedirects=(OldName="/Script/ProjectFishEditor.BagShapeAssetThumbnailRenderer",NewName="/Script/ProjectFishEditor.ShapeAssetThumbnailRenderer")
[/Script/Engine.CollisionProfile] [/Script/Engine.CollisionProfile]
-Profiles=(Name="NoCollision",CollisionEnabled=NoCollision,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="No collision",bCanModify=False) -Profiles=(Name="NoCollision",CollisionEnabled=NoCollision,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="No collision",bCanModify=False)

View File

@ -3,7 +3,7 @@
#include "BagConfigAsset.h" #include "BagConfigAsset.h"
#include "BagShapeAsset.h" #include "ShapeAsset.h"
bool UBagConfigAsset::AddSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY) bool UBagConfigAsset::AddSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY)

View File

@ -8,7 +8,7 @@
#include "SkillAsset.h" #include "SkillAsset.h"
#include "BagConfigAsset.generated.h" #include "BagConfigAsset.generated.h"
class UBagShapeAsset; class UShapeAsset;
//背包中摆放的技能信息 //背包中摆放的技能信息
USTRUCT(BlueprintType) USTRUCT(BlueprintType)
@ -66,7 +66,7 @@ class PROJECTFISH_API UBagConfigAsset : public UDataAsset
public: public:
// 背包形状资源引用 // 背包形状资源引用
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BagConfig") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BagConfig")
TObjectPtr<UBagShapeAsset> BagShapeAsset; TObjectPtr<UShapeAsset> BagShapeAsset;
// 背包中放置的技能列表 // 背包中放置的技能列表
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "BagConfig") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "BagConfig")

View File

@ -1,56 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "BagShapeAsset.h"
UBagShapeAsset::UBagShapeAsset()
{
InitializeBagShape();
}
void UBagShapeAsset::InitializeBagShape()
{
BagSlots.Empty();
for (int x = 0; x < BagWidth; x++)
{
for (int y = 0; y < BagHeight; y++)
{
BagSlots.Add(FBagSlot(x, y, true));
}
}
}
bool UBagShapeAsset::IsSlotActive(int32 X, int32 Y) const
{
if (X < 0 || X >= BagWidth || Y < 0 || Y >= BagHeight)
return false;
for (auto BagSlot: BagSlots)
{
if (BagSlot.X == X && BagSlot.Y == Y)
return BagSlot.bIsActive;
}
return false;
}
void UBagShapeAsset::SetSlotActive(int32 X, int32 Y, bool Active)
{
if (X < 0 || X >= BagWidth || Y < 0 || Y >= BagHeight)
return;
int SlotIndex = FIndSlotIndex(X, Y);
if (SlotIndex != INDEX_NONE)
{
BagSlots[SlotIndex].bIsActive = Active;
}
}
int32 UBagShapeAsset::FIndSlotIndex(int32 X, int32 Y) const
{
for (int i = 0; i < BagSlots.Num(); i++)
{
if (BagSlots[i].X == X && BagSlots[i].Y == Y)
return i;
}
return INDEX_NONE;
}

View File

@ -1,63 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "BagShapeAsset.generated.h"
USTRUCT(BlueprintType)
struct FBagSlot
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 X;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 Y;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bIsActive;
FBagSlot()
{
X = 0;
Y = 0;
bIsActive = false;
}
FBagSlot(int32 InX, int32 InY, bool InIsActive)
{
X = InX;
Y = InY;
bIsActive = InIsActive;
}
};
/**
*
*/
UCLASS(BlueprintType)
class PROJECTFISH_API UBagShapeAsset : public UDataAsset
{
GENERATED_BODY()
public:
UBagShapeAsset();
UFUNCTION(BlueprintCallable, Category="BagShape")
void InitializeBagShape();
UFUNCTION(Blueprintable, BlueprintPure, Category="BagShape")
bool IsSlotActive(int32 X, int32 Y) const;
UFUNCTION(Blueprintable, Category="BagShape")
void SetSlotActive(int32 X, int32 Y, bool Active);
private:
int32 FIndSlotIndex(int32 X, int32 Y) const;
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "BagShape", meta = (ClampMin = "1", ClampMax = "10"))
int32 BagWidth;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "BagShape", meta = (ClampMin = "1", ClampMax = "10"))
int32 BagHeight;
//存储格子状态
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="BagShape")
TArray<FBagSlot> BagSlots;
};

View File

@ -0,0 +1,56 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "ShapeAsset.h"
UShapeAsset::UShapeAsset()
{
InitializeShape();
}
void UShapeAsset::InitializeShape()
{
Slots.Empty();
for (int x = 0; x < ShapeWidth; x++)
{
for (int y = 0; y < ShapeHeight; y++)
{
Slots.Add(FShapeSlot(x, y, true));
}
}
}
bool UShapeAsset::IsSlotActive(int32 X, int32 Y) const
{
if (X < 0 || X >= ShapeWidth || Y < 0 || Y >= ShapeHeight)
return false;
for (auto BagSlot: Slots)
{
if (BagSlot.X == X && BagSlot.Y == Y)
return BagSlot.bIsActive;
}
return false;
}
void UShapeAsset::SetSlotActive(int32 X, int32 Y, bool Active)
{
if (X < 0 || X >= ShapeWidth || Y < 0 || Y >= ShapeHeight)
return;
int SlotIndex = FIndSlotIndex(X, Y);
if (SlotIndex != INDEX_NONE)
{
Slots[SlotIndex].bIsActive = Active;
}
}
int32 UShapeAsset::FIndSlotIndex(int32 X, int32 Y) const
{
for (int i = 0; i < Slots.Num(); i++)
{
if (Slots[i].X == X && Slots[i].Y == Y)
return i;
}
return INDEX_NONE;
}

View File

@ -0,0 +1,69 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "ShapeAsset.generated.h"
USTRUCT(BlueprintType)
struct FShapeSlot
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 X;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 Y;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bIsActive;
FShapeSlot()
{
X = 0;
Y = 0;
bIsActive = false;
}
FShapeSlot(int32 InX, int32 InY, bool InIsActive)
{
X = InX;
Y = InY;
bIsActive = InIsActive;
}
};
/**
*
*/
UCLASS(BlueprintType)
class PROJECTFISH_API UShapeAsset : public UDataAsset
{
GENERATED_BODY()
public:
UShapeAsset();
UFUNCTION(BlueprintCallable, Category="Shape")
void InitializeShape();
UFUNCTION(BlueprintPure, Category="Shape")
int32 GetShapeWidth() { return ShapeWidth; }
UFUNCTION(BlueprintPure, Category="Shape")
int32 GetShapeHeight() { return ShapeHeight; }
UFUNCTION(Blueprintable, BlueprintPure, Category="Shape")
bool IsSlotActive(int32 X, int32 Y) const;
UFUNCTION(Blueprintable, Category="Shape")
void SetSlotActive(int32 X, int32 Y, bool Active);
private:
int32 FIndSlotIndex(int32 X, int32 Y) const;
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Shape", meta = (ClampMin = "1", ClampMax = "10"))
int32 ShapeWidth;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Shape", meta = (ClampMin = "1", ClampMax = "10"))
int32 ShapeHeight;
//存储格子状态
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Shape")
TArray<FShapeSlot> Slots;
};

View File

@ -113,7 +113,7 @@ protected:
class UBagConfigAsset* DefaultPlayerBag; class UBagConfigAsset* DefaultPlayerBag;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Inventory, meta = (AllowPrivateAccess = "true", ToolTip = "鱼竿装备槽形状")) UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Inventory, meta = (AllowPrivateAccess = "true", ToolTip = "鱼竿装备槽形状"))
class UBagShapeAsset* FishingRodShape; class UShapeAsset* FishingRodShape;
private: private:

View File

@ -4,9 +4,9 @@
#include "FishingRodConfigSubsystem.h" #include "FishingRodConfigSubsystem.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h" #include "ProjectFish/DataAsset/BagConfigAsset.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h" #include "ProjectFish/DataAsset/ShapeAsset.h"
void UFishingRodConfigSubsystem::CreateFishingRodInventory(class UBagShapeAsset* FishingRodShape, class UBagConfigAsset* PlayerBagConfig) void UFishingRodConfigSubsystem::CreateFishingRodInventory(class UShapeAsset* FishingRodShape, class UBagConfigAsset* PlayerBagConfig)
{ {
//鱼竿的技能配置资源 //鱼竿的技能配置资源
fishingRodInventoryConfig = NewObject<UBagConfigAsset>(this); fishingRodInventoryConfig = NewObject<UBagConfigAsset>(this);
@ -36,8 +36,8 @@ bool UFishingRodConfigSubsystem::AddSkillByConfig(USkillAsset* SkillAsset, UBagC
bool UFishingRodConfigSubsystem::AddSkillToPlayerInventory(USkillAsset* SkillAsset) bool UFishingRodConfigSubsystem::AddSkillToPlayerInventory(USkillAsset* SkillAsset)
{ {
int32 width = playerInventoryConfig->BagShapeAsset->BagWidth; int32 width = playerInventoryConfig->BagShapeAsset->ShapeWidth;
int32 height = playerInventoryConfig->BagShapeAsset->BagHeight; int32 height = playerInventoryConfig->BagShapeAsset->ShapeHeight;
for (int x = 0; x < width; x++) for (int x = 0; x < width; x++)
{ {
for (int y = 0; y < height; y++) for (int y = 0; y < height; y++)

View File

@ -17,7 +17,7 @@ class PROJECTFISH_API UFishingRodConfigSubsystem : public UGameInstanceSubsystem
public: public:
UFUNCTION(BlueprintCallable, Category = "PlayerInventorySubsystem") UFUNCTION(BlueprintCallable, Category = "PlayerInventorySubsystem")
void CreateFishingRodInventory(class UBagShapeAsset* FishingRodShape, class UBagConfigAsset* PlayerBagConfig); void CreateFishingRodInventory(class UShapeAsset* FishingRodShape, class UBagConfigAsset* PlayerBagConfig);
UFUNCTION(BlueprintPure, Category = "PlayerInventorySubsystem") UFUNCTION(BlueprintPure, Category = "PlayerInventorySubsystem")
UBagConfigAsset* GetFishingRodInventory(); UBagConfigAsset* GetFishingRodInventory();

View File

@ -6,7 +6,7 @@
#include "Kismet/GameplayStatics.h" #include "Kismet/GameplayStatics.h"
#include "ProjectFish/ProjectFishGameMode.h" #include "ProjectFish/ProjectFishGameMode.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h" #include "ProjectFish/DataAsset/BagConfigAsset.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h" #include "ProjectFish/DataAsset/ShapeAsset.h"
USkillManager::USkillManager() USkillManager::USkillManager()
{ {

View File

@ -1,41 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AssetActions/BagShapeAssetTypeAction.h"
#include "AssetEditor/BagShapeAssetEditor.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h"
UClass* FBagShapeAssetTypeAction::GetSupportedClass() const
{
return UBagShapeAsset::StaticClass();
}
void FBagShapeAssetTypeAction::OpenAssetEditor(const TArray<UObject*>& InObjects,
TSharedPtr<IToolkitHost> EditWithinLevelEditor)
{
EToolkitMode::Type Mode = EditWithinLevelEditor.IsValid() ? EToolkitMode::WorldCentric : EToolkitMode::Standalone;
for (auto ObjIt = InObjects.CreateConstIterator(); ObjIt; ++ObjIt)
{
if (UBagShapeAsset* BagShapeAsset = Cast<UBagShapeAsset>(*ObjIt))
{
TSharedRef<FBagShapeAssetEditor> EditorToolkit = MakeShareable(new FBagShapeAssetEditor());
EditorToolkit->Initialize(Mode, EditWithinLevelEditor, BagShapeAsset);
}
}
}
uint32 FBagShapeAssetTypeAction::GetCategories()
{
//系统原有
//return EAssetTypeCategories::Gameplay;
return MyAssetCategory;
}
void FBagShapeAssetTypeAction::GetActions(const TArray<UObject*>& InObjects, struct FToolMenuSection& Section)
{
FAssetTypeActions_Base::GetActions(InObjects, Section);
}

View File

@ -0,0 +1,41 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AssetActions/ShapeAssetTypeAction.h"
#include "AssetEditor/ShapeAssetEditor.h"
#include "ProjectFish/DataAsset/ShapeAsset.h"
UClass* FShapeAssetTypeAction::GetSupportedClass() const
{
return UShapeAsset::StaticClass();
}
void FShapeAssetTypeAction::OpenAssetEditor(const TArray<UObject*>& InObjects,
TSharedPtr<IToolkitHost> EditWithinLevelEditor)
{
EToolkitMode::Type Mode = EditWithinLevelEditor.IsValid() ? EToolkitMode::WorldCentric : EToolkitMode::Standalone;
for (auto ObjIt = InObjects.CreateConstIterator(); ObjIt; ++ObjIt)
{
if (UShapeAsset* BagShapeAsset = Cast<UShapeAsset>(*ObjIt))
{
TSharedRef<FShapeAssetEditor> EditorToolkit = MakeShareable(new FShapeAssetEditor());
EditorToolkit->Initialize(Mode, EditWithinLevelEditor, BagShapeAsset);
}
}
}
uint32 FShapeAssetTypeAction::GetCategories()
{
//系统原有
//return EAssetTypeCategories::Gameplay;
return MyAssetCategory;
}
void FShapeAssetTypeAction::GetActions(const TArray<UObject*>& InObjects, struct FToolMenuSection& Section)
{
FAssetTypeActions_Base::GetActions(InObjects, Section);
}

View File

@ -1,74 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AssetEditor/BagShapeAssetEditor.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h"
#include "Widgets/BagShapeEditorWidget.h"
const FName FBagShapeAssetEditor::BagShapeEditorTabId(TEXT("BagShapeEditor"));
void FBagShapeAssetEditor::Initialize(const EToolkitMode::Type Mode,
const TSharedPtr<class IToolkitHost>& InitToolkitHost, UBagShapeAsset* InBagShapeAsset)
{
BagShapeAsset = InBagShapeAsset;
const TSharedRef<FTabManager::FLayout> StandaloneDefaultLayout = FTabManager::NewLayout("Standalone_BagShapeAssetEditor_Layout_v1")
->AddArea
(
FTabManager::NewPrimaryArea()->SetOrientation(Orient_Vertical)
->Split
(
FTabManager::NewStack()
->SetSizeCoefficient(1.0f)
->AddTab(BagShapeEditorTabId, ETabState::OpenedTab)
)
);
FAssetEditorToolkit::InitAssetEditor(Mode, InitToolkitHost, TEXT("BagShapeAssetEditorApp"), StandaloneDefaultLayout, true, true, InBagShapeAsset);
}
FName FBagShapeAssetEditor::GetToolkitFName() const
{
return FName("BagShapeEditor");
}
FText FBagShapeAssetEditor::GetBaseToolkitName() const
{
return FText::FromString("Base BagShapeEditor");
}
FString FBagShapeAssetEditor::GetWorldCentricTabPrefix() const
{
return TEXT("ShapeTab");
}
FLinearColor FBagShapeAssetEditor::GetWorldCentricTabColorScale() const
{
//return FLinearColor::White;
return FLinearColor(1.f, 0.8f, 0.45f, 0.5f);
}
void FBagShapeAssetEditor::RegisterTabSpawners(const TSharedRef<FTabManager>& tabManager)
{
WorkspaceMenuCategory = tabManager->AddLocalWorkspaceMenuCategory( FText::FromString("BagShape"));
tabManager->RegisterTabSpawner(BagShapeEditorTabId, FOnSpawnTab::CreateSP(this, &FBagShapeAssetEditor::SpawnBagShapeEditorTab))
.SetDisplayName( FText::FromString("BagShapeEditor"))
.SetGroup(WorkspaceMenuCategory.ToSharedRef());
}
void FBagShapeAssetEditor::UnregisterTabSpawners(const TSharedRef<FTabManager>& tabManager)
{
tabManager->UnregisterTabSpawner(BagShapeEditorTabId);
}
TSharedRef<SDockTab> FBagShapeAssetEditor::SpawnBagShapeEditorTab(const FSpawnTabArgs& Args)
{
return SNew(SDockTab)
.TabRole(ETabRole::PanelTab)
[
SNew(SBagShapeEditorWidget)
.BagShapeAsset(BagShapeAsset)
];
}

View File

@ -0,0 +1,74 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AssetEditor/ShapeAssetEditor.h"
#include "ProjectFish/DataAsset/ShapeAsset.h"
#include "Widgets/BagShapeEditorWidget.h"
const FName FShapeAssetEditor::ShapeEditorTabId(TEXT("BagShapeEditor"));
void FShapeAssetEditor::Initialize(const EToolkitMode::Type Mode,
const TSharedPtr<class IToolkitHost>& InitToolkitHost, UShapeAsset* InBagShapeAsset)
{
ShapeAsset = InBagShapeAsset;
const TSharedRef<FTabManager::FLayout> StandaloneDefaultLayout = FTabManager::NewLayout("Standalone_BagShapeAssetEditor_Layout_v1")
->AddArea
(
FTabManager::NewPrimaryArea()->SetOrientation(Orient_Vertical)
->Split
(
FTabManager::NewStack()
->SetSizeCoefficient(1.0f)
->AddTab(ShapeEditorTabId, ETabState::OpenedTab)
)
);
FAssetEditorToolkit::InitAssetEditor(Mode, InitToolkitHost, TEXT("BagShapeAssetEditorApp"), StandaloneDefaultLayout, true, true, InBagShapeAsset);
}
FName FShapeAssetEditor::GetToolkitFName() const
{
return FName("ShapeEditor");
}
FText FShapeAssetEditor::GetBaseToolkitName() const
{
return FText::FromString("Base ShapeEditor");
}
FString FShapeAssetEditor::GetWorldCentricTabPrefix() const
{
return TEXT("ShapeTab");
}
FLinearColor FShapeAssetEditor::GetWorldCentricTabColorScale() const
{
//return FLinearColor::White;
return FLinearColor(1.f, 0.8f, 0.45f, 0.5f);
}
void FShapeAssetEditor::RegisterTabSpawners(const TSharedRef<FTabManager>& tabManager)
{
WorkspaceMenuCategory = tabManager->AddLocalWorkspaceMenuCategory( FText::FromString("BagShape"));
tabManager->RegisterTabSpawner(ShapeEditorTabId, FOnSpawnTab::CreateSP(this, &FShapeAssetEditor::SpawnBagShapeEditorTab))
.SetDisplayName( FText::FromString("BagShapeEditor"))
.SetGroup(WorkspaceMenuCategory.ToSharedRef());
}
void FShapeAssetEditor::UnregisterTabSpawners(const TSharedRef<FTabManager>& tabManager)
{
tabManager->UnregisterTabSpawner(ShapeEditorTabId);
}
TSharedRef<SDockTab> FShapeAssetEditor::SpawnBagShapeEditorTab(const FSpawnTabArgs& Args)
{
return SNew(SDockTab)
.TabRole(ETabRole::PanelTab)
[
SNew(SShapeEditorWidget)
.BagShapeAsset(ShapeAsset)
];
}

View File

@ -1,30 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "Factory/BagShapeFactory.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h"
UBagShapeFactory::UBagShapeFactory()
{
SupportedClass = UBagShapeAsset::StaticClass();
}
UObject* UBagShapeFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn)
{
UBagShapeAsset* NewBagShapeAsset = NewObject<UBagShapeAsset>(InParent, Class, Name, Flags | RF_Transactional);
if (NewBagShapeAsset)
{
NewBagShapeAsset->BagWidth = 5;
NewBagShapeAsset->BagHeight = 5;
NewBagShapeAsset->InitializeBagShape();
}
return NewBagShapeAsset;
}
bool UBagShapeFactory::ShouldShowInNewMenu() const
{
return true;
}

View File

@ -0,0 +1,30 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "Factory/ShapeFactory.h"
#include "ProjectFish/DataAsset/ShapeAsset.h"
UShapeFactory::UShapeFactory()
{
SupportedClass = UShapeAsset::StaticClass();
}
UObject* UShapeFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn)
{
UShapeAsset* NewBagShapeAsset = NewObject<UShapeAsset>(InParent, Class, Name, Flags | RF_Transactional);
if (NewBagShapeAsset)
{
NewBagShapeAsset->ShapeWidth = 5;
NewBagShapeAsset->ShapeHeight = 5;
NewBagShapeAsset->InitializeShape();
}
return NewBagShapeAsset;
}
bool UShapeFactory::ShouldShowInNewMenu() const
{
return true;
}

View File

@ -3,10 +3,10 @@
#include "AssetTypeActions_Base.h" #include "AssetTypeActions_Base.h"
#include "DataTableRowSelectorCustomization.h" #include "DataTableRowSelectorCustomization.h"
#include "AssetActions/BagConfigAssetTypeAction.h" #include "AssetActions/BagConfigAssetTypeAction.h"
#include "AssetActions/BagShapeAssetTypeAction.h" #include "AssetActions/ShapeAssetTypeAction.h"
#include "AssetRegistry/AssetRegistryModule.h" #include "AssetRegistry/AssetRegistryModule.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h" #include "ProjectFish/DataAsset/ShapeAsset.h"
#include "../Public/Thumbnail/BagShapeAssetThumbnailRenderer.h" #include "../Public/Thumbnail/ShapeAssetThumbnailRenderer.h"
#include "../Public/Thumbnail/BagConfigThumbnailRenderer.h" #include "../Public/Thumbnail/BagConfigThumbnailRenderer.h"
#include "AssetActions/SkillAssetTypeAction.h" #include "AssetActions/SkillAssetTypeAction.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h" #include "ProjectFish/DataAsset/BagConfigAsset.h"
@ -44,7 +44,7 @@ void FProjectFishEditorModule::RegisterAssetTypeActions()
//注册背包形状的菜单 //注册背包形状的菜单
EAssetTypeCategories::Type BogShapeAssetCategory = AssetTools.RegisterAdvancedAssetCategory(FName(TEXT("BagShape")), FText::FromString(TEXT("BagSystem"))); EAssetTypeCategories::Type BogShapeAssetCategory = AssetTools.RegisterAdvancedAssetCategory(FName(TEXT("BagShape")), FText::FromString(TEXT("BagSystem")));
//BagShape //BagShape
TSharedRef<FAssetTypeActions_Base> BagShapeAction = MakeShareable(new FBagShapeAssetTypeAction(BogShapeAssetCategory)); TSharedRef<FAssetTypeActions_Base> BagShapeAction = MakeShareable(new FShapeAssetTypeAction(BogShapeAssetCategory));
AssetTools.RegisterAssetTypeActions(BagShapeAction); AssetTools.RegisterAssetTypeActions(BagShapeAction);
CreatedAssetTypeActions.Add(BagShapeAction); CreatedAssetTypeActions.Add(BagShapeAction);
@ -77,7 +77,7 @@ void FProjectFishEditorModule::UnregisterAssetTypeActions()
void FProjectFishEditorModule::RegisterThumbnailRenderers() void FProjectFishEditorModule::RegisterThumbnailRenderers()
{ {
UThumbnailManager::Get().RegisterCustomRenderer(UBagShapeAsset::StaticClass(), UBagShapeAssetThumbnailRenderer::StaticClass()); UThumbnailManager::Get().RegisterCustomRenderer(UShapeAsset::StaticClass(), UShapeAssetThumbnailRenderer::StaticClass());
UThumbnailManager::Get().RegisterCustomRenderer(UBagConfigAsset::StaticClass(), UBagConfigThumbnailRenderer::StaticClass()); UThumbnailManager::Get().RegisterCustomRenderer(UBagConfigAsset::StaticClass(), UBagConfigThumbnailRenderer::StaticClass());
RefreshExistingAssetThumbnails(); RefreshExistingAssetThumbnails();
} }
@ -86,7 +86,7 @@ void FProjectFishEditorModule::UnregisterThumbnailRenderers()
{ {
if (UObjectInitialized()) if (UObjectInitialized())
{ {
UThumbnailManager::Get().UnregisterCustomRenderer(UBagShapeAsset::StaticClass()); UThumbnailManager::Get().UnregisterCustomRenderer(UShapeAsset::StaticClass());
UThumbnailManager::Get().UnregisterCustomRenderer(UBagConfigAsset::StaticClass()); UThumbnailManager::Get().UnregisterCustomRenderer(UBagConfigAsset::StaticClass());
} }
} }
@ -103,7 +103,7 @@ void FProjectFishEditorModule::RefreshExistingAssetThumbnails()
// 查找所有BagShapeAsset资产 // 查找所有BagShapeAsset资产
TArray<FAssetData> BagShapeAssetList; TArray<FAssetData> BagShapeAssetList;
AssetRegistry.GetAssetsByClass(UBagShapeAsset::StaticClass()->GetClassPathName(), BagShapeAssetList); AssetRegistry.GetAssetsByClass(UShapeAsset::StaticClass()->GetClassPathName(), BagShapeAssetList);
// 查找所有BagClass资产 // 查找所有BagClass资产
TArray<FAssetData> BagConfigAssetList; TArray<FAssetData> BagConfigAssetList;

View File

@ -6,7 +6,7 @@
#include "CanvasItem.h" #include "CanvasItem.h"
#include "CanvasTypes.h" #include "CanvasTypes.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h" #include "ProjectFish/DataAsset/BagConfigAsset.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h" #include "ProjectFish/DataAsset/ShapeAsset.h"
bool UBagConfigThumbnailRenderer::CanVisualizeAsset(UObject* Object) bool UBagConfigThumbnailRenderer::CanVisualizeAsset(UObject* Object)
{ {
@ -43,7 +43,7 @@ void UBagConfigThumbnailRenderer::DrawBag(UBagConfigAsset* BagConfig, FCanvas* C
return; return;
} }
UBagShapeAsset* BagShapeAsset = BagConfig->BagShapeAsset; UShapeAsset* BagShapeAsset = BagConfig->BagShapeAsset;
// Clear the background // Clear the background
FCanvasBoxItem BackgroundBox(FVector2D(X, Y), FVector2D(Width, Height)); FCanvasBoxItem BackgroundBox(FVector2D(X, Y), FVector2D(Width, Height));
@ -52,19 +52,19 @@ void UBagConfigThumbnailRenderer::DrawBag(UBagConfigAsset* BagConfig, FCanvas* C
// Calculate the best fit scale with spacing for separators // Calculate the best fit scale with spacing for separators
float SeparatorWidth = 2.0f; // White separator width float SeparatorWidth = 2.0f; // White separator width
float Scale = GetBestFitScale(BagShapeAsset->BagWidth, BagShapeAsset->BagHeight, Width, Height); float Scale = GetBestFitScale(BagShapeAsset->ShapeWidth, BagShapeAsset->ShapeHeight, Width, Height);
float CellSize = Scale - SeparatorWidth; // Reduce cell size to make room for separators float CellSize = Scale - SeparatorWidth; // Reduce cell size to make room for separators
// Calculate starting position to center the grid (including separators) // Calculate starting position to center the grid (including separators)
float GridWidth = BagShapeAsset->BagWidth * Scale - SeparatorWidth; float GridWidth = BagShapeAsset->ShapeWidth * Scale - SeparatorWidth;
float GridHeight = BagShapeAsset->BagHeight * Scale - SeparatorWidth; float GridHeight = BagShapeAsset->ShapeHeight * Scale - SeparatorWidth;
float StartX = X + (Width - GridWidth) * 0.5f; float StartX = X + (Width - GridWidth) * 0.5f;
float StartY = Y + (Height - GridHeight) * 0.5f; float StartY = Y + (Height - GridHeight) * 0.5f;
// Draw the bag slots (background) with separators // Draw the bag slots (background) with separators
for (int32 GridY = 0; GridY < BagShapeAsset->BagHeight; GridY++) for (int32 GridY = 0; GridY < BagShapeAsset->ShapeHeight; GridY++)
{ {
for (int32 GridX = 0; GridX < BagShapeAsset->BagWidth; GridX++) for (int32 GridX = 0; GridX < BagShapeAsset->ShapeWidth; GridX++)
{ {
float CellStartX = StartX + GridX * Scale; float CellStartX = StartX + GridX * Scale;
float CellStartY = StartY + GridY * Scale; float CellStartY = StartY + GridY * Scale;
@ -81,7 +81,7 @@ void UBagConfigThumbnailRenderer::DrawBag(UBagConfigAsset* BagConfig, FCanvas* C
// Draw white separators // Draw white separators
// Vertical separators // Vertical separators
for (int32 GridX = 1; GridX < BagShapeAsset->BagWidth; GridX++) for (int32 GridX = 1; GridX < BagShapeAsset->ShapeWidth; GridX++)
{ {
float SeparatorX = StartX + GridX * Scale - SeparatorWidth; float SeparatorX = StartX + GridX * Scale - SeparatorWidth;
FCanvasTileItem VerticalSeparator(FVector2D(SeparatorX, StartY), FVector2D(SeparatorWidth, GridHeight), FLinearColor::White); FCanvasTileItem VerticalSeparator(FVector2D(SeparatorX, StartY), FVector2D(SeparatorWidth, GridHeight), FLinearColor::White);
@ -90,7 +90,7 @@ void UBagConfigThumbnailRenderer::DrawBag(UBagConfigAsset* BagConfig, FCanvas* C
} }
// Horizontal separators // Horizontal separators
for (int32 GridY = 1; GridY < BagShapeAsset->BagHeight; GridY++) for (int32 GridY = 1; GridY < BagShapeAsset->ShapeHeight; GridY++)
{ {
float SeparatorY = StartY + GridY * Scale - SeparatorWidth; float SeparatorY = StartY + GridY * Scale - SeparatorWidth;
FCanvasTileItem HorizontalSeparator(FVector2D(StartX, SeparatorY), FVector2D(GridWidth, SeparatorWidth), FLinearColor::White); FCanvasTileItem HorizontalSeparator(FVector2D(StartX, SeparatorY), FVector2D(GridWidth, SeparatorWidth), FLinearColor::White);
@ -111,10 +111,10 @@ void UBagConfigThumbnailRenderer::DrawBag(UBagConfigAsset* BagConfig, FCanvas* C
Canvas->DrawItem(OuterBorder); Canvas->DrawItem(OuterBorder);
} }
float UBagConfigThumbnailRenderer::GetBestFitScale(int32 BagWidth, int32 BagHeight, uint32 CanvasWidth, float UBagConfigThumbnailRenderer::GetBestFitScale(int32 ShapeWidth, int32 ShapeHeight, uint32 CanvasWidth,
uint32 CanvasHeight) const uint32 CanvasHeight) const
{ {
if (BagWidth == 0 || BagHeight == 0) if (ShapeWidth == 0 || ShapeHeight == 0)
{ {
return 1.0f; return 1.0f;
} }
@ -123,8 +123,8 @@ float UBagConfigThumbnailRenderer::GetBestFitScale(int32 BagWidth, int32 BagHeig
float PaddedWidth = CanvasWidth * 0.85f; float PaddedWidth = CanvasWidth * 0.85f;
float PaddedHeight = CanvasHeight * 0.85f; float PaddedHeight = CanvasHeight * 0.85f;
float ScaleX = PaddedWidth / BagWidth; float ScaleX = PaddedWidth / ShapeWidth;
float ScaleY = PaddedHeight / BagHeight; float ScaleY = PaddedHeight / ShapeHeight;
// Use the smaller scale to ensure everything fits // Use the smaller scale to ensure everything fits
float Scale = FMath::Min(ScaleX, ScaleY); float Scale = FMath::Min(ScaleX, ScaleY);

View File

@ -1,21 +1,21 @@
// Fill out your copyright notice in the Description page of Project Settings. // Fill out your copyright notice in the Description page of Project Settings.
#include "ProjectFishEditor/Public/Thumbnail/BagShapeAssetThumbnailRenderer.h" #include "ProjectFishEditor/Public/Thumbnail/ShapeAssetThumbnailRenderer.h"
#include "CanvasItem.h" #include "CanvasItem.h"
#include "CanvasTypes.h" #include "CanvasTypes.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h" #include "ProjectFish/DataAsset/ShapeAsset.h"
bool UBagShapeAssetThumbnailRenderer::CanVisualizeAsset(UObject* Object) bool UShapeAssetThumbnailRenderer::CanVisualizeAsset(UObject* Object)
{ {
return Cast<UBagShapeAsset>(Object) != nullptr; return Cast<UShapeAsset>(Object) != nullptr;
} }
void UBagShapeAssetThumbnailRenderer::Draw(UObject* Object, int32 X, int32 Y, uint32 Width, uint32 Height, void UShapeAssetThumbnailRenderer::Draw(UObject* Object, int32 X, int32 Y, uint32 Width, uint32 Height,
FRenderTarget* RenderTarget, FCanvas* Canvas, bool bAdditionalViewFamily) FRenderTarget* RenderTarget, FCanvas* Canvas, bool bAdditionalViewFamily)
{ {
UBagShapeAsset* BagShapeAsset = Cast<UBagShapeAsset>(Object); UShapeAsset* BagShapeAsset = Cast<UShapeAsset>(Object);
if (!BagShapeAsset || !Canvas) if (!BagShapeAsset || !Canvas)
{ {
return; return;
@ -24,7 +24,7 @@ void UBagShapeAssetThumbnailRenderer::Draw(UObject* Object, int32 X, int32 Y, ui
DrawBagShape(BagShapeAsset, Canvas, X, Y, Width, Height); DrawBagShape(BagShapeAsset, Canvas, X, Y, Width, Height);
} }
void UBagShapeAssetThumbnailRenderer::DrawBagShape(UBagShapeAsset* BagShapeAsset, FCanvas* Canvas, int32 X, int32 Y, void UShapeAssetThumbnailRenderer::DrawBagShape(UShapeAsset* BagShapeAsset, FCanvas* Canvas, int32 X, int32 Y,
uint32 Width, uint32 Height) uint32 Width, uint32 Height)
{ {
if (!BagShapeAsset || !Canvas) if (!BagShapeAsset || !Canvas)
@ -39,19 +39,19 @@ void UBagShapeAssetThumbnailRenderer::DrawBagShape(UBagShapeAsset* BagShapeAsset
// Calculate the best fit scale with spacing for separators // Calculate the best fit scale with spacing for separators
float SeparatorWidth = 2.0f; // White separator width float SeparatorWidth = 2.0f; // White separator width
float Scale = GetBestFitScale(BagShapeAsset->BagWidth, BagShapeAsset->BagHeight, Width, Height); float Scale = GetBestFitScale(BagShapeAsset->ShapeWidth, BagShapeAsset->ShapeHeight, Width, Height);
float CellSize = Scale - SeparatorWidth; // Reduce cell size to make room for separators float CellSize = Scale - SeparatorWidth; // Reduce cell size to make room for separators
// Calculate starting position to center the grid (including separators) // Calculate starting position to center the grid (including separators)
float GridWidth = BagShapeAsset->BagWidth * Scale - SeparatorWidth; float GridWidth = BagShapeAsset->ShapeWidth * Scale - SeparatorWidth;
float GridHeight = BagShapeAsset->BagHeight * Scale - SeparatorWidth; float GridHeight = BagShapeAsset->ShapeHeight * Scale - SeparatorWidth;
float StartX = X + (Width - GridWidth) * 0.5f; float StartX = X + (Width - GridWidth) * 0.5f;
float StartY = Y + (Height - GridHeight) * 0.5f; float StartY = Y + (Height - GridHeight) * 0.5f;
// Draw the bag slots (background) with separators // Draw the bag slots (background) with separators
for (int32 GridY = 0; GridY < BagShapeAsset->BagHeight; GridY++) for (int32 GridY = 0; GridY < BagShapeAsset->ShapeHeight; GridY++)
{ {
for (int32 GridX = 0; GridX < BagShapeAsset->BagWidth; GridX++) for (int32 GridX = 0; GridX < BagShapeAsset->ShapeWidth; GridX++)
{ {
float CellStartX = StartX + GridX * Scale; float CellStartX = StartX + GridX * Scale;
float CellStartY = StartY + GridY * Scale; float CellStartY = StartY + GridY * Scale;
@ -92,7 +92,7 @@ void UBagShapeAssetThumbnailRenderer::DrawBagShape(UBagShapeAsset* BagShapeAsset
// Canvas->DrawItem(OuterBorder); // Canvas->DrawItem(OuterBorder);
} }
float UBagShapeAssetThumbnailRenderer::GetBestFitScale(int32 BagWidth, int32 BagHeight, uint32 CanvasWidth, float UShapeAssetThumbnailRenderer::GetBestFitScale(int32 BagWidth, int32 BagHeight, uint32 CanvasWidth,
uint32 CanvasHeight) const uint32 CanvasHeight) const
{ {
if (BagWidth == 0 || BagHeight == 0) if (BagWidth == 0 || BagHeight == 0)

View File

@ -5,9 +5,9 @@
#include "PropertyCustomizationHelpers.h" #include "PropertyCustomizationHelpers.h"
#include "Framework/Notifications/NotificationManager.h" #include "Framework/Notifications/NotificationManager.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h" #include "ProjectFish/DataAsset/ShapeAsset.h"
#include "Widgets/BagConfigGridWidget.h" #include "Widgets/BagConfigGridWidget.h"
#include "Widgets/BagShapeGridWidget.h" #include "Widgets/ShapeGridWidget.h"
#include "Widgets/SkillListWidget.h" #include "Widgets/SkillListWidget.h"
#include "Widgets/Notifications/SNotificationList.h" #include "Widgets/Notifications/SNotificationList.h"
@ -49,7 +49,7 @@ void SBagConfigEditorWidget::Construct(const FArguments& InArgs)
return BagConfig.IsValid() && BagConfig->BagShapeAsset ? return BagConfig.IsValid() && BagConfig->BagShapeAsset ?
BagConfig->BagShapeAsset->GetPathName() : FString(); BagConfig->BagShapeAsset->GetPathName() : FString();
}) })
.AllowedClass(UBagShapeAsset::StaticClass()) .AllowedClass(UShapeAsset::StaticClass())
.OnObjectChanged(this, &SBagConfigEditorWidget::OnBagShapeAssetChanged) .OnObjectChanged(this, &SBagConfigEditorWidget::OnBagShapeAssetChanged)
.DisplayUseSelected(true) .DisplayUseSelected(true)
.DisplayBrowse(true) .DisplayBrowse(true)
@ -167,8 +167,8 @@ void SBagConfigEditorWidget::Construct(const FArguments& InArgs)
{ {
return FText::FromString(FString::Printf(TEXT("Bag: %s (%dx%d)"), return FText::FromString(FString::Printf(TEXT("Bag: %s (%dx%d)"),
*BagConfig->BagShapeAsset->GetName(), *BagConfig->BagShapeAsset->GetName(),
BagConfig->BagShapeAsset->BagWidth, BagConfig->BagShapeAsset->ShapeWidth,
BagConfig->BagShapeAsset->BagHeight)); BagConfig->BagShapeAsset->ShapeHeight));
} }
}) })
.Font(FCoreStyle::GetDefaultFontStyle("Bold", 12)) .Font(FCoreStyle::GetDefaultFontStyle("Bold", 12))
@ -284,7 +284,7 @@ void SBagConfigEditorWidget::OnBagShapeAssetChanged(const FAssetData& AssetData)
} }
// 获取新选择的BagShapeAsset // 获取新选择的BagShapeAsset
UBagShapeAsset* NewBagShapeAsset = Cast<UBagShapeAsset>(AssetData.GetAsset()); UShapeAsset* NewBagShapeAsset = Cast<UShapeAsset>(AssetData.GetAsset());
// 如果选择了不同的资源,清空现有技能并更新引用 // 如果选择了不同的资源,清空现有技能并更新引用
if (BagConfig->BagShapeAsset != NewBagShapeAsset) if (BagConfig->BagShapeAsset != NewBagShapeAsset)

View File

@ -3,7 +3,7 @@
#include "Widgets/BagConfigGridWidget.h" #include "Widgets/BagConfigGridWidget.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h" #include "ProjectFish/DataAsset/ShapeAsset.h"
const float SBagConfigGridWidget::CellSize = 32.0f; const float SBagConfigGridWidget::CellSize = 32.0f;
const float SBagConfigGridWidget::CellSpacing = 2.0f; const float SBagConfigGridWidget::CellSpacing = 2.0f;
@ -130,12 +130,12 @@ int32 SBagConfigGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& All
return LayerId; return LayerId;
} }
UBagShapeAsset* BagShapeAsset = BagConfig->BagShapeAsset; UShapeAsset* BagShapeAsset = BagConfig->BagShapeAsset;
// 绘制背包格子 // 绘制背包格子
for (int32 Y = 0; Y < BagShapeAsset->BagHeight; Y++) for (int32 Y = 0; Y < BagShapeAsset->ShapeHeight; Y++)
{ {
for (int32 X = 0; X < BagShapeAsset->BagWidth; X++) for (int32 X = 0; X < BagShapeAsset->ShapeWidth; X++)
{ {
FVector2D CellPos = GetCellPosition(X, Y); FVector2D CellPos = GetCellPosition(X, Y);
FVector2D CellSizeVec(CellSize, CellSize); FVector2D CellSizeVec(CellSize, CellSize);
@ -251,10 +251,10 @@ FVector2D SBagConfigGridWidget::ComputeDesiredSize(float X) const
return FVector2D(100, 100); return FVector2D(100, 100);
} }
UBagShapeAsset* BagShapeAsset = BagConfig->BagShapeAsset; UShapeAsset* BagShapeAsset = BagConfig->BagShapeAsset;
return FVector2D( return FVector2D(
BagShapeAsset->BagWidth * (CellSize + CellSpacing) - CellSpacing, BagShapeAsset->ShapeWidth * (CellSize + CellSpacing) - CellSpacing,
BagShapeAsset->BagHeight * (CellSize + CellSpacing) - CellSpacing BagShapeAsset->ShapeHeight * (CellSize + CellSpacing) - CellSpacing
); );
} }
@ -273,8 +273,8 @@ bool SBagConfigGridWidget::IsValidGridPosition(int32 X, int32 Y) const
return false; return false;
} }
return X >= 0 && X < BagConfig->BagShapeAsset->BagWidth && return X >= 0 && X < BagConfig->BagShapeAsset->ShapeWidth &&
Y >= 0 && Y < BagConfig->BagShapeAsset->BagHeight; Y >= 0 && Y < BagConfig->BagShapeAsset->ShapeHeight;
} }
FLinearColor SBagConfigGridWidget::GetCellColor(int32 X, int32 Y) const FLinearColor SBagConfigGridWidget::GetCellColor(int32 X, int32 Y) const

View File

@ -6,7 +6,7 @@
#include "EditorStyleSet.h" #include "EditorStyleSet.h"
void SBagShapeEditorWidget::Construct(const FArguments& InArgs) void SShapeEditorWidget::Construct(const FArguments& InArgs)
{ {
BagShapeAsset = InArgs._BagShapeAsset; BagShapeAsset = InArgs._BagShapeAsset;
@ -38,9 +38,9 @@ void SBagShapeEditorWidget::Construct(const FArguments& InArgs)
.HAlign(HAlign_Center) .HAlign(HAlign_Center)
.VAlign(VAlign_Center) .VAlign(VAlign_Center)
[ [
SAssignNew(GridWidget, SBagShapeGridWidget) SAssignNew(GridWidget, SShapeGridWidget)
.BagShapeAsset(BagShapeAsset.Get()) .BagShapeAsset(BagShapeAsset.Get())
.OnSlotClicked(this, &SBagShapeEditorWidget::OnSlotClicked) .OnSlotClicked(this, &SShapeEditorWidget::OnSlotClicked)
] ]
] ]
] ]
@ -48,7 +48,7 @@ void SBagShapeEditorWidget::Construct(const FArguments& InArgs)
]; ];
} }
void SBagShapeEditorWidget::RefreshGrid() void SShapeEditorWidget::RefreshGrid()
{ {
if (GridWidget.IsValid()) if (GridWidget.IsValid())
{ {
@ -56,7 +56,7 @@ void SBagShapeEditorWidget::RefreshGrid()
} }
} }
TSharedRef<SWidget> SBagShapeEditorWidget::CreateSizeControls() TSharedRef<SWidget> SShapeEditorWidget::CreateSizeControls()
{ {
return SNew(SBorder) return SNew(SBorder)
.BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder")) .BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder"))
@ -93,8 +93,8 @@ TSharedRef<SWidget> SBagShapeEditorWidget::CreateSizeControls()
SNew(SSpinBox<int32>) SNew(SSpinBox<int32>)
.MinValue(1) .MinValue(1)
.MaxValue(10) .MaxValue(10)
.Value(this, &SBagShapeEditorWidget::GetBagWidth) .Value(this, &SShapeEditorWidget::GetShapeWidth)
.OnValueChanged(this, &SBagShapeEditorWidget::OnWidthChanged) .OnValueChanged(this, &SShapeEditorWidget::OnWidthChanged)
] ]
] ]
+ SHorizontalBox::Slot() + SHorizontalBox::Slot()
@ -114,47 +114,47 @@ TSharedRef<SWidget> SBagShapeEditorWidget::CreateSizeControls()
SNew(SSpinBox<int32>) SNew(SSpinBox<int32>)
.MinValue(1) .MinValue(1)
.MaxValue(10) .MaxValue(10)
.Value(this, &SBagShapeEditorWidget::GetBagHeight) .Value(this, &SShapeEditorWidget::GetShapeHeight)
.OnValueChanged(this, &SBagShapeEditorWidget::OnHeightChanged) .OnValueChanged(this, &SShapeEditorWidget::OnHeightChanged)
] ]
] ]
] ]
]; ];
} }
int32 SBagShapeEditorWidget::GetBagWidth() const int32 SShapeEditorWidget::GetShapeWidth() const
{ {
return BagShapeAsset.IsValid() ? BagShapeAsset->BagWidth : 5; return BagShapeAsset.IsValid() ? BagShapeAsset->ShapeWidth : 5;
} }
int32 SBagShapeEditorWidget::GetBagHeight() const int32 SShapeEditorWidget::GetShapeHeight() const
{ {
return BagShapeAsset.IsValid() ? BagShapeAsset->BagHeight : 5; return BagShapeAsset.IsValid() ? BagShapeAsset->ShapeHeight : 5;
} }
void SBagShapeEditorWidget::OnWidthChanged(int32 NewWidth) void SShapeEditorWidget::OnWidthChanged(int32 NewWidth)
{ {
if (BagShapeAsset.IsValid() && NewWidth != BagShapeAsset->BagWidth) if (BagShapeAsset.IsValid() && NewWidth != BagShapeAsset->ShapeWidth)
{ {
BagShapeAsset->BagWidth = NewWidth; BagShapeAsset->ShapeWidth = NewWidth;
BagShapeAsset->InitializeBagShape(); BagShapeAsset->InitializeShape();
BagShapeAsset->MarkPackageDirty(); BagShapeAsset->MarkPackageDirty();
RefreshGrid(); RefreshGrid();
} }
} }
void SBagShapeEditorWidget::OnHeightChanged(int32 NewHeight) void SShapeEditorWidget::OnHeightChanged(int32 NewHeight)
{ {
if (BagShapeAsset.IsValid() && NewHeight != BagShapeAsset->BagHeight) if (BagShapeAsset.IsValid() && NewHeight != BagShapeAsset->ShapeHeight)
{ {
BagShapeAsset->BagHeight = NewHeight; BagShapeAsset->ShapeHeight = NewHeight;
BagShapeAsset->InitializeBagShape(); BagShapeAsset->InitializeShape();
BagShapeAsset->MarkPackageDirty(); BagShapeAsset->MarkPackageDirty();
RefreshGrid(); RefreshGrid();
} }
} }
TSharedRef<SWidget> SBagShapeEditorWidget::CreateGridControls() TSharedRef<SWidget> SShapeEditorWidget::CreateGridControls()
{ {
return SNew(SBorder) return SNew(SBorder)
.BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder")) .BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder"))
@ -167,7 +167,7 @@ TSharedRef<SWidget> SBagShapeEditorWidget::CreateGridControls()
[ [
SNew(SButton) SNew(SButton)
.Text(FText::FromString("All Enable")) .Text(FText::FromString("All Enable"))
.OnClicked(this, &SBagShapeEditorWidget::OnAllEnableClicked) .OnClicked(this, &SShapeEditorWidget::OnAllEnableClicked)
] ]
+ SHorizontalBox::Slot() + SHorizontalBox::Slot()
.AutoWidth() .AutoWidth()
@ -175,17 +175,17 @@ TSharedRef<SWidget> SBagShapeEditorWidget::CreateGridControls()
[ [
SNew(SButton) SNew(SButton)
.Text(FText::FromString("All Disable")) .Text(FText::FromString("All Disable"))
.OnClicked(this, &SBagShapeEditorWidget::OnAllDisableClicked) .OnClicked(this, &SShapeEditorWidget::OnAllDisableClicked)
] ]
]; ];
} }
FReply SBagShapeEditorWidget::OnAllEnableClicked() FReply SShapeEditorWidget::OnAllEnableClicked()
{ {
if (BagShapeAsset.IsValid()) if (BagShapeAsset.IsValid())
{ {
BagShapeAsset->InitializeBagShape(); BagShapeAsset->InitializeShape();
BagShapeAsset->MarkPackageDirty(); BagShapeAsset->MarkPackageDirty();
RefreshGrid(); RefreshGrid();
RefreshThumbnail(); RefreshThumbnail();
@ -193,13 +193,13 @@ FReply SBagShapeEditorWidget::OnAllEnableClicked()
return FReply::Handled(); return FReply::Handled();
} }
FReply SBagShapeEditorWidget::OnAllDisableClicked() FReply SShapeEditorWidget::OnAllDisableClicked()
{ {
if (BagShapeAsset.IsValid()) if (BagShapeAsset.IsValid())
{ {
for (int32 X = 0; X < BagShapeAsset->BagWidth; X++) for (int32 X = 0; X < BagShapeAsset->ShapeWidth; X++)
{ {
for (int32 Y = 0; Y < BagShapeAsset->BagHeight; Y++) for (int32 Y = 0; Y < BagShapeAsset->ShapeHeight; Y++)
{ {
BagShapeAsset->SetSlotActive(X, Y, false); BagShapeAsset->SetSlotActive(X, Y, false);
} }
@ -211,7 +211,7 @@ FReply SBagShapeEditorWidget::OnAllDisableClicked()
return FReply::Handled(); return FReply::Handled();
} }
void SBagShapeEditorWidget::OnSlotClicked(int32 X, int32 Y) void SShapeEditorWidget::OnSlotClicked(int32 X, int32 Y)
{ {
if (!BagShapeAsset.IsValid()) if (!BagShapeAsset.IsValid())
{ {
@ -234,7 +234,7 @@ void SBagShapeEditorWidget::OnSlotClicked(int32 X, int32 Y)
RefreshThumbnail(); RefreshThumbnail();
} }
void SBagShapeEditorWidget::RefreshThumbnail() void SShapeEditorWidget::RefreshThumbnail()
{ {
if (!BagShapeAsset.IsValid()) if (!BagShapeAsset.IsValid())
{ {

View File

@ -1,23 +1,23 @@
// Fill out your copyright notice in the Description page of Project Settings. // Fill out your copyright notice in the Description page of Project Settings.
#include "Widgets/BagShapeGridWidget.h" #include "Widgets/ShapeGridWidget.h"
const float SBagShapeGridWidget::CellSize = 32.0f; const float SShapeGridWidget::CellSize = 32.0f;
const float SBagShapeGridWidget::SeparatorWidth = 2.0f; const float SShapeGridWidget::SeparatorWidth = 2.0f;
void SBagShapeGridWidget::Construct(const FArguments& InArgs) void SShapeGridWidget::Construct(const FArguments& InArgs)
{ {
BagShapeAsset = InArgs._BagShapeAsset; BagShapeAsset = InArgs._BagShapeAsset;
OnSlotClicked = InArgs._OnSlotClicked; OnSlotClicked = InArgs._OnSlotClicked;
} }
void SBagShapeGridWidget::UpdateBagShapeAsset(UBagShapeAsset* InBagShapeAsset) void SShapeGridWidget::UpdateBagShapeAsset(UShapeAsset* InBagShapeAsset)
{ {
BagShapeAsset = InBagShapeAsset; BagShapeAsset = InBagShapeAsset;
Invalidate(EInvalidateWidget::Paint); Invalidate(EInvalidateWidget::Paint);
} }
FReply SBagShapeGridWidget::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) FReply SShapeGridWidget::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
{ {
if (MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton && BagShapeAsset.IsValid()) if (MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton && BagShapeAsset.IsValid())
{ {
@ -37,7 +37,7 @@ FReply SBagShapeGridWidget::OnMouseButtonDown(const FGeometry& MyGeometry, const
return FReply::Unhandled(); return FReply::Unhandled();
} }
int32 SBagShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry, int32 SShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry,
const FSlateRect& MyCullingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FSlateRect& MyCullingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId,
const FWidgetStyle& InWidgetStyle, bool bParentEnabled) const const FWidgetStyle& InWidgetStyle, bool bParentEnabled) const
{ {
@ -48,8 +48,8 @@ int32 SBagShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allo
// Calculate grid dimensions with separators // Calculate grid dimensions with separators
float Scale = CellSize + SeparatorWidth; float Scale = CellSize + SeparatorWidth;
float GridWidth = BagShapeAsset->BagWidth * Scale - SeparatorWidth; float GridWidth = BagShapeAsset->ShapeWidth * Scale - SeparatorWidth;
float GridHeight = BagShapeAsset->BagHeight * Scale - SeparatorWidth; float GridHeight = BagShapeAsset->ShapeHeight * Scale - SeparatorWidth;
// Center the grid in the available space // Center the grid in the available space
FVector2D GridStartPos = FVector2D( FVector2D GridStartPos = FVector2D(
@ -68,9 +68,9 @@ int32 SBagShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allo
); );
// Draw cells // Draw cells
for (int32 Y = 0; Y < BagShapeAsset->BagHeight; Y++) for (int32 Y = 0; Y < BagShapeAsset->ShapeHeight; Y++)
{ {
for (int32 X = 0; X < BagShapeAsset->BagWidth; X++) for (int32 X = 0; X < BagShapeAsset->ShapeWidth; X++)
{ {
FVector2D CellPos = GridStartPos + FVector2D(X * Scale, Y * Scale); FVector2D CellPos = GridStartPos + FVector2D(X * Scale, Y * Scale);
bool bIsActive = BagShapeAsset->IsSlotActive(X, Y); bool bIsActive = BagShapeAsset->IsSlotActive(X, Y);
@ -89,7 +89,7 @@ int32 SBagShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allo
} }
// Draw vertical separators // Draw vertical separators
for (int32 X = 1; X < BagShapeAsset->BagWidth; X++) for (int32 X = 1; X < BagShapeAsset->ShapeWidth; X++)
{ {
float SeparatorX = GridStartPos.X + X * Scale - SeparatorWidth; float SeparatorX = GridStartPos.X + X * Scale - SeparatorWidth;
FSlateDrawElement::MakeBox( FSlateDrawElement::MakeBox(
@ -103,7 +103,7 @@ int32 SBagShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allo
} }
// Draw horizontal separators // Draw horizontal separators
for (int32 Y = 1; Y < BagShapeAsset->BagHeight; Y++) for (int32 Y = 1; Y < BagShapeAsset->ShapeHeight; Y++)
{ {
float SeparatorY = GridStartPos.Y + Y * Scale - SeparatorWidth; float SeparatorY = GridStartPos.Y + Y * Scale - SeparatorWidth;
FSlateDrawElement::MakeBox( FSlateDrawElement::MakeBox(
@ -129,7 +129,7 @@ int32 SBagShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allo
return LayerId + 4; return LayerId + 4;
} }
FVector2D SBagShapeGridWidget::ComputeDesiredSize(float X) const FVector2D SShapeGridWidget::ComputeDesiredSize(float X) const
{ {
if (!BagShapeAsset.IsValid()) if (!BagShapeAsset.IsValid())
{ {
@ -138,12 +138,12 @@ FVector2D SBagShapeGridWidget::ComputeDesiredSize(float X) const
float Scale = CellSize + SeparatorWidth; float Scale = CellSize + SeparatorWidth;
return FVector2D( return FVector2D(
BagShapeAsset->BagWidth * Scale - SeparatorWidth + 20.0f, // Add padding BagShapeAsset->ShapeWidth * Scale - SeparatorWidth + 20.0f, // Add padding
BagShapeAsset->BagHeight * Scale - SeparatorWidth + 20.0f BagShapeAsset->ShapeHeight * Scale - SeparatorWidth + 20.0f
); );
} }
FVector2D SBagShapeGridWidget::GetGridCellFromPosition(const FVector2D& Position) const FVector2D SShapeGridWidget::GetGridCellFromPosition(const FVector2D& Position) const
{ {
if (!BagShapeAsset.IsValid()) if (!BagShapeAsset.IsValid())
{ {
@ -151,8 +151,8 @@ FVector2D SBagShapeGridWidget::GetGridCellFromPosition(const FVector2D& Position
} }
float Scale = CellSize + SeparatorWidth; float Scale = CellSize + SeparatorWidth;
float GridWidth = BagShapeAsset->BagWidth * Scale - SeparatorWidth; float GridWidth = BagShapeAsset->ShapeWidth * Scale - SeparatorWidth;
float GridHeight = BagShapeAsset->BagHeight * Scale - SeparatorWidth; float GridHeight = BagShapeAsset->ShapeHeight * Scale - SeparatorWidth;
FVector2D GridStartPos = FVector2D( FVector2D GridStartPos = FVector2D(
(GetCachedGeometry().GetLocalSize().X - GridWidth) * 0.5f, (GetCachedGeometry().GetLocalSize().X - GridWidth) * 0.5f,
@ -167,11 +167,11 @@ FVector2D SBagShapeGridWidget::GetGridCellFromPosition(const FVector2D& Position
); );
} }
bool SBagShapeGridWidget::IsValidGridPosition(int32 X, int32 Y) const bool SShapeGridWidget::IsValidGridPosition(int32 X, int32 Y) const
{ {
if (!BagShapeAsset.IsValid()) if (!BagShapeAsset.IsValid())
{ {
return false; return false;
} }
return X >= 0 && X < BagShapeAsset->BagWidth && Y >= 0 && Y < BagShapeAsset->BagHeight; return X >= 0 && X < BagShapeAsset->ShapeWidth && Y >= 0 && Y < BagShapeAsset->ShapeHeight;
} }

View File

@ -8,10 +8,10 @@
/** /**
* *
*/ */
class PROJECTFISHEDITOR_API FBagShapeAssetTypeAction: public FAssetTypeActions_Base class PROJECTFISHEDITOR_API FShapeAssetTypeAction: public FAssetTypeActions_Base
{ {
public: public:
FBagShapeAssetTypeAction(EAssetTypeCategories::Type InAssetCategory) FShapeAssetTypeAction(EAssetTypeCategories::Type InAssetCategory)
{ {
MyAssetCategory = InAssetCategory; MyAssetCategory = InAssetCategory;
} }

View File

@ -7,10 +7,10 @@
/** /**
* *
*/ */
class PROJECTFISHEDITOR_API FBagShapeAssetEditor: public FAssetEditorToolkit class PROJECTFISHEDITOR_API FShapeAssetEditor: public FAssetEditorToolkit
{ {
public: public:
void Initialize(const EToolkitMode::Type Mode, const TSharedPtr<class IToolkitHost>& InitToolkitHost, class UBagShapeAsset* InBagShapeAsset); void Initialize(const EToolkitMode::Type Mode, const TSharedPtr<class IToolkitHost>& InitToolkitHost, class UShapeAsset* InBagShapeAsset);
// IAssetEditorInstance interface // IAssetEditorInstance interface
virtual FName GetToolkitFName() const override; virtual FName GetToolkitFName() const override;
@ -25,9 +25,9 @@ public:
private: private:
TSharedRef<SDockTab> SpawnBagShapeEditorTab(const FSpawnTabArgs& Args); TSharedRef<SDockTab> SpawnBagShapeEditorTab(const FSpawnTabArgs& Args);
class UBagShapeAsset* BagShapeAsset; class UShapeAsset* ShapeAsset;
/** Tab IDs */ /** Tab IDs */
static const FName BagShapeEditorTabId; static const FName ShapeEditorTabId;
}; };

View File

@ -4,17 +4,17 @@
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "Factories/Factory.h" #include "Factories/Factory.h"
#include "BagShapeFactory.generated.h" #include "ShapeFactory.generated.h"
/** /**
* *
*/ */
UCLASS() UCLASS()
class PROJECTFISHEDITOR_API UBagShapeFactory : public UFactory class PROJECTFISHEDITOR_API UShapeFactory : public UFactory
{ {
GENERATED_BODY() GENERATED_BODY()
public: public:
UBagShapeFactory(); UShapeFactory();
//interface //interface
virtual UObject* FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override; virtual UObject* FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override;

View File

@ -4,13 +4,13 @@
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "ThumbnailRendering/DefaultSizedThumbnailRenderer.h" #include "ThumbnailRendering/DefaultSizedThumbnailRenderer.h"
#include "BagShapeAssetThumbnailRenderer.generated.h" #include "ShapeAssetThumbnailRenderer.generated.h"
/** /**
* *
*/ */
UCLASS() UCLASS()
class PROJECTFISHEDITOR_API UBagShapeAssetThumbnailRenderer : public UDefaultSizedThumbnailRenderer class PROJECTFISHEDITOR_API UShapeAssetThumbnailRenderer : public UDefaultSizedThumbnailRenderer
{ {
GENERATED_BODY() GENERATED_BODY()
public: public:
@ -19,7 +19,7 @@ public:
private: private:
/** Draw the bag shape on canvas */ /** Draw the bag shape on canvas */
void DrawBagShape(class UBagShapeAsset* BagShapeAsset, FCanvas* Canvas, int32 X, int32 Y, uint32 Width, uint32 Height); void DrawBagShape(class UShapeAsset* BagShapeAsset, FCanvas* Canvas, int32 X, int32 Y, uint32 Width, uint32 Height);
/** Get the best fit scale for the bag shape */ /** Get the best fit scale for the bag shape */
float GetBestFitScale(int32 BagWidth, int32 BagHeight, uint32 CanvasWidth, uint32 CanvasHeight) const; float GetBestFitScale(int32 BagWidth, int32 BagHeight, uint32 CanvasWidth, uint32 CanvasHeight) const;

View File

@ -3,17 +3,17 @@
#pragma once #pragma once
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "BagShapeGridWidget.h" #include "ShapeGridWidget.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h" #include "ProjectFish/DataAsset/ShapeAsset.h"
/** /**
* *
*/ */
class PROJECTFISHEDITOR_API SBagShapeEditorWidget: public SCompoundWidget class PROJECTFISHEDITOR_API SShapeEditorWidget: public SCompoundWidget
{ {
public: public:
SLATE_BEGIN_ARGS(SBagShapeEditorWidget) {} SLATE_BEGIN_ARGS(SShapeEditorWidget) {}
SLATE_ARGUMENT(UBagShapeAsset*, BagShapeAsset) SLATE_ARGUMENT(UShapeAsset*, BagShapeAsset)
SLATE_END_ARGS() SLATE_END_ARGS()
void Construct(const FArguments& InArgs); void Construct(const FArguments& InArgs);
@ -24,9 +24,9 @@ private:
//背包大小UI //背包大小UI
TSharedRef<SWidget> CreateSizeControls(); TSharedRef<SWidget> CreateSizeControls();
/** Get the current bag width */ /** Get the current bag width */
int32 GetBagWidth() const; int32 GetShapeWidth() const;
/** Get the current bag height */ /** Get the current bag height */
int32 GetBagHeight() const; int32 GetShapeHeight() const;
/** Handle width spin box value change */ /** Handle width spin box value change */
void OnWidthChanged(int32 NewWidth); void OnWidthChanged(int32 NewWidth);
/** Handle height spin box value change */ /** Handle height spin box value change */
@ -43,6 +43,6 @@ private:
//刷新图标 //刷新图标
void RefreshThumbnail(); void RefreshThumbnail();
private: private:
TWeakObjectPtr<class UBagShapeAsset> BagShapeAsset; TWeakObjectPtr<class UShapeAsset> BagShapeAsset;
TSharedPtr<SBagShapeGridWidget> GridWidget; TSharedPtr<SShapeGridWidget> GridWidget;
}; };

View File

@ -3,23 +3,23 @@
#pragma once #pragma once
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h" #include "ProjectFish/DataAsset/ShapeAsset.h"
DECLARE_DELEGATE_TwoParams(FOnSlotClicked, int32, int32); DECLARE_DELEGATE_TwoParams(FOnSlotClicked, int32, int32);
/** /**
* *
*/ */
class SBagShapeGridWidget : public SCompoundWidget class SShapeGridWidget : public SCompoundWidget
{ {
public: public:
SLATE_BEGIN_ARGS(SBagShapeGridWidget) {} SLATE_BEGIN_ARGS(SShapeGridWidget) {}
SLATE_ARGUMENT(UBagShapeAsset*, BagShapeAsset) SLATE_ARGUMENT(UShapeAsset*, BagShapeAsset)
SLATE_EVENT(FOnSlotClicked, OnSlotClicked) SLATE_EVENT(FOnSlotClicked, OnSlotClicked)
SLATE_END_ARGS() SLATE_END_ARGS()
void Construct(const FArguments& InArgs); void Construct(const FArguments& InArgs);
void UpdateBagShapeAsset(UBagShapeAsset* InBagShapeAsset); void UpdateBagShapeAsset(UShapeAsset* InBagShapeAsset);
// SWidget interface // SWidget interface
virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override; virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
@ -31,7 +31,7 @@ private:
static const float CellSize; static const float CellSize;
static const float SeparatorWidth; static const float SeparatorWidth;
TWeakObjectPtr<UBagShapeAsset> BagShapeAsset; TWeakObjectPtr<UShapeAsset> BagShapeAsset;
FOnSlotClicked OnSlotClicked; FOnSlotClicked OnSlotClicked;
FVector2D GetGridCellFromPosition(const FVector2D& Position) const; FVector2D GetGridCellFromPosition(const FVector2D& Position) const;