Files
ProjectEleri/Plugins/PaperZD/Source/PaperZDEditor/Private/Tools/PaperZDExtractFlipbookFromTextureDialog.h
2026-07-11 10:43:52 +02:00

120 lines
3.8 KiB
C++

// Copyright 2017 ~ 2022 Critical Failure Studio Ltd. All rights reserved.
#pragma once
#include "PaperZDToolViewport.h"
#include "PaperZDToolViewportClient.h"
class UPaperFlipbook;
class UTexture2D;
class UPaperZDExtractFlipbookFromTextureDialogSettings;
class SSearchableComboBox;
struct FPropertyChangedEvent;
struct FPaperZDExtractFlipbookSettings;
struct FPaperZDExtractFlipbooksAnimationSkinSettings;
struct FPaperZDExtractedSprite
{
uint32 Index;
FIntRect Rect;
};
struct FPaperZDExtractedFlipbook
{
uint32 Index;
TArray<FPaperZDExtractedSprite> Sprites;
UPaperFlipbook* Flipbook;
};
class SPaperZDExtractFlipbookFromTextureDialog : public SCompoundWidget
{
public:
SLATE_BEGIN_ARGS(SPaperZDExtractFlipbookFromTextureDialog) {}
SLATE_END_ARGS()
// Constructs this widget with InArgs
void Construct(const FArguments& InArgs, UTexture2D* Texture);
virtual ~SPaperZDExtractFlipbookFromTextureDialog();
static void ShowWindow(UTexture2D* Texture);
private:
// Calculate a list of extracted sprite rects
void PreviewSelectedFlipbooks();
// Actually create extracted sprites
void ExtractFlipbooks();
// Handler for Extract button
FReply ExtractClicked();
// Handler for Cancel button
FReply CancelClicked();
void CloseContainingWindow();
// Handler for Apply Preset button
FReply ApplyPresetClicked();
// Handler for Delete Preset button
FReply DeletePresetClicked();
// Handler for Save Preset button
FReply SavePresetClicked();
void OnFinishedChangingProperties(const FPropertyChangedEvent& PropertyChangedEvent);
void InitializeFlipbookExtractSettings(FPaperZDExtractFlipbookSettings& FlipbookSettings);
void InitializeAnimationSkinSettings(FPaperZDExtractFlipbooksAnimationSkinSettings& SkinSettings);
private:
UTexture2D* SourceTexture;
UPaperZDExtractFlipbookFromTextureDialogSettings* DialogSettings;
TSharedPtr<class IDetailsView> MainPropertyView;
TSharedPtr<class IDetailsView> DetailsPropertyView;
TArray<FPaperZDExtractedFlipbook> Flipbooks;
TSharedPtr<FString> SelectedPresetOption;
TArray<TSharedPtr<FString>> SavedPresetOptions;
TSharedPtr<SSearchableComboBox> SavedPresetComboBox;
FString NewPresetName;
};
class FPaperZDExtractFlipbookFromTextureViewportClient : public FPaperZDToolViewportClient
{
public:
FPaperZDExtractFlipbookFromTextureViewportClient(UTexture2D* Texture, const TArray<FPaperZDExtractedFlipbook>& ExtractedFlipbooks, const UPaperZDExtractFlipbookFromTextureDialogSettings* Settings);
virtual void Draw(FViewport* Viewport, FCanvas* Canvas) override;
virtual FLinearColor GetBackgroundColor() const override;
private:
// Tile set
TWeakObjectPtr<UTexture2D> TextureBeingExtracted;
const TArray<FPaperZDExtractedFlipbook>& ExtractedFlipbooks;
const UPaperZDExtractFlipbookFromTextureDialogSettings* Settings;
void DrawSprite(FCanvas* Canvas, const FLinearColor& Color, const FPaperZDExtractedSprite& Sprite, int32 FlipbookIndex, int32 SpriteIndex);
};
class SPaperZDExtractFlipbookFromTextureViewport : public SPaperZDToolViewport
{
public:
SLATE_BEGIN_ARGS(SPaperZDExtractFlipbookFromTextureViewport) {}
SLATE_END_ARGS()
~SPaperZDExtractFlipbookFromTextureViewport();
void Construct(const FArguments& InArgs, UTexture2D* Texture, const TArray<FPaperZDExtractedFlipbook>& ExtractedFlipbooks, const class UPaperZDExtractFlipbookFromTextureDialogSettings* Settings, class SPaperZDExtractFlipbookFromTextureDialog* InDialog);
protected:
virtual FText GetTitleText() const override;
private:
TWeakObjectPtr<class UTexture2D> TexturePtr;
TSharedPtr<class FPaperZDExtractFlipbookFromTextureViewportClient> TypedViewportClient;
class SPaperZDExtractFlipbookFromTextureDialog* Dialog;
};