Compare commits
No commits in common. "4c07e0601d96ef26fcbbdfe58b8ec24224dfdd04" and "9cf66d29ca5917113c83943d6d4ee45350c1d397" have entirely different histories.
4c07e0601d
...
9cf66d29ca
Binary file not shown.
Binary file not shown.
@ -100,9 +100,6 @@ 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)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -3,7 +3,7 @@
|
||||
|
||||
#include "BagConfigAsset.h"
|
||||
|
||||
#include "ShapeAsset.h"
|
||||
#include "BagShapeAsset.h"
|
||||
|
||||
|
||||
bool UBagConfigAsset::AddSkill(USkillAsset* SkillObject, int32 PositionX, int32 PositionY)
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
#include "SkillAsset.h"
|
||||
#include "BagConfigAsset.generated.h"
|
||||
|
||||
class UShapeAsset;
|
||||
class UBagShapeAsset;
|
||||
|
||||
//背包中摆放的技能信息
|
||||
USTRUCT(BlueprintType)
|
||||
@ -66,7 +66,7 @@ class PROJECTFISH_API UBagConfigAsset : public UDataAsset
|
||||
public:
|
||||
// 背包形状资源引用
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BagConfig")
|
||||
TObjectPtr<UShapeAsset> BagShapeAsset;
|
||||
TObjectPtr<UBagShapeAsset> BagShapeAsset;
|
||||
|
||||
// 背包中放置的技能列表
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "BagConfig")
|
||||
|
||||
56
ProjectFish/Source/ProjectFish/DataAsset/BagShapeAsset.cpp
Normal file
56
ProjectFish/Source/ProjectFish/DataAsset/BagShapeAsset.cpp
Normal file
@ -0,0 +1,56 @@
|
||||
// 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;
|
||||
}
|
||||
63
ProjectFish/Source/ProjectFish/DataAsset/BagShapeAsset.h
Normal file
63
ProjectFish/Source/ProjectFish/DataAsset/BagShapeAsset.h
Normal file
@ -0,0 +1,63 @@
|
||||
// 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;
|
||||
};
|
||||
@ -1,56 +0,0 @@
|
||||
// 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;
|
||||
}
|
||||
@ -1,69 +0,0 @@
|
||||
// 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;
|
||||
};
|
||||
@ -113,7 +113,7 @@ protected:
|
||||
class UBagConfigAsset* DefaultPlayerBag;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Inventory, meta = (AllowPrivateAccess = "true", ToolTip = "鱼竿装备槽形状"))
|
||||
class UShapeAsset* FishingRodShape;
|
||||
class UBagShapeAsset* FishingRodShape;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
@ -4,9 +4,9 @@
|
||||
#include "FishingRodConfigSubsystem.h"
|
||||
|
||||
#include "ProjectFish/DataAsset/BagConfigAsset.h"
|
||||
#include "ProjectFish/DataAsset/ShapeAsset.h"
|
||||
#include "ProjectFish/DataAsset/BagShapeAsset.h"
|
||||
|
||||
void UFishingRodConfigSubsystem::CreateFishingRodInventory(class UShapeAsset* FishingRodShape, class UBagConfigAsset* PlayerBagConfig)
|
||||
void UFishingRodConfigSubsystem::CreateFishingRodInventory(class UBagShapeAsset* 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->ShapeWidth;
|
||||
int32 height = playerInventoryConfig->BagShapeAsset->ShapeHeight;
|
||||
int32 width = playerInventoryConfig->BagShapeAsset->BagWidth;
|
||||
int32 height = playerInventoryConfig->BagShapeAsset->BagHeight;
|
||||
for (int x = 0; x < width; x++)
|
||||
{
|
||||
for (int y = 0; y < height; y++)
|
||||
|
||||
@ -17,7 +17,7 @@ class PROJECTFISH_API UFishingRodConfigSubsystem : public UGameInstanceSubsystem
|
||||
|
||||
public:
|
||||
UFUNCTION(BlueprintCallable, Category = "PlayerInventorySubsystem")
|
||||
void CreateFishingRodInventory(class UShapeAsset* FishingRodShape, class UBagConfigAsset* PlayerBagConfig);
|
||||
void CreateFishingRodInventory(class UBagShapeAsset* FishingRodShape, class UBagConfigAsset* PlayerBagConfig);
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "PlayerInventorySubsystem")
|
||||
UBagConfigAsset* GetFishingRodInventory();
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
#include "ProjectFish/ProjectFishGameMode.h"
|
||||
#include "ProjectFish/DataAsset/BagConfigAsset.h"
|
||||
#include "ProjectFish/DataAsset/ShapeAsset.h"
|
||||
#include "ProjectFish/DataAsset/BagShapeAsset.h"
|
||||
|
||||
USkillManager::USkillManager()
|
||||
{
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
// 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);
|
||||
}
|
||||
@ -1,41 +0,0 @@
|
||||
// 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);
|
||||
}
|
||||
@ -0,0 +1,74 @@
|
||||
// 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)
|
||||
];
|
||||
}
|
||||
@ -1,74 +0,0 @@
|
||||
// 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)
|
||||
];
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
// 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;
|
||||
}
|
||||
@ -1,30 +0,0 @@
|
||||
// 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;
|
||||
}
|
||||
@ -3,10 +3,10 @@
|
||||
#include "AssetTypeActions_Base.h"
|
||||
#include "DataTableRowSelectorCustomization.h"
|
||||
#include "AssetActions/BagConfigAssetTypeAction.h"
|
||||
#include "AssetActions/ShapeAssetTypeAction.h"
|
||||
#include "AssetActions/BagShapeAssetTypeAction.h"
|
||||
#include "AssetRegistry/AssetRegistryModule.h"
|
||||
#include "ProjectFish/DataAsset/ShapeAsset.h"
|
||||
#include "../Public/Thumbnail/ShapeAssetThumbnailRenderer.h"
|
||||
#include "ProjectFish/DataAsset/BagShapeAsset.h"
|
||||
#include "../Public/Thumbnail/BagShapeAssetThumbnailRenderer.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 FShapeAssetTypeAction(BogShapeAssetCategory));
|
||||
TSharedRef<FAssetTypeActions_Base> BagShapeAction = MakeShareable(new FBagShapeAssetTypeAction(BogShapeAssetCategory));
|
||||
AssetTools.RegisterAssetTypeActions(BagShapeAction);
|
||||
CreatedAssetTypeActions.Add(BagShapeAction);
|
||||
|
||||
@ -77,7 +77,7 @@ void FProjectFishEditorModule::UnregisterAssetTypeActions()
|
||||
|
||||
void FProjectFishEditorModule::RegisterThumbnailRenderers()
|
||||
{
|
||||
UThumbnailManager::Get().RegisterCustomRenderer(UShapeAsset::StaticClass(), UShapeAssetThumbnailRenderer::StaticClass());
|
||||
UThumbnailManager::Get().RegisterCustomRenderer(UBagShapeAsset::StaticClass(), UBagShapeAssetThumbnailRenderer::StaticClass());
|
||||
UThumbnailManager::Get().RegisterCustomRenderer(UBagConfigAsset::StaticClass(), UBagConfigThumbnailRenderer::StaticClass());
|
||||
RefreshExistingAssetThumbnails();
|
||||
}
|
||||
@ -86,7 +86,7 @@ void FProjectFishEditorModule::UnregisterThumbnailRenderers()
|
||||
{
|
||||
if (UObjectInitialized())
|
||||
{
|
||||
UThumbnailManager::Get().UnregisterCustomRenderer(UShapeAsset::StaticClass());
|
||||
UThumbnailManager::Get().UnregisterCustomRenderer(UBagShapeAsset::StaticClass());
|
||||
UThumbnailManager::Get().UnregisterCustomRenderer(UBagConfigAsset::StaticClass());
|
||||
}
|
||||
}
|
||||
@ -103,7 +103,7 @@ void FProjectFishEditorModule::RefreshExistingAssetThumbnails()
|
||||
|
||||
// 查找所有BagShapeAsset资产
|
||||
TArray<FAssetData> BagShapeAssetList;
|
||||
AssetRegistry.GetAssetsByClass(UShapeAsset::StaticClass()->GetClassPathName(), BagShapeAssetList);
|
||||
AssetRegistry.GetAssetsByClass(UBagShapeAsset::StaticClass()->GetClassPathName(), BagShapeAssetList);
|
||||
|
||||
// 查找所有BagClass资产
|
||||
TArray<FAssetData> BagConfigAssetList;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
#include "CanvasItem.h"
|
||||
#include "CanvasTypes.h"
|
||||
#include "ProjectFish/DataAsset/BagConfigAsset.h"
|
||||
#include "ProjectFish/DataAsset/ShapeAsset.h"
|
||||
#include "ProjectFish/DataAsset/BagShapeAsset.h"
|
||||
|
||||
bool UBagConfigThumbnailRenderer::CanVisualizeAsset(UObject* Object)
|
||||
{
|
||||
@ -43,7 +43,7 @@ void UBagConfigThumbnailRenderer::DrawBag(UBagConfigAsset* BagConfig, FCanvas* C
|
||||
return;
|
||||
}
|
||||
|
||||
UShapeAsset* BagShapeAsset = BagConfig->BagShapeAsset;
|
||||
UBagShapeAsset* 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->ShapeWidth, BagShapeAsset->ShapeHeight, Width, Height);
|
||||
float Scale = GetBestFitScale(BagShapeAsset->BagWidth, BagShapeAsset->BagHeight, 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->ShapeWidth * Scale - SeparatorWidth;
|
||||
float GridHeight = BagShapeAsset->ShapeHeight * Scale - SeparatorWidth;
|
||||
float GridWidth = BagShapeAsset->BagWidth * Scale - SeparatorWidth;
|
||||
float GridHeight = BagShapeAsset->BagHeight * 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->ShapeHeight; GridY++)
|
||||
for (int32 GridY = 0; GridY < BagShapeAsset->BagHeight; GridY++)
|
||||
{
|
||||
for (int32 GridX = 0; GridX < BagShapeAsset->ShapeWidth; GridX++)
|
||||
for (int32 GridX = 0; GridX < BagShapeAsset->BagWidth; 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->ShapeWidth; GridX++)
|
||||
for (int32 GridX = 1; GridX < BagShapeAsset->BagWidth; 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->ShapeHeight; GridY++)
|
||||
for (int32 GridY = 1; GridY < BagShapeAsset->BagHeight; 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 ShapeWidth, int32 ShapeHeight, uint32 CanvasWidth,
|
||||
float UBagConfigThumbnailRenderer::GetBestFitScale(int32 BagWidth, int32 BagHeight, uint32 CanvasWidth,
|
||||
uint32 CanvasHeight) const
|
||||
{
|
||||
if (ShapeWidth == 0 || ShapeHeight == 0)
|
||||
if (BagWidth == 0 || BagHeight == 0)
|
||||
{
|
||||
return 1.0f;
|
||||
}
|
||||
@ -123,8 +123,8 @@ float UBagConfigThumbnailRenderer::GetBestFitScale(int32 ShapeWidth, int32 Shape
|
||||
float PaddedWidth = CanvasWidth * 0.85f;
|
||||
float PaddedHeight = CanvasHeight * 0.85f;
|
||||
|
||||
float ScaleX = PaddedWidth / ShapeWidth;
|
||||
float ScaleY = PaddedHeight / ShapeHeight;
|
||||
float ScaleX = PaddedWidth / BagWidth;
|
||||
float ScaleY = PaddedHeight / BagHeight;
|
||||
|
||||
// Use the smaller scale to ensure everything fits
|
||||
float Scale = FMath::Min(ScaleX, ScaleY);
|
||||
|
||||
@ -1,21 +1,21 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "ProjectFishEditor/Public/Thumbnail/ShapeAssetThumbnailRenderer.h"
|
||||
#include "ProjectFishEditor/Public/Thumbnail/BagShapeAssetThumbnailRenderer.h"
|
||||
|
||||
#include "CanvasItem.h"
|
||||
#include "CanvasTypes.h"
|
||||
#include "ProjectFish/DataAsset/ShapeAsset.h"
|
||||
#include "ProjectFish/DataAsset/BagShapeAsset.h"
|
||||
|
||||
bool UShapeAssetThumbnailRenderer::CanVisualizeAsset(UObject* Object)
|
||||
bool UBagShapeAssetThumbnailRenderer::CanVisualizeAsset(UObject* Object)
|
||||
{
|
||||
return Cast<UShapeAsset>(Object) != nullptr;
|
||||
return Cast<UBagShapeAsset>(Object) != nullptr;
|
||||
}
|
||||
|
||||
void UShapeAssetThumbnailRenderer::Draw(UObject* Object, int32 X, int32 Y, uint32 Width, uint32 Height,
|
||||
void UBagShapeAssetThumbnailRenderer::Draw(UObject* Object, int32 X, int32 Y, uint32 Width, uint32 Height,
|
||||
FRenderTarget* RenderTarget, FCanvas* Canvas, bool bAdditionalViewFamily)
|
||||
{
|
||||
UShapeAsset* BagShapeAsset = Cast<UShapeAsset>(Object);
|
||||
UBagShapeAsset* BagShapeAsset = Cast<UBagShapeAsset>(Object);
|
||||
if (!BagShapeAsset || !Canvas)
|
||||
{
|
||||
return;
|
||||
@ -24,7 +24,7 @@ void UShapeAssetThumbnailRenderer::Draw(UObject* Object, int32 X, int32 Y, uint3
|
||||
DrawBagShape(BagShapeAsset, Canvas, X, Y, Width, Height);
|
||||
}
|
||||
|
||||
void UShapeAssetThumbnailRenderer::DrawBagShape(UShapeAsset* BagShapeAsset, FCanvas* Canvas, int32 X, int32 Y,
|
||||
void UBagShapeAssetThumbnailRenderer::DrawBagShape(UBagShapeAsset* BagShapeAsset, FCanvas* Canvas, int32 X, int32 Y,
|
||||
uint32 Width, uint32 Height)
|
||||
{
|
||||
if (!BagShapeAsset || !Canvas)
|
||||
@ -39,19 +39,19 @@ void UShapeAssetThumbnailRenderer::DrawBagShape(UShapeAsset* BagShapeAsset, FCan
|
||||
|
||||
// Calculate the best fit scale with spacing for separators
|
||||
float SeparatorWidth = 2.0f; // White separator width
|
||||
float Scale = GetBestFitScale(BagShapeAsset->ShapeWidth, BagShapeAsset->ShapeHeight, Width, Height);
|
||||
float Scale = GetBestFitScale(BagShapeAsset->BagWidth, BagShapeAsset->BagHeight, 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->ShapeWidth * Scale - SeparatorWidth;
|
||||
float GridHeight = BagShapeAsset->ShapeHeight * Scale - SeparatorWidth;
|
||||
float GridWidth = BagShapeAsset->BagWidth * Scale - SeparatorWidth;
|
||||
float GridHeight = BagShapeAsset->BagHeight * 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->ShapeHeight; GridY++)
|
||||
for (int32 GridY = 0; GridY < BagShapeAsset->BagHeight; GridY++)
|
||||
{
|
||||
for (int32 GridX = 0; GridX < BagShapeAsset->ShapeWidth; GridX++)
|
||||
for (int32 GridX = 0; GridX < BagShapeAsset->BagWidth; GridX++)
|
||||
{
|
||||
float CellStartX = StartX + GridX * Scale;
|
||||
float CellStartY = StartY + GridY * Scale;
|
||||
@ -92,7 +92,7 @@ void UShapeAssetThumbnailRenderer::DrawBagShape(UShapeAsset* BagShapeAsset, FCan
|
||||
// Canvas->DrawItem(OuterBorder);
|
||||
}
|
||||
|
||||
float UShapeAssetThumbnailRenderer::GetBestFitScale(int32 BagWidth, int32 BagHeight, uint32 CanvasWidth,
|
||||
float UBagShapeAssetThumbnailRenderer::GetBestFitScale(int32 BagWidth, int32 BagHeight, uint32 CanvasWidth,
|
||||
uint32 CanvasHeight) const
|
||||
{
|
||||
if (BagWidth == 0 || BagHeight == 0)
|
||||
@ -5,9 +5,9 @@
|
||||
|
||||
#include "PropertyCustomizationHelpers.h"
|
||||
#include "Framework/Notifications/NotificationManager.h"
|
||||
#include "ProjectFish/DataAsset/ShapeAsset.h"
|
||||
#include "ProjectFish/DataAsset/BagShapeAsset.h"
|
||||
#include "Widgets/BagConfigGridWidget.h"
|
||||
#include "Widgets/ShapeGridWidget.h"
|
||||
#include "Widgets/BagShapeGridWidget.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(UShapeAsset::StaticClass())
|
||||
.AllowedClass(UBagShapeAsset::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->ShapeWidth,
|
||||
BagConfig->BagShapeAsset->ShapeHeight));
|
||||
BagConfig->BagShapeAsset->BagWidth,
|
||||
BagConfig->BagShapeAsset->BagHeight));
|
||||
}
|
||||
})
|
||||
.Font(FCoreStyle::GetDefaultFontStyle("Bold", 12))
|
||||
@ -284,7 +284,7 @@ void SBagConfigEditorWidget::OnBagShapeAssetChanged(const FAssetData& AssetData)
|
||||
}
|
||||
|
||||
// 获取新选择的BagShapeAsset
|
||||
UShapeAsset* NewBagShapeAsset = Cast<UShapeAsset>(AssetData.GetAsset());
|
||||
UBagShapeAsset* NewBagShapeAsset = Cast<UBagShapeAsset>(AssetData.GetAsset());
|
||||
|
||||
// 如果选择了不同的资源,清空现有技能并更新引用
|
||||
if (BagConfig->BagShapeAsset != NewBagShapeAsset)
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
#include "Widgets/BagConfigGridWidget.h"
|
||||
|
||||
#include "ProjectFish/DataAsset/ShapeAsset.h"
|
||||
#include "ProjectFish/DataAsset/BagShapeAsset.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;
|
||||
}
|
||||
|
||||
UShapeAsset* BagShapeAsset = BagConfig->BagShapeAsset;
|
||||
UBagShapeAsset* BagShapeAsset = BagConfig->BagShapeAsset;
|
||||
|
||||
// 绘制背包格子
|
||||
for (int32 Y = 0; Y < BagShapeAsset->ShapeHeight; Y++)
|
||||
for (int32 Y = 0; Y < BagShapeAsset->BagHeight; Y++)
|
||||
{
|
||||
for (int32 X = 0; X < BagShapeAsset->ShapeWidth; X++)
|
||||
for (int32 X = 0; X < BagShapeAsset->BagWidth; X++)
|
||||
{
|
||||
FVector2D CellPos = GetCellPosition(X, Y);
|
||||
FVector2D CellSizeVec(CellSize, CellSize);
|
||||
@ -251,10 +251,10 @@ FVector2D SBagConfigGridWidget::ComputeDesiredSize(float X) const
|
||||
return FVector2D(100, 100);
|
||||
}
|
||||
|
||||
UShapeAsset* BagShapeAsset = BagConfig->BagShapeAsset;
|
||||
UBagShapeAsset* BagShapeAsset = BagConfig->BagShapeAsset;
|
||||
return FVector2D(
|
||||
BagShapeAsset->ShapeWidth * (CellSize + CellSpacing) - CellSpacing,
|
||||
BagShapeAsset->ShapeHeight * (CellSize + CellSpacing) - CellSpacing
|
||||
BagShapeAsset->BagWidth * (CellSize + CellSpacing) - CellSpacing,
|
||||
BagShapeAsset->BagHeight * (CellSize + CellSpacing) - CellSpacing
|
||||
);
|
||||
}
|
||||
|
||||
@ -273,8 +273,8 @@ bool SBagConfigGridWidget::IsValidGridPosition(int32 X, int32 Y) const
|
||||
return false;
|
||||
}
|
||||
|
||||
return X >= 0 && X < BagConfig->BagShapeAsset->ShapeWidth &&
|
||||
Y >= 0 && Y < BagConfig->BagShapeAsset->ShapeHeight;
|
||||
return X >= 0 && X < BagConfig->BagShapeAsset->BagWidth &&
|
||||
Y >= 0 && Y < BagConfig->BagShapeAsset->BagHeight;
|
||||
}
|
||||
|
||||
FLinearColor SBagConfigGridWidget::GetCellColor(int32 X, int32 Y) const
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
#include "EditorStyleSet.h"
|
||||
|
||||
|
||||
void SShapeEditorWidget::Construct(const FArguments& InArgs)
|
||||
void SBagShapeEditorWidget::Construct(const FArguments& InArgs)
|
||||
{
|
||||
BagShapeAsset = InArgs._BagShapeAsset;
|
||||
|
||||
@ -38,9 +38,9 @@ void SShapeEditorWidget::Construct(const FArguments& InArgs)
|
||||
.HAlign(HAlign_Center)
|
||||
.VAlign(VAlign_Center)
|
||||
[
|
||||
SAssignNew(GridWidget, SShapeGridWidget)
|
||||
SAssignNew(GridWidget, SBagShapeGridWidget)
|
||||
.BagShapeAsset(BagShapeAsset.Get())
|
||||
.OnSlotClicked(this, &SShapeEditorWidget::OnSlotClicked)
|
||||
.OnSlotClicked(this, &SBagShapeEditorWidget::OnSlotClicked)
|
||||
]
|
||||
]
|
||||
]
|
||||
@ -48,7 +48,7 @@ void SShapeEditorWidget::Construct(const FArguments& InArgs)
|
||||
];
|
||||
}
|
||||
|
||||
void SShapeEditorWidget::RefreshGrid()
|
||||
void SBagShapeEditorWidget::RefreshGrid()
|
||||
{
|
||||
if (GridWidget.IsValid())
|
||||
{
|
||||
@ -56,7 +56,7 @@ void SShapeEditorWidget::RefreshGrid()
|
||||
}
|
||||
}
|
||||
|
||||
TSharedRef<SWidget> SShapeEditorWidget::CreateSizeControls()
|
||||
TSharedRef<SWidget> SBagShapeEditorWidget::CreateSizeControls()
|
||||
{
|
||||
return SNew(SBorder)
|
||||
.BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder"))
|
||||
@ -93,8 +93,8 @@ TSharedRef<SWidget> SShapeEditorWidget::CreateSizeControls()
|
||||
SNew(SSpinBox<int32>)
|
||||
.MinValue(1)
|
||||
.MaxValue(10)
|
||||
.Value(this, &SShapeEditorWidget::GetShapeWidth)
|
||||
.OnValueChanged(this, &SShapeEditorWidget::OnWidthChanged)
|
||||
.Value(this, &SBagShapeEditorWidget::GetBagWidth)
|
||||
.OnValueChanged(this, &SBagShapeEditorWidget::OnWidthChanged)
|
||||
]
|
||||
]
|
||||
+ SHorizontalBox::Slot()
|
||||
@ -114,47 +114,47 @@ TSharedRef<SWidget> SShapeEditorWidget::CreateSizeControls()
|
||||
SNew(SSpinBox<int32>)
|
||||
.MinValue(1)
|
||||
.MaxValue(10)
|
||||
.Value(this, &SShapeEditorWidget::GetShapeHeight)
|
||||
.OnValueChanged(this, &SShapeEditorWidget::OnHeightChanged)
|
||||
.Value(this, &SBagShapeEditorWidget::GetBagHeight)
|
||||
.OnValueChanged(this, &SBagShapeEditorWidget::OnHeightChanged)
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
int32 SShapeEditorWidget::GetShapeWidth() const
|
||||
int32 SBagShapeEditorWidget::GetBagWidth() const
|
||||
{
|
||||
return BagShapeAsset.IsValid() ? BagShapeAsset->ShapeWidth : 5;
|
||||
return BagShapeAsset.IsValid() ? BagShapeAsset->BagWidth : 5;
|
||||
}
|
||||
|
||||
int32 SShapeEditorWidget::GetShapeHeight() const
|
||||
int32 SBagShapeEditorWidget::GetBagHeight() const
|
||||
{
|
||||
return BagShapeAsset.IsValid() ? BagShapeAsset->ShapeHeight : 5;
|
||||
return BagShapeAsset.IsValid() ? BagShapeAsset->BagHeight : 5;
|
||||
}
|
||||
|
||||
void SShapeEditorWidget::OnWidthChanged(int32 NewWidth)
|
||||
void SBagShapeEditorWidget::OnWidthChanged(int32 NewWidth)
|
||||
{
|
||||
if (BagShapeAsset.IsValid() && NewWidth != BagShapeAsset->ShapeWidth)
|
||||
if (BagShapeAsset.IsValid() && NewWidth != BagShapeAsset->BagWidth)
|
||||
{
|
||||
BagShapeAsset->ShapeWidth = NewWidth;
|
||||
BagShapeAsset->InitializeShape();
|
||||
BagShapeAsset->BagWidth = NewWidth;
|
||||
BagShapeAsset->InitializeBagShape();
|
||||
BagShapeAsset->MarkPackageDirty();
|
||||
RefreshGrid();
|
||||
}
|
||||
}
|
||||
|
||||
void SShapeEditorWidget::OnHeightChanged(int32 NewHeight)
|
||||
void SBagShapeEditorWidget::OnHeightChanged(int32 NewHeight)
|
||||
{
|
||||
if (BagShapeAsset.IsValid() && NewHeight != BagShapeAsset->ShapeHeight)
|
||||
if (BagShapeAsset.IsValid() && NewHeight != BagShapeAsset->BagHeight)
|
||||
{
|
||||
BagShapeAsset->ShapeHeight = NewHeight;
|
||||
BagShapeAsset->InitializeShape();
|
||||
BagShapeAsset->BagHeight = NewHeight;
|
||||
BagShapeAsset->InitializeBagShape();
|
||||
BagShapeAsset->MarkPackageDirty();
|
||||
RefreshGrid();
|
||||
}
|
||||
}
|
||||
|
||||
TSharedRef<SWidget> SShapeEditorWidget::CreateGridControls()
|
||||
TSharedRef<SWidget> SBagShapeEditorWidget::CreateGridControls()
|
||||
{
|
||||
return SNew(SBorder)
|
||||
.BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder"))
|
||||
@ -167,7 +167,7 @@ TSharedRef<SWidget> SShapeEditorWidget::CreateGridControls()
|
||||
[
|
||||
SNew(SButton)
|
||||
.Text(FText::FromString("All Enable"))
|
||||
.OnClicked(this, &SShapeEditorWidget::OnAllEnableClicked)
|
||||
.OnClicked(this, &SBagShapeEditorWidget::OnAllEnableClicked)
|
||||
]
|
||||
+ SHorizontalBox::Slot()
|
||||
.AutoWidth()
|
||||
@ -175,17 +175,17 @@ TSharedRef<SWidget> SShapeEditorWidget::CreateGridControls()
|
||||
[
|
||||
SNew(SButton)
|
||||
.Text(FText::FromString("All Disable"))
|
||||
.OnClicked(this, &SShapeEditorWidget::OnAllDisableClicked)
|
||||
.OnClicked(this, &SBagShapeEditorWidget::OnAllDisableClicked)
|
||||
]
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
FReply SShapeEditorWidget::OnAllEnableClicked()
|
||||
FReply SBagShapeEditorWidget::OnAllEnableClicked()
|
||||
{
|
||||
if (BagShapeAsset.IsValid())
|
||||
{
|
||||
BagShapeAsset->InitializeShape();
|
||||
BagShapeAsset->InitializeBagShape();
|
||||
BagShapeAsset->MarkPackageDirty();
|
||||
RefreshGrid();
|
||||
RefreshThumbnail();
|
||||
@ -193,13 +193,13 @@ FReply SShapeEditorWidget::OnAllEnableClicked()
|
||||
return FReply::Handled();
|
||||
}
|
||||
|
||||
FReply SShapeEditorWidget::OnAllDisableClicked()
|
||||
FReply SBagShapeEditorWidget::OnAllDisableClicked()
|
||||
{
|
||||
if (BagShapeAsset.IsValid())
|
||||
{
|
||||
for (int32 X = 0; X < BagShapeAsset->ShapeWidth; X++)
|
||||
for (int32 X = 0; X < BagShapeAsset->BagWidth; X++)
|
||||
{
|
||||
for (int32 Y = 0; Y < BagShapeAsset->ShapeHeight; Y++)
|
||||
for (int32 Y = 0; Y < BagShapeAsset->BagHeight; Y++)
|
||||
{
|
||||
BagShapeAsset->SetSlotActive(X, Y, false);
|
||||
}
|
||||
@ -211,7 +211,7 @@ FReply SShapeEditorWidget::OnAllDisableClicked()
|
||||
return FReply::Handled();
|
||||
}
|
||||
|
||||
void SShapeEditorWidget::OnSlotClicked(int32 X, int32 Y)
|
||||
void SBagShapeEditorWidget::OnSlotClicked(int32 X, int32 Y)
|
||||
{
|
||||
if (!BagShapeAsset.IsValid())
|
||||
{
|
||||
@ -234,7 +234,7 @@ void SShapeEditorWidget::OnSlotClicked(int32 X, int32 Y)
|
||||
RefreshThumbnail();
|
||||
}
|
||||
|
||||
void SShapeEditorWidget::RefreshThumbnail()
|
||||
void SBagShapeEditorWidget::RefreshThumbnail()
|
||||
{
|
||||
if (!BagShapeAsset.IsValid())
|
||||
{
|
||||
|
||||
@ -1,23 +1,23 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "Widgets/ShapeGridWidget.h"
|
||||
#include "Widgets/BagShapeGridWidget.h"
|
||||
|
||||
const float SShapeGridWidget::CellSize = 32.0f;
|
||||
const float SShapeGridWidget::SeparatorWidth = 2.0f;
|
||||
void SShapeGridWidget::Construct(const FArguments& InArgs)
|
||||
const float SBagShapeGridWidget::CellSize = 32.0f;
|
||||
const float SBagShapeGridWidget::SeparatorWidth = 2.0f;
|
||||
void SBagShapeGridWidget::Construct(const FArguments& InArgs)
|
||||
{
|
||||
BagShapeAsset = InArgs._BagShapeAsset;
|
||||
OnSlotClicked = InArgs._OnSlotClicked;
|
||||
}
|
||||
|
||||
void SShapeGridWidget::UpdateBagShapeAsset(UShapeAsset* InBagShapeAsset)
|
||||
void SBagShapeGridWidget::UpdateBagShapeAsset(UBagShapeAsset* InBagShapeAsset)
|
||||
{
|
||||
BagShapeAsset = InBagShapeAsset;
|
||||
Invalidate(EInvalidateWidget::Paint);
|
||||
}
|
||||
|
||||
FReply SShapeGridWidget::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
|
||||
FReply SBagShapeGridWidget::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
|
||||
{
|
||||
if (MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton && BagShapeAsset.IsValid())
|
||||
{
|
||||
@ -37,7 +37,7 @@ FReply SShapeGridWidget::OnMouseButtonDown(const FGeometry& MyGeometry, const FP
|
||||
return FReply::Unhandled();
|
||||
}
|
||||
|
||||
int32 SShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry,
|
||||
int32 SBagShapeGridWidget::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 SShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allotte
|
||||
|
||||
// Calculate grid dimensions with separators
|
||||
float Scale = CellSize + SeparatorWidth;
|
||||
float GridWidth = BagShapeAsset->ShapeWidth * Scale - SeparatorWidth;
|
||||
float GridHeight = BagShapeAsset->ShapeHeight * Scale - SeparatorWidth;
|
||||
float GridWidth = BagShapeAsset->BagWidth * Scale - SeparatorWidth;
|
||||
float GridHeight = BagShapeAsset->BagHeight * Scale - SeparatorWidth;
|
||||
|
||||
// Center the grid in the available space
|
||||
FVector2D GridStartPos = FVector2D(
|
||||
@ -68,9 +68,9 @@ int32 SShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allotte
|
||||
);
|
||||
|
||||
// Draw cells
|
||||
for (int32 Y = 0; Y < BagShapeAsset->ShapeHeight; Y++)
|
||||
for (int32 Y = 0; Y < BagShapeAsset->BagHeight; Y++)
|
||||
{
|
||||
for (int32 X = 0; X < BagShapeAsset->ShapeWidth; X++)
|
||||
for (int32 X = 0; X < BagShapeAsset->BagWidth; X++)
|
||||
{
|
||||
FVector2D CellPos = GridStartPos + FVector2D(X * Scale, Y * Scale);
|
||||
bool bIsActive = BagShapeAsset->IsSlotActive(X, Y);
|
||||
@ -89,7 +89,7 @@ int32 SShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allotte
|
||||
}
|
||||
|
||||
// Draw vertical separators
|
||||
for (int32 X = 1; X < BagShapeAsset->ShapeWidth; X++)
|
||||
for (int32 X = 1; X < BagShapeAsset->BagWidth; X++)
|
||||
{
|
||||
float SeparatorX = GridStartPos.X + X * Scale - SeparatorWidth;
|
||||
FSlateDrawElement::MakeBox(
|
||||
@ -103,7 +103,7 @@ int32 SShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allotte
|
||||
}
|
||||
|
||||
// Draw horizontal separators
|
||||
for (int32 Y = 1; Y < BagShapeAsset->ShapeHeight; Y++)
|
||||
for (int32 Y = 1; Y < BagShapeAsset->BagHeight; Y++)
|
||||
{
|
||||
float SeparatorY = GridStartPos.Y + Y * Scale - SeparatorWidth;
|
||||
FSlateDrawElement::MakeBox(
|
||||
@ -129,7 +129,7 @@ int32 SShapeGridWidget::OnPaint(const FPaintArgs& Args, const FGeometry& Allotte
|
||||
return LayerId + 4;
|
||||
}
|
||||
|
||||
FVector2D SShapeGridWidget::ComputeDesiredSize(float X) const
|
||||
FVector2D SBagShapeGridWidget::ComputeDesiredSize(float X) const
|
||||
{
|
||||
if (!BagShapeAsset.IsValid())
|
||||
{
|
||||
@ -138,12 +138,12 @@ FVector2D SShapeGridWidget::ComputeDesiredSize(float X) const
|
||||
|
||||
float Scale = CellSize + SeparatorWidth;
|
||||
return FVector2D(
|
||||
BagShapeAsset->ShapeWidth * Scale - SeparatorWidth + 20.0f, // Add padding
|
||||
BagShapeAsset->ShapeHeight * Scale - SeparatorWidth + 20.0f
|
||||
BagShapeAsset->BagWidth * Scale - SeparatorWidth + 20.0f, // Add padding
|
||||
BagShapeAsset->BagHeight * Scale - SeparatorWidth + 20.0f
|
||||
);
|
||||
}
|
||||
|
||||
FVector2D SShapeGridWidget::GetGridCellFromPosition(const FVector2D& Position) const
|
||||
FVector2D SBagShapeGridWidget::GetGridCellFromPosition(const FVector2D& Position) const
|
||||
{
|
||||
if (!BagShapeAsset.IsValid())
|
||||
{
|
||||
@ -151,8 +151,8 @@ FVector2D SShapeGridWidget::GetGridCellFromPosition(const FVector2D& Position) c
|
||||
}
|
||||
|
||||
float Scale = CellSize + SeparatorWidth;
|
||||
float GridWidth = BagShapeAsset->ShapeWidth * Scale - SeparatorWidth;
|
||||
float GridHeight = BagShapeAsset->ShapeHeight * Scale - SeparatorWidth;
|
||||
float GridWidth = BagShapeAsset->BagWidth * Scale - SeparatorWidth;
|
||||
float GridHeight = BagShapeAsset->BagHeight * Scale - SeparatorWidth;
|
||||
|
||||
FVector2D GridStartPos = FVector2D(
|
||||
(GetCachedGeometry().GetLocalSize().X - GridWidth) * 0.5f,
|
||||
@ -167,11 +167,11 @@ FVector2D SShapeGridWidget::GetGridCellFromPosition(const FVector2D& Position) c
|
||||
);
|
||||
}
|
||||
|
||||
bool SShapeGridWidget::IsValidGridPosition(int32 X, int32 Y) const
|
||||
bool SBagShapeGridWidget::IsValidGridPosition(int32 X, int32 Y) const
|
||||
{
|
||||
if (!BagShapeAsset.IsValid())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return X >= 0 && X < BagShapeAsset->ShapeWidth && Y >= 0 && Y < BagShapeAsset->ShapeHeight;
|
||||
return X >= 0 && X < BagShapeAsset->BagWidth && Y >= 0 && Y < BagShapeAsset->BagHeight;
|
||||
}
|
||||
@ -8,10 +8,10 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class PROJECTFISHEDITOR_API FShapeAssetTypeAction: public FAssetTypeActions_Base
|
||||
class PROJECTFISHEDITOR_API FBagShapeAssetTypeAction: public FAssetTypeActions_Base
|
||||
{
|
||||
public:
|
||||
FShapeAssetTypeAction(EAssetTypeCategories::Type InAssetCategory)
|
||||
FBagShapeAssetTypeAction(EAssetTypeCategories::Type InAssetCategory)
|
||||
{
|
||||
MyAssetCategory = InAssetCategory;
|
||||
}
|
||||
@ -7,10 +7,10 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class PROJECTFISHEDITOR_API FShapeAssetEditor: public FAssetEditorToolkit
|
||||
class PROJECTFISHEDITOR_API FBagShapeAssetEditor: public FAssetEditorToolkit
|
||||
{
|
||||
public:
|
||||
void Initialize(const EToolkitMode::Type Mode, const TSharedPtr<class IToolkitHost>& InitToolkitHost, class UShapeAsset* InBagShapeAsset);
|
||||
void Initialize(const EToolkitMode::Type Mode, const TSharedPtr<class IToolkitHost>& InitToolkitHost, class UBagShapeAsset* InBagShapeAsset);
|
||||
|
||||
// IAssetEditorInstance interface
|
||||
virtual FName GetToolkitFName() const override;
|
||||
@ -25,9 +25,9 @@ public:
|
||||
private:
|
||||
TSharedRef<SDockTab> SpawnBagShapeEditorTab(const FSpawnTabArgs& Args);
|
||||
|
||||
class UShapeAsset* ShapeAsset;
|
||||
class UBagShapeAsset* BagShapeAsset;
|
||||
/** Tab IDs */
|
||||
static const FName ShapeEditorTabId;
|
||||
static const FName BagShapeEditorTabId;
|
||||
};
|
||||
|
||||
|
||||
@ -4,17 +4,17 @@
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Factories/Factory.h"
|
||||
#include "ShapeFactory.generated.h"
|
||||
#include "BagShapeFactory.generated.h"
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class PROJECTFISHEDITOR_API UShapeFactory : public UFactory
|
||||
class PROJECTFISHEDITOR_API UBagShapeFactory : public UFactory
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
UShapeFactory();
|
||||
UBagShapeFactory();
|
||||
|
||||
//interface
|
||||
virtual UObject* FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override;
|
||||
@ -4,13 +4,13 @@
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "ThumbnailRendering/DefaultSizedThumbnailRenderer.h"
|
||||
#include "ShapeAssetThumbnailRenderer.generated.h"
|
||||
#include "BagShapeAssetThumbnailRenderer.generated.h"
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class PROJECTFISHEDITOR_API UShapeAssetThumbnailRenderer : public UDefaultSizedThumbnailRenderer
|
||||
class PROJECTFISHEDITOR_API UBagShapeAssetThumbnailRenderer : public UDefaultSizedThumbnailRenderer
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
@ -19,7 +19,7 @@ public:
|
||||
|
||||
private:
|
||||
/** Draw the bag shape on canvas */
|
||||
void DrawBagShape(class UShapeAsset* BagShapeAsset, FCanvas* Canvas, int32 X, int32 Y, uint32 Width, uint32 Height);
|
||||
void DrawBagShape(class UBagShapeAsset* 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;
|
||||
@ -3,17 +3,17 @@
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "ShapeGridWidget.h"
|
||||
#include "ProjectFish/DataAsset/ShapeAsset.h"
|
||||
#include "BagShapeGridWidget.h"
|
||||
#include "ProjectFish/DataAsset/BagShapeAsset.h"
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class PROJECTFISHEDITOR_API SShapeEditorWidget: public SCompoundWidget
|
||||
class PROJECTFISHEDITOR_API SBagShapeEditorWidget: public SCompoundWidget
|
||||
{
|
||||
public:
|
||||
SLATE_BEGIN_ARGS(SShapeEditorWidget) {}
|
||||
SLATE_ARGUMENT(UShapeAsset*, BagShapeAsset)
|
||||
SLATE_BEGIN_ARGS(SBagShapeEditorWidget) {}
|
||||
SLATE_ARGUMENT(UBagShapeAsset*, BagShapeAsset)
|
||||
SLATE_END_ARGS()
|
||||
void Construct(const FArguments& InArgs);
|
||||
|
||||
@ -24,9 +24,9 @@ private:
|
||||
//背包大小UI
|
||||
TSharedRef<SWidget> CreateSizeControls();
|
||||
/** Get the current bag width */
|
||||
int32 GetShapeWidth() const;
|
||||
int32 GetBagWidth() const;
|
||||
/** Get the current bag height */
|
||||
int32 GetShapeHeight() const;
|
||||
int32 GetBagHeight() 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 UShapeAsset> BagShapeAsset;
|
||||
TSharedPtr<SShapeGridWidget> GridWidget;
|
||||
TWeakObjectPtr<class UBagShapeAsset> BagShapeAsset;
|
||||
TSharedPtr<SBagShapeGridWidget> GridWidget;
|
||||
};
|
||||
|
||||
@ -3,23 +3,23 @@
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "ProjectFish/DataAsset/ShapeAsset.h"
|
||||
#include "ProjectFish/DataAsset/BagShapeAsset.h"
|
||||
|
||||
DECLARE_DELEGATE_TwoParams(FOnSlotClicked, int32, int32);
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class SShapeGridWidget : public SCompoundWidget
|
||||
class SBagShapeGridWidget : public SCompoundWidget
|
||||
{
|
||||
public:
|
||||
SLATE_BEGIN_ARGS(SShapeGridWidget) {}
|
||||
SLATE_ARGUMENT(UShapeAsset*, BagShapeAsset)
|
||||
SLATE_BEGIN_ARGS(SBagShapeGridWidget) {}
|
||||
SLATE_ARGUMENT(UBagShapeAsset*, BagShapeAsset)
|
||||
SLATE_EVENT(FOnSlotClicked, OnSlotClicked)
|
||||
SLATE_END_ARGS()
|
||||
|
||||
void Construct(const FArguments& InArgs);
|
||||
|
||||
void UpdateBagShapeAsset(UShapeAsset* InBagShapeAsset);
|
||||
void UpdateBagShapeAsset(UBagShapeAsset* 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<UShapeAsset> BagShapeAsset;
|
||||
TWeakObjectPtr<UBagShapeAsset> BagShapeAsset;
|
||||
FOnSlotClicked OnSlotClicked;
|
||||
|
||||
FVector2D GetGridCellFromPosition(const FVector2D& Position) const;
|
||||
Loading…
x
Reference in New Issue
Block a user