From 046fa1cd012e7cc33828d4b65726710268497201 Mon Sep 17 00:00:00 2001 From: Dominik Pavlicek Date: Fri, 23 Dec 2022 16:37:09 +0100 Subject: [PATCH 1/2] Update to 4.27 --- ActorInteractionPlugin.uplugin | 2 +- Resources/HelpIcon.png | Bin 0 -> 6766 bytes Resources/Mountea_Logo.png | Bin 0 -> 17468 bytes .../ActorInteractionPluginEditor.Build.cs | 6 +- .../Private/ActorInteractionPluginEditor.cpp | 90 +++++++++++++++++- .../Private/HelpButton/AIntPCommands.cpp | 13 +++ .../Private/HelpButton/AIntPCommands.h | 24 +++++ .../Private/HelpButton/AIntPHelpStyle.cpp | 72 ++++++++++++++ .../Private/HelpButton/AIntPHelpStyle.h | 31 ++++++ .../Public/ActorInteractionPluginEditor.h | 13 +++ 10 files changed, 247 insertions(+), 4 deletions(-) create mode 100644 Resources/HelpIcon.png create mode 100644 Resources/Mountea_Logo.png create mode 100644 Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.cpp create mode 100644 Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.h create mode 100644 Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPHelpStyle.cpp create mode 100644 Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPHelpStyle.h diff --git a/ActorInteractionPlugin.uplugin b/ActorInteractionPlugin.uplugin index 7cd72aa..b1cc064 100644 --- a/ActorInteractionPlugin.uplugin +++ b/ActorInteractionPlugin.uplugin @@ -1,7 +1,7 @@ { "FileVersion": 3, "Version": 1, - "VersionName": "3.0.0.4", + "VersionName": "3.0.1.1", "FriendlyName": "Actor Interaction Plugin", "Description": "Actor Interaction Plugin is an Open-source Mountea Framework components-based simple framework providing utilities for smart Actor Interaction with other Actors. Developed with Game Developers in mind to allow as easy as possible implementation while maintaining high scalability and diverse options to tweak everything.", "Category": "Mountea Framework", diff --git a/Resources/HelpIcon.png b/Resources/HelpIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..740189e343eabd6b7e790a97e33338a5977d05ab GIT binary patch literal 6766 zcmZ8`Wl+>_)b?)!7Fcj$0SS=~LApU==@d|;kwy?j5s;8tLP8Lh5a|>o6iI1VN*b1s z?(Y86EU(YJGtbQXemLh`U(U=ur{>((iO|zgBO{?F0RVtZLtXjlKa2h!AtL;z+vKc! z{~2NzbrUxLfK&dDfPj=VS^%JD)=*Y><^|e)4s$pEo80tkAWF4^Cy|$C<};iyH;=AC zi&(a_l-wB1D?6$rl})Ee%${_oOhdhZ*uqMwd&-0;NeR%8ayD0?O#bX5a0db(ut?KL7mud$(ghUe5*pZ5GP@SF1@M?6JD z0@sHR!WsJxTXl8u`yTH3_>;}hF%|hnXO;Lj=(BxY3v%p3T_${S_j2T~_9&XoN)BOm z5F49z{P`8@vO@@&li*_|$=@s=ka9$<&&L^i8*oz;xBU_8O-+Tj*iF|TvY;6uw_72# z>sPBsM^CFqkB71SAROHy$emIdb1IC~QbN;{DjDYs$fUV3z!_SR3q+68XE(W=w$0Yl zT!(U;>wwH%*oU8<({4|@ISi-?^0=+`FOqJO4l}}%_ifi8K9pJUlxXe~aaR~i+``>M zWz�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 + FAIntPCommands::Get().PluginAction, + FExecuteAction::CreateRaw(this, &FActorInteractionPluginEditor::PluginButtonClicked), + FCanExecuteAction()); + + IMainFrameModule& mainFrame = FModuleManager::Get().LoadModuleChecked("MainFrame"); + mainFrame.GetMainFrameCommandBindings()->Append(PluginCommands.ToSharedRef()); + + UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateRaw(this, &FActorInteractionPluginEditor::RegisterMenus)); + } } void FActorInteractionPluginEditor::ShutdownModule() @@ -135,6 +160,17 @@ void FActorInteractionPluginEditor::ShutdownModule() } } + // Help Button Cleanup + { + UToolMenus::UnRegisterStartupCallback(this); + + UToolMenus::UnregisterOwner(this); + + FAIntPHelpStyle::Shutdown(); + + FAIntPCommands::Unregister(); + } + UE_LOG(ActorInteractionPluginEditor, Warning, TEXT("ActorInteractionPluginEditor module has been unloaded")); } @@ -182,6 +218,56 @@ void FActorInteractionPluginEditor::HandleNewInteractableBlueprintCreated(UBluep Blueprint->BlueprintCategory = FString("Interaction"); } +void FActorInteractionPluginEditor::PluginButtonClicked() +{ + const FString URL = "https://discord.gg/2vXWEEN"; + + if (!URL.IsEmpty()) + { + FPlatformProcess::LaunchURL(*URL, nullptr, nullptr); + } +} + +void FActorInteractionPluginEditor::RegisterMenus() +{ + // Owner will be used for cleanup in call to UToolMenus::UnregisterOwner + FToolMenuOwnerScoped OwnerScoped(this); + + // Register in Window tab + { + UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("LevelEditor.MainMenu.Help"); + { + FToolMenuSection& Section = Menu->FindOrAddSection("MounteaFramework"); + Section.Label = FText::FromString(TEXT("Mountea Framework")); + + FToolMenuEntry Entry = Section.AddMenuEntryWithCommandList + ( + FAIntPCommands::Get().PluginAction, + PluginCommands, + NSLOCTEXT("MounteaSupport", "TabTitle", "Mountea Support"), + NSLOCTEXT("MounteaSupport", "TooltipText", "Opens Mountea Framework Support channel"), + FSlateIcon(FAIntPHelpStyle::GetStyleSetName(), "AIntPSupport.PluginAction.small") + ); + } + } + + // Register in Level Editor Toolbar + { + UToolMenu* ToolbarMenu = UToolMenus::Get()->ExtendMenu("LevelEditor.LevelEditorToolBar"); + { + FToolMenuSection& Section = ToolbarMenu->FindOrAddSection("MounteaFramework"); + { + Section.Label = FText::FromString(TEXT("Mountea Framework")); + + FToolMenuEntry& Entry = Section.AddEntry(FToolMenuEntry::InitToolBarButton(FAIntPCommands::Get().PluginAction)); + Entry.SetCommandList(PluginCommands); + + Entry.InsertPosition.Position = EToolMenuInsertType::First; + } + } + } +} + #undef LOCTEXT_NAMESPACE IMPLEMENT_MODULE(FActorInteractionPluginEditor, ActorInteractionPluginEditor); \ No newline at end of file diff --git a/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.cpp b/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.cpp new file mode 100644 index 0000000..c12b5be --- /dev/null +++ b/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.cpp @@ -0,0 +1,13 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "AIntPCommands.h" + +#define LOCTEXT_NAMESPACE "ActorInteractionPluginEditorModule" + +void FAIntPCommands::RegisterCommands() +{ + UI_COMMAND(PluginAction, "Support", "Opens Support channel", EUserInterfaceActionType::Button, FInputChord(EModifierKey::Control|EModifierKey::Shift|EModifierKey::Alt, EKeys::X)); +} + +#undef LOCTEXT_NAMESPACE \ No newline at end of file diff --git a/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.h b/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.h new file mode 100644 index 0000000..115e5ed --- /dev/null +++ b/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.h @@ -0,0 +1,24 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "AIntPHelpStyle.h" + + +class FAIntPCommands : public TCommands +{ +public: + + FAIntPCommands() + : TCommands(TEXT("AIntPSupport"), NSLOCTEXT("Contexts", "Support", "ActorInteraction Plugin"), NAME_None, FAIntPHelpStyle::GetStyleSetName()) + { + } + + // TCommands<> interface + virtual void RegisterCommands() override; + +public: + + TSharedPtr< FUICommandInfo > PluginAction; +}; diff --git a/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPHelpStyle.cpp b/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPHelpStyle.cpp new file mode 100644 index 0000000..ae3e45c --- /dev/null +++ b/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPHelpStyle.cpp @@ -0,0 +1,72 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "AIntPHelpStyle.h" +#include "Framework/Application/SlateApplication.h" +#include "Styling/SlateStyleRegistry.h" +#include "Slate/SlateGameResources.h" +#include "Interfaces/IPluginManager.h" + +TSharedPtr< FSlateStyleSet > FAIntPHelpStyle::StyleInstance = nullptr; + +void FAIntPHelpStyle::Initialize() +{ + if (!StyleInstance.IsValid()) + { + StyleInstance = Create(); + FSlateStyleRegistry::RegisterSlateStyle(*StyleInstance); + } +} + +void FAIntPHelpStyle::Shutdown() +{ + FSlateStyleRegistry::UnRegisterSlateStyle(*StyleInstance); + ensure(StyleInstance.IsUnique()); + StyleInstance.Reset(); +} + +void FAIntPHelpStyle::ReloadTextures() +{ + if (FSlateApplication::IsInitialized()) + { + FSlateApplication::Get().GetRenderer()->ReloadTextureResources(); + } +} + +const ISlateStyle& FAIntPHelpStyle::Get() +{ + return *StyleInstance; +} + +FName FAIntPHelpStyle::GetStyleSetName() +{ + static FName StyleSetName(TEXT("AIntPHelpStyle")); + return StyleSetName; +} + +#define IMAGE_BRUSH( RelativePath, ... ) FSlateImageBrush( Style->RootToContentDir( RelativePath, TEXT(".png") ), __VA_ARGS__ ) +#define BOX_BRUSH( RelativePath, ... ) FSlateBoxBrush( Style->RootToContentDir( RelativePath, TEXT(".png") ), __VA_ARGS__ ) +#define BORDER_BRUSH( RelativePath, ... ) FSlateBorderBrush( Style->RootToContentDir( RelativePath, TEXT(".png") ), __VA_ARGS__ ) +#define TTF_FONT( RelativePath, ... ) FSlateFontInfo( Style->RootToContentDir( RelativePath, TEXT(".ttf") ), __VA_ARGS__ ) +#define OTF_FONT( RelativePath, ... ) FSlateFontInfo( Style->RootToContentDir( RelativePath, TEXT(".otf") ), __VA_ARGS__ ) + +const FVector2D Icon16x16(16.0f, 16.0f); +const FVector2D Icon20x20(20.0f, 20.0f); +const FVector2D Icon40x40(40.0f, 40.0f); + +TSharedRef FAIntPHelpStyle::Create() +{ + TSharedRef< FSlateStyleSet > Style = MakeShareable(new FSlateStyleSet("AIntPHelpStyle")); + Style->SetContentRoot(IPluginManager::Get().FindPlugin("ActorInteractionPlugin")->GetBaseDir() / TEXT("Resources")); + + Style->Set("AIntPSupport.PluginAction", new IMAGE_BRUSH(TEXT("Mountea_Logo"), Icon40x40)); + Style->Set("AIntPSupport.PluginAction.small", new IMAGE_BRUSH(TEXT("HelpIcon"), Icon20x20)); + + return Style; +} + +#undef IMAGE_BRUSH +#undef BOX_BRUSH +#undef BORDER_BRUSH +#undef TTF_FONT +#undef OTF_FONT \ No newline at end of file diff --git a/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPHelpStyle.h b/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPHelpStyle.h new file mode 100644 index 0000000..17becd3 --- /dev/null +++ b/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPHelpStyle.h @@ -0,0 +1,31 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Styling/SlateStyle.h" + +class FAIntPHelpStyle +{ +public: + + static void Initialize(); + + static void Shutdown(); + + /** reloads textures used by slate renderer */ + static void ReloadTextures(); + + /** @return The Slate style set for the Actor Interaction Plugin Help Button */ + static const ISlateStyle& Get(); + + static FName GetStyleSetName(); + +private: + + static TSharedRef< class FSlateStyleSet > Create(); + +private: + + static TSharedPtr< class FSlateStyleSet > StyleInstance; +}; diff --git a/Source/ActorInteractionPluginEditor/Public/ActorInteractionPluginEditor.h b/Source/ActorInteractionPluginEditor/Public/ActorInteractionPluginEditor.h index 447430d..d9ec0a6 100644 --- a/Source/ActorInteractionPluginEditor/Public/ActorInteractionPluginEditor.h +++ b/Source/ActorInteractionPluginEditor/Public/ActorInteractionPluginEditor.h @@ -29,4 +29,17 @@ class FActorInteractionPluginEditor : public IModuleInterface TSharedPtr InteractorComponentAssetActions; TSharedPtr InteractableComponentAssetActions; + +public: + + /** This function will be bound to Command. */ + void PluginButtonClicked(); + +private: + + void RegisterMenus(); + +private: + + TSharedPtr PluginCommands; }; From a4b6b502f4c47a00d1e308c004b93a133fc042d1 Mon Sep 17 00:00:00 2001 From: Dominik Pavlicek Date: Fri, 23 Dec 2022 16:58:22 +0100 Subject: [PATCH 2/2] Update AIntPCommands.cpp --- .../Private/HelpButton/AIntPCommands.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.cpp b/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.cpp index c12b5be..adbc69f 100644 --- a/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.cpp +++ b/Source/ActorInteractionPluginEditor/Private/HelpButton/AIntPCommands.cpp @@ -7,7 +7,7 @@ void FAIntPCommands::RegisterCommands() { - UI_COMMAND(PluginAction, "Support", "Opens Support channel", EUserInterfaceActionType::Button, FInputChord(EModifierKey::Control|EModifierKey::Shift|EModifierKey::Alt, EKeys::X)); + UI_COMMAND(PluginAction, "Support", "Opens Mountea Framework Support channel", EUserInterfaceActionType::Button, FInputChord(EModifierKey::Control|EModifierKey::Shift|EModifierKey::Alt, EKeys::X)); } #undef LOCTEXT_NAMESPACE \ No newline at end of file