// ©2023 Batty Bovine Productions, LLC. All Rights Reserved. #pragma once #include "Modules/ModuleManager.h" #include "EdGraphUtilities.h" #include "IAssetTools.h" #include "IAssetTypeActions.h" #include "Factories/Factory.h" #include "ComboInputEditor.generated.h" UCLASS() class COMBOINPUTEDITOR_API UComboAction_Factory : public UFactory { GENERATED_BODY() public: UComboAction_Factory(const class FObjectInitializer &ObjectInitializer); UPROPERTY(EditAnywhere, Category="Combo Input") TSubclassOf ComboActionClass; virtual UObject *FactoryCreateNew(UClass *Class, UObject *InParent, FName Name, EObjectFlags Flags, UObject *Context, FFeedbackContext *Warn) override; }; UCLASS() class COMBOINPUTEDITOR_API UComboInputAsset_Factory : public UFactory { GENERATED_BODY() public: UComboInputAsset_Factory(const class FObjectInitializer &ObjectInitializer); UPROPERTY(EditAnywhere, Category="Combo Input") TSubclassOf ComboInputAssetClass; virtual UObject *FactoryCreateNew(UClass *Class, UObject *InParent, FName Name, EObjectFlags Flags, UObject *Context, FFeedbackContext *Warn) override; }; UCLASS() class COMBOINPUTEDITOR_API UComboActionGraph_Factory : public UFactory { GENERATED_BODY() public: UComboActionGraph_Factory(const class FObjectInitializer &ObjectInitializer); UPROPERTY(EditAnywhere, Category = "Combo Input|Action") TSubclassOf ComboActionGraphClass; virtual UObject *FactoryCreateNew(UClass *Class, UObject *InParent, FName Name, EObjectFlags Flags, UObject *Context, FFeedbackContext *Warn) override; }; class FComboInputSlateStyle final : public FSlateStyleSet { public: FComboInputSlateStyle(); static const FName &GetAppStyleSetName() { static FName StyleSetName(TEXT("ComboInputSlateStyle")); return StyleSetName; }; }; class FComboInputEditorModule : public IModuleInterface { public: static FComboInputEditorModule &Get() { return FModuleManager::LoadModuleChecked("ComboInputEditor"); } static bool IsAvailable() { return FModuleManager::Get().IsModuleLoaded("ComboInputEditor"); } virtual void StartupModule() override; virtual void ShutdownModule() override; TSharedPtr GetComboInputEditorStyleSet() const { return this->ComboInputEditorStyleSet; } static EAssetTypeCategories::Type GetInputAssetsCategory() { return FComboInputEditorModule::ComboAssetsCategory; } private: void RegisterAssetTypeActions(IAssetTools &AssetTools, TSharedRef Action) { AssetTools.RegisterAssetTypeActions(Action); CreatedAssetTypeActions.Add(Action); } static EAssetTypeCategories::Type ComboAssetsCategory; static EAssetTypeCategories::Type ComboActionGraphCategory; TArray> CreatedAssetTypeActions; TSharedPtr ComboInputEditorStyleSet; TSharedPtr ComboActionGraphPanelNodeFactory; TSharedPtr ComboActionGraphAssetActions; };