// 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 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 MainPropertyView; TSharedPtr DetailsPropertyView; TArray Flipbooks; TSharedPtr SelectedPresetOption; TArray> SavedPresetOptions; TSharedPtr SavedPresetComboBox; FString NewPresetName; }; class FPaperZDExtractFlipbookFromTextureViewportClient : public FPaperZDToolViewportClient { public: FPaperZDExtractFlipbookFromTextureViewportClient(UTexture2D* Texture, const TArray& ExtractedFlipbooks, const UPaperZDExtractFlipbookFromTextureDialogSettings* Settings); virtual void Draw(FViewport* Viewport, FCanvas* Canvas) override; virtual FLinearColor GetBackgroundColor() const override; private: // Tile set TWeakObjectPtr TextureBeingExtracted; const TArray& 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& ExtractedFlipbooks, const class UPaperZDExtractFlipbookFromTextureDialogSettings* Settings, class SPaperZDExtractFlipbookFromTextureDialog* InDialog); protected: virtual FText GetTitleText() const override; private: TWeakObjectPtr TexturePtr; TSharedPtr TypedViewportClient; class SPaperZDExtractFlipbookFromTextureDialog* Dialog; };