Compare commits

...

3 Commits

Author SHA1 Message Date
4c07e0601d 调整资源类型 2025-10-15 18:25:31 +08:00
37dd8f735e 修改鱼获的UI显示 2025-10-14 19:48:48 +08:00
3e0d32b97f 调整鱼获的ui显示 2025-10-14 19:44:34 +08:00
51 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.SimpleMapSystem",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]
-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 "BagShapeAsset.h"
#include "ShapeAsset.h"
bool UBagConfigAsset::AddSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY)

View File

@ -8,7 +8,7 @@
#include "SkillAsset.h"
#include "BagConfigAsset.generated.h"
class UBagShapeAsset;
class UShapeAsset;
//背包中摆放的技能信息
USTRUCT(BlueprintType)
@ -66,7 +66,7 @@ class PROJECTFISH_API UBagConfigAsset : public UDataAsset
public:
// 背包形状资源引用
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BagConfig")
TObjectPtr<UBagShapeAsset> BagShapeAsset;
TObjectPtr<UShapeAsset> BagShapeAsset;
// 背包中放置的技能列表
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;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Inventory, meta = (AllowPrivateAccess = "true", ToolTip = "鱼竿装备槽形状"))
class UBagShapeAsset* FishingRodShape;
class UShapeAsset* FishingRodShape;
private:

View File

@ -4,9 +4,9 @@
#include "FishingRodConfigSubsystem.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);
@ -36,8 +36,8 @@ bool UFishingRodConfigSubsystem::AddSkillByConfig(USkillAsset* SkillAsset, UBagC
bool UFishingRodConfigSubsystem::AddSkillToPlayerInventory(USkillAsset* SkillAsset)
{
int32 width = playerInventoryConfig->BagShapeAsset->BagWidth;
int32 height = playerInventoryConfig->BagShapeAsset->BagHeight;
int32 width = playerInventoryConfig->BagShapeAsset->ShapeWidth;
int32 height = playerInventoryConfig->BagShapeAsset->ShapeHeight;
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)

View File

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

View File

@ -6,7 +6,7 @@
#include "Kismet/GameplayStatics.h"
#include "ProjectFish/ProjectFishGameMode.h"
#include "ProjectFish/DataAsset/BagConfigAsset.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h"
#include "ProjectFish/DataAsset/ShapeAsset.h"
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 "DataTableRowSelectorCustomization.h"
#include "AssetActions/BagConfigAssetTypeAction.h"
#include "AssetActions/BagShapeAssetTypeAction.h"
#include "AssetActions/ShapeAssetTypeAction.h"
#include "AssetRegistry/AssetRegistryModule.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h"
#include "../Public/Thumbnail/BagShapeAssetThumbnailRenderer.h"
#include "ProjectFish/DataAsset/ShapeAsset.h"
#include "../Public/Thumbnail/ShapeAssetThumbnailRenderer.h"
#include "../Public/Thumbnail/BagConfigThumbnailRenderer.h"
#include "AssetActions/SkillAssetTypeAction.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")));
//BagShape
TSharedRef<FAssetTypeActions_Base> BagShapeAction = MakeShareable(new FBagShapeAssetTypeAction(BogShapeAssetCategory));
TSharedRef<FAssetTypeActions_Base> BagShapeAction = MakeShareable(new FShapeAssetTypeAction(BogShapeAssetCategory));
AssetTools.RegisterAssetTypeActions(BagShapeAction);
CreatedAssetTypeActions.Add(BagShapeAction);
@ -77,7 +77,7 @@ void FProjectFishEditorModule::UnregisterAssetTypeActions()
void FProjectFishEditorModule::RegisterThumbnailRenderers()
{
UThumbnailManager::Get().RegisterCustomRenderer(UBagShapeAsset::StaticClass(), UBagShapeAssetThumbnailRenderer::StaticClass());
UThumbnailManager::Get().RegisterCustomRenderer(UShapeAsset::StaticClass(), UShapeAssetThumbnailRenderer::StaticClass());
UThumbnailManager::Get().RegisterCustomRenderer(UBagConfigAsset::StaticClass(), UBagConfigThumbnailRenderer::StaticClass());
RefreshExistingAssetThumbnails();
}
@ -86,7 +86,7 @@ void FProjectFishEditorModule::UnregisterThumbnailRenderers()
{
if (UObjectInitialized())
{
UThumbnailManager::Get().UnregisterCustomRenderer(UBagShapeAsset::StaticClass());
UThumbnailManager::Get().UnregisterCustomRenderer(UShapeAsset::StaticClass());
UThumbnailManager::Get().UnregisterCustomRenderer(UBagConfigAsset::StaticClass());
}
}
@ -103,7 +103,7 @@ void FProjectFishEditorModule::RefreshExistingAssetThumbnails()
// 查找所有BagShapeAsset资产
TArray<FAssetData> BagShapeAssetList;
AssetRegistry.GetAssetsByClass(UBagShapeAsset::StaticClass()->GetClassPathName(), BagShapeAssetList);
AssetRegistry.GetAssetsByClass(UShapeAsset::StaticClass()->GetClassPathName(), BagShapeAssetList);
// 查找所有BagClass资产
TArray<FAssetData> BagConfigAssetList;

View File

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

View File

@ -1,21 +1,21 @@
// 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 "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)
{
UBagShapeAsset* BagShapeAsset = Cast<UBagShapeAsset>(Object);
UShapeAsset* BagShapeAsset = Cast<UShapeAsset>(Object);
if (!BagShapeAsset || !Canvas)
{
return;
@ -24,7 +24,7 @@ void UBagShapeAssetThumbnailRenderer::Draw(UObject* Object, int32 X, int32 Y, ui
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)
{
if (!BagShapeAsset || !Canvas)
@ -39,19 +39,19 @@ void UBagShapeAssetThumbnailRenderer::DrawBagShape(UBagShapeAsset* BagShapeAsset
// Calculate the best fit scale with spacing for separators
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
// Calculate starting position to center the grid (including separators)
float GridWidth = BagShapeAsset->BagWidth * Scale - SeparatorWidth;
float GridHeight = BagShapeAsset->BagHeight * Scale - SeparatorWidth;
float GridWidth = BagShapeAsset->ShapeWidth * Scale - SeparatorWidth;
float GridHeight = BagShapeAsset->ShapeHeight * Scale - SeparatorWidth;
float StartX = X + (Width - GridWidth) * 0.5f;
float StartY = Y + (Height - GridHeight) * 0.5f;
// 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 CellStartY = StartY + GridY * Scale;
@ -92,7 +92,7 @@ void UBagShapeAssetThumbnailRenderer::DrawBagShape(UBagShapeAsset* BagShapeAsset
// Canvas->DrawItem(OuterBorder);
}
float UBagShapeAssetThumbnailRenderer::GetBestFitScale(int32 BagWidth, int32 BagHeight, uint32 CanvasWidth,
float UShapeAssetThumbnailRenderer::GetBestFitScale(int32 BagWidth, int32 BagHeight, uint32 CanvasWidth,
uint32 CanvasHeight) const
{
if (BagWidth == 0 || BagHeight == 0)

View File

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

View File

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

View File

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

View File

@ -1,23 +1,23 @@
// 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 SBagShapeGridWidget::SeparatorWidth = 2.0f;
void SBagShapeGridWidget::Construct(const FArguments& InArgs)
const float SShapeGridWidget::CellSize = 32.0f;
const float SShapeGridWidget::SeparatorWidth = 2.0f;
void SShapeGridWidget::Construct(const FArguments& InArgs)
{
BagShapeAsset = InArgs._BagShapeAsset;
OnSlotClicked = InArgs._OnSlotClicked;
}
void SBagShapeGridWidget::UpdateBagShapeAsset(UBagShapeAsset* InBagShapeAsset)
void SShapeGridWidget::UpdateBagShapeAsset(UShapeAsset* InBagShapeAsset)
{
BagShapeAsset = InBagShapeAsset;
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())
{
@ -37,7 +37,7 @@ FReply SBagShapeGridWidget::OnMouseButtonDown(const FGeometry& MyGeometry, const
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 FWidgetStyle& InWidgetStyle, bool bParentEnabled) const
{
@ -48,8 +48,8 @@ int32 SBagShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allo
// Calculate grid dimensions with separators
float Scale = CellSize + SeparatorWidth;
float GridWidth = BagShapeAsset->BagWidth * Scale - SeparatorWidth;
float GridHeight = BagShapeAsset->BagHeight * Scale - SeparatorWidth;
float GridWidth = BagShapeAsset->ShapeWidth * Scale - SeparatorWidth;
float GridHeight = BagShapeAsset->ShapeHeight * Scale - SeparatorWidth;
// Center the grid in the available space
FVector2D GridStartPos = FVector2D(
@ -68,9 +68,9 @@ int32 SBagShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allo
);
// 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);
bool bIsActive = BagShapeAsset->IsSlotActive(X, Y);
@ -89,7 +89,7 @@ int32 SBagShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allo
}
// 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;
FSlateDrawElement::MakeBox(
@ -103,7 +103,7 @@ int32 SBagShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allo
}
// 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;
FSlateDrawElement::MakeBox(
@ -129,7 +129,7 @@ int32 SBagShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allo
return LayerId + 4;
}
FVector2D SBagShapeGridWidget::ComputeDesiredSize(float X) const
FVector2D SShapeGridWidget::ComputeDesiredSize(float X) const
{
if (!BagShapeAsset.IsValid())
{
@ -138,12 +138,12 @@ FVector2D SBagShapeGridWidget::ComputeDesiredSize(float X) const
float Scale = CellSize + SeparatorWidth;
return FVector2D(
BagShapeAsset->BagWidth * Scale - SeparatorWidth + 20.0f, // Add padding
BagShapeAsset->BagHeight * Scale - SeparatorWidth + 20.0f
BagShapeAsset->ShapeWidth * Scale - SeparatorWidth + 20.0f, // Add padding
BagShapeAsset->ShapeHeight * Scale - SeparatorWidth + 20.0f
);
}
FVector2D SBagShapeGridWidget::GetGridCellFromPosition(const FVector2D& Position) const
FVector2D SShapeGridWidget::GetGridCellFromPosition(const FVector2D& Position) const
{
if (!BagShapeAsset.IsValid())
{
@ -151,8 +151,8 @@ FVector2D SBagShapeGridWidget::GetGridCellFromPosition(const FVector2D& Position
}
float Scale = CellSize + SeparatorWidth;
float GridWidth = BagShapeAsset->BagWidth * Scale - SeparatorWidth;
float GridHeight = BagShapeAsset->BagHeight * Scale - SeparatorWidth;
float GridWidth = BagShapeAsset->ShapeWidth * Scale - SeparatorWidth;
float GridHeight = BagShapeAsset->ShapeHeight * Scale - SeparatorWidth;
FVector2D GridStartPos = FVector2D(
(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())
{
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:
FBagShapeAssetTypeAction(EAssetTypeCategories::Type InAssetCategory)
FShapeAssetTypeAction(EAssetTypeCategories::Type InAssetCategory)
{
MyAssetCategory = InAssetCategory;
}

View File

@ -7,10 +7,10 @@
/**
*
*/
class PROJECTFISHEDITOR_API FBagShapeAssetEditor: public FAssetEditorToolkit
class PROJECTFISHEDITOR_API FShapeAssetEditor: public FAssetEditorToolkit
{
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
virtual FName GetToolkitFName() const override;
@ -25,9 +25,9 @@ public:
private:
TSharedRef<SDockTab> SpawnBagShapeEditorTab(const FSpawnTabArgs& Args);
class UBagShapeAsset* BagShapeAsset;
class UShapeAsset* ShapeAsset;
/** Tab IDs */
static const FName BagShapeEditorTabId;
static const FName ShapeEditorTabId;
};

View File

@ -4,17 +4,17 @@
#include "CoreMinimal.h"
#include "Factories/Factory.h"
#include "BagShapeFactory.generated.h"
#include "ShapeFactory.generated.h"
/**
*
*/
UCLASS()
class PROJECTFISHEDITOR_API UBagShapeFactory : public UFactory
class PROJECTFISHEDITOR_API UShapeFactory : public UFactory
{
GENERATED_BODY()
public:
UBagShapeFactory();
UShapeFactory();
//interface
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 "ThumbnailRendering/DefaultSizedThumbnailRenderer.h"
#include "BagShapeAssetThumbnailRenderer.generated.h"
#include "ShapeAssetThumbnailRenderer.generated.h"
/**
*
*/
UCLASS()
class PROJECTFISHEDITOR_API UBagShapeAssetThumbnailRenderer : public UDefaultSizedThumbnailRenderer
class PROJECTFISHEDITOR_API UShapeAssetThumbnailRenderer : public UDefaultSizedThumbnailRenderer
{
GENERATED_BODY()
public:
@ -19,7 +19,7 @@ public:
private:
/** 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 */
float GetBestFitScale(int32 BagWidth, int32 BagHeight, uint32 CanvasWidth, uint32 CanvasHeight) const;

View File

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

View File

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