From 9112b87ba6ffc095fd43d5a769ce3501ef85e765 Mon Sep 17 00:00:00 2001 From: Ondrej Samohel Date: Wed, 17 May 2023 12:20:43 +0200 Subject: [PATCH] :truck: move unreal plugin to separate repository --- openpype/hosts/unreal/integration/README.md | 10 - .../integration/UE_4.27/Ayon/.gitignore | 35 --- .../integration/UE_4.27/Ayon/Ayon.uplugin | 23 -- .../Ayon/Config/DefaultAyonSettings.ini | 2 - .../UE_4.27/Ayon/Config/FilterPlugin.ini | 8 - .../Ayon/Content/Python/init_unreal.py | 30 --- .../unreal/integration/UE_4.27/Ayon/README.md | 3 - .../UE_4.27/Ayon/Resources/ayon128.png | Bin 2358 -> 0 bytes .../UE_4.27/Ayon/Resources/ayon40.png | Bin 721 -> 0 bytes .../UE_4.27/Ayon/Resources/ayon512.png | Bin 16705 -> 0 bytes .../UE_4.27/Ayon/Source/Ayon/Ayon.Build.cs | 61 ------ .../UE_4.27/Ayon/Source/Ayon/Private/Ayon.cpp | 156 -------------- .../Ayon/Private/AyonAssetContainer.cpp | 114 ---------- .../Private/AyonAssetContainerFactory.cpp | 20 -- .../Ayon/Source/Ayon/Private/AyonLib.cpp | 53 ----- .../Ayon/Private/AyonPublishInstance.cpp | 203 ----------------- .../Private/AyonPublishInstanceFactory.cpp | 23 -- .../Source/Ayon/Private/AyonPythonBridge.cpp | 14 -- .../Ayon/Source/Ayon/Private/AyonSettings.cpp | 20 -- .../Ayon/Source/Ayon/Private/AyonStyle.cpp | 70 ------ .../Private/Commandlets/AyonActionResult.cpp | 41 ---- .../AyonGenerateProjectCommandlet.cpp | 141 ------------ .../Ayon/Private/OpenPypePublishInstance.cpp | 203 ----------------- .../UE_4.27/Ayon/Source/Ayon/Public/Ayon.h | 20 -- .../Source/Ayon/Public/AyonAssetContainer.h | 39 ---- .../Ayon/Public/AyonAssetContainerFactory.h | 21 -- .../Ayon/Source/Ayon/Public/AyonConstants.h | 15 -- .../UE_4.27/Ayon/Source/Ayon/Public/AyonLib.h | 19 -- .../Source/Ayon/Public/AyonPublishInstance.h | 103 --------- .../Ayon/Public/AyonPublishInstanceFactory.h | 22 -- .../Source/Ayon/Public/AyonPythonBridge.h | 20 -- .../Ayon/Source/Ayon/Public/AyonSettings.h | 31 --- .../Ayon/Source/Ayon/Public/AyonStyle.h | 23 -- .../Public/Commandlets/AyonActionResult.h | 83 ------- .../AyonGenerateProjectCommandlet.h | 60 ------ .../Source/Ayon/Public/Logging/Ayon_Log.h | 4 - .../Ayon/Public/OpenPypePublishInstance.h | 103 --------- .../integration/UE_4.27/BuildPlugin_4-27.bat | 1 - .../UE_4.27/BuildPlugin_4-27_Window.bat | 1 - .../UE_4.27/CommandletProject/.gitignore | 8 - .../CommandletProject.uproject | 12 -- .../unreal/integration/UE_5.0/Ayon/.gitignore | 35 --- .../integration/UE_5.0/Ayon/Ayon.uplugin | 24 --- .../Ayon/Config/DefaultAyonSettings.ini | 2 - .../UE_5.0/Ayon/Config/FilterPlugin.ini | 8 - .../UE_5.0/Ayon/Content/Python/init_unreal.py | 30 --- .../unreal/integration/UE_5.0/Ayon/README.md | 3 - .../UE_5.0/Ayon/Resources/ayon128.png | Bin 2358 -> 0 bytes .../UE_5.0/Ayon/Resources/ayon40.png | Bin 721 -> 0 bytes .../UE_5.0/Ayon/Resources/ayon512.png | Bin 16705 -> 0 bytes .../UE_5.0/Ayon/Source/Ayon/Ayon.Build.cs | 65 ------ .../UE_5.0/Ayon/Source/Ayon/Private/Ayon.cpp | 139 ------------ .../Ayon/Private/AyonAssetContainer.cpp | 113 ---------- .../Private/AyonAssetContainerFactory.cpp | 20 -- .../Ayon/Source/Ayon/Private/AyonCommands.cpp | 13 -- .../Ayon/Source/Ayon/Private/AyonLib.cpp | 51 ----- .../Ayon/Private/AyonPublishInstance.cpp | 204 ------------------ .../Private/AyonPublishInstanceFactory.cpp | 23 -- .../Source/Ayon/Private/AyonPythonBridge.cpp | 14 -- .../Ayon/Source/Ayon/Private/AyonSettings.cpp | 21 -- .../Ayon/Source/Ayon/Private/AyonStyle.cpp | 62 ------ .../Private/Commandlets/AyonActionResult.cpp | 40 ---- .../AyonGenerateProjectCommandlet.cpp | 140 ------------ .../Ayon/Private/OpenPypePublishInstance.cpp | 204 ------------------ .../UE_5.0/Ayon/Source/Ayon/Public/Ayon.h | 24 --- .../Source/Ayon/Public/AyonAssetContainer.h | 34 --- .../Ayon/Public/AyonAssetContainerFactory.h | 18 -- .../Ayon/Source/Ayon/Public/AyonCommands.h | 24 --- .../Ayon/Source/Ayon/Public/AyonConstants.h | 13 -- .../UE_5.0/Ayon/Source/Ayon/Public/AyonLib.h | 19 -- .../Source/Ayon/Public/AyonPublishInstance.h | 104 --------- .../Ayon/Public/AyonPublishInstanceFactory.h | 22 -- .../Source/Ayon/Public/AyonPythonBridge.h | 20 -- .../Ayon/Source/Ayon/Public/AyonSettings.h | 32 --- .../Ayon/Source/Ayon/Public/AyonStyle.h | 19 -- .../Public/Commandlets/AyonActionResult.h | 83 ------- .../AyonGenerateProjectCommandlet.h | 61 ------ .../Source/Ayon/Public/Logging/Ayon_Log.h | 4 - .../Ayon/Public/OpenPypePublishInstance.h | 104 --------- .../integration/UE_5.0/BuildPlugin_5-0.bat | 1 - .../UE_5.0/BuildPlugin_5-0_Window.bat | 1 - .../UE_5.0/CommandletProject/.gitignore | 41 ---- .../CommandletProject.uproject | 20 -- .../unreal/integration/UE_5.1/Ayon/.gitignore | 35 --- .../integration/UE_5.1/Ayon/Ayon.uplugin | 24 --- .../Ayon/Config/DefaultAyonSettings.ini | 2 - .../UE_5.1/Ayon/Config/FilterPlugin.ini | 8 - .../UE_5.1/Ayon/Content/Python/init_unreal.py | 30 --- .../unreal/integration/UE_5.1/Ayon/README.md | 3 - .../UE_5.1/Ayon/Resources/ayon128.png | Bin 2358 -> 0 bytes .../UE_5.1/Ayon/Resources/ayon40.png | Bin 721 -> 0 bytes .../UE_5.1/Ayon/Resources/ayon512.png | Bin 16705 -> 0 bytes .../UE_5.1/Ayon/Source/Ayon/Ayon.Build.cs | 65 ------ .../UE_5.1/Ayon/Source/Ayon/Private/Ayon.cpp | 139 ------------ .../Ayon/Private/AyonAssetContainer.cpp | 113 ---------- .../Private/AyonAssetContainerFactory.cpp | 20 -- .../Ayon/Source/Ayon/Private/AyonCommands.cpp | 13 -- .../Ayon/Source/Ayon/Private/AyonLib.cpp | 51 ----- .../Ayon/Private/AyonPublishInstance.cpp | 204 ------------------ .../Private/AyonPublishInstanceFactory.cpp | 23 -- .../Source/Ayon/Private/AyonPythonBridge.cpp | 14 -- .../Ayon/Source/Ayon/Private/AyonSettings.cpp | 21 -- .../Ayon/Source/Ayon/Private/AyonStyle.cpp | 62 ------ .../Private/Commandlets/AyonActionResult.cpp | 40 ---- .../AyonGenerateProjectCommandlet.cpp | 140 ------------ .../Ayon/Private/OpenPypePublishInstance.cpp | 204 ------------------ .../UE_5.1/Ayon/Source/Ayon/Public/Ayon.h | 24 --- .../Source/Ayon/Public/AyonAssetContainer.h | 34 --- .../Ayon/Public/AyonAssetContainerFactory.h | 18 -- .../Ayon/Source/Ayon/Public/AyonCommands.h | 24 --- .../Ayon/Source/Ayon/Public/AyonConstants.h | 13 -- .../UE_5.1/Ayon/Source/Ayon/Public/AyonLib.h | 19 -- .../Source/Ayon/Public/AyonPublishInstance.h | 104 --------- .../Ayon/Public/AyonPublishInstanceFactory.h | 22 -- .../Source/Ayon/Public/AyonPythonBridge.h | 20 -- .../Ayon/Source/Ayon/Public/AyonSettings.h | 32 --- .../Ayon/Source/Ayon/Public/AyonStyle.h | 19 -- .../Public/Commandlets/AyonActionResult.h | 83 ------- .../AyonGenerateProjectCommandlet.h | 61 ------ .../Source/Ayon/Public/Logging/Ayon_Log.h | 4 - .../Ayon/Public/OpenPypePublishInstance.h | 104 --------- .../integration/UE_5.1/BuildPlugin_5-1.bat | 1 - .../UE_5.1/BuildPlugin_5-1_Window.bat | 1 - .../UE_5.1/CommandletProject/.gitignore | 41 ---- .../CommandletProject.uproject | 20 -- 125 files changed, 5525 deletions(-) delete mode 100644 openpype/hosts/unreal/integration/README.md delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/.gitignore delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Ayon.uplugin delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Config/DefaultAyonSettings.ini delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Config/FilterPlugin.ini delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Content/Python/init_unreal.py delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/README.md delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Resources/ayon128.png delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Resources/ayon40.png delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Resources/ayon512.png delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Ayon.Build.cs delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/Ayon.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonLib.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonSettings.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonStyle.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Ayon.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonAssetContainer.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonConstants.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonLib.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPublishInstance.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPythonBridge.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonSettings.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonStyle.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/BuildPlugin_4-27.bat delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/BuildPlugin_4-27_Window.bat delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/CommandletProject/.gitignore delete mode 100644 openpype/hosts/unreal/integration/UE_4.27/CommandletProject/CommandletProject.uproject delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/.gitignore delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Ayon.uplugin delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Config/DefaultAyonSettings.ini delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Config/FilterPlugin.ini delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Content/Python/init_unreal.py delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/README.md delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Resources/ayon128.png delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Resources/ayon40.png delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Resources/ayon512.png delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Ayon.Build.cs delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/Ayon.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonCommands.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonLib.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonSettings.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonStyle.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Ayon.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonAssetContainer.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonCommands.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonConstants.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonLib.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPublishInstance.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPythonBridge.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonSettings.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonStyle.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/BuildPlugin_5-0.bat delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/BuildPlugin_5-0_Window.bat delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/CommandletProject/.gitignore delete mode 100644 openpype/hosts/unreal/integration/UE_5.0/CommandletProject/CommandletProject.uproject delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/.gitignore delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Ayon.uplugin delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Config/DefaultAyonSettings.ini delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Config/FilterPlugin.ini delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Content/Python/init_unreal.py delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/README.md delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Resources/ayon128.png delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Resources/ayon40.png delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Resources/ayon512.png delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Ayon.Build.cs delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/Ayon.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonCommands.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonLib.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonSettings.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonStyle.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Ayon.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonAssetContainer.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonCommands.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonConstants.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonLib.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPublishInstance.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPythonBridge.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonSettings.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonStyle.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/BuildPlugin_5-1.bat delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/BuildPlugin_5-1_Window.bat delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/CommandletProject/.gitignore delete mode 100644 openpype/hosts/unreal/integration/UE_5.1/CommandletProject/CommandletProject.uproject diff --git a/openpype/hosts/unreal/integration/README.md b/openpype/hosts/unreal/integration/README.md deleted file mode 100644 index 961eea83e6..0000000000 --- a/openpype/hosts/unreal/integration/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Building the plugin - -In order to successfully build the plugin, make sure that the path to the UnrealBuildTool.exe is specified correctly. -After the UBT path specify for which platform it will be compiled. in the -Project parameter, specify the path to the -CommandletProject.uproject file. Next the build type has to be specified (DebugGame, Development, Package, etc.) and then the -TargetType (Editor, Runtime, etc.) - -`BuildPlugin_[Ver].bat` runs the building process in the background. If you want to show the progress inside the -command prompt, use the `BuildPlugin_[Ver]_Window.bat` file. - - diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/.gitignore b/openpype/hosts/unreal/integration/UE_4.27/Ayon/.gitignore deleted file mode 100644 index b32a6f55e5..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -/Binaries -/Intermediate diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Ayon.uplugin b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Ayon.uplugin deleted file mode 100644 index 0838da5577..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Ayon.uplugin +++ /dev/null @@ -1,23 +0,0 @@ -{ - "FileVersion": 3, - "Version": 1, - "VersionName": "1.0", - "FriendlyName": "Ayon", - "Description": "Ayon Integration", - "Category": "Ayon.Integration", - "CreatedBy": "Ondrej Samohel", - "CreatedByURL": "https://ayon.ynput.io", - "DocsURL": "https://ayon.ynput.io/docs/artist_hosts_unreal", - "MarketplaceURL": "", - "SupportURL": "https://ynput.io/", - "EngineVersion": "4.27", - "CanContainContent": true, - "Installed": true, - "Modules": [ - { - "Name": "Ayon", - "Type": "Editor", - "LoadingPhase": "Default" - } - ] -} diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Config/DefaultAyonSettings.ini b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Config/DefaultAyonSettings.ini deleted file mode 100644 index 9ad7f55201..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Config/DefaultAyonSettings.ini +++ /dev/null @@ -1,2 +0,0 @@ -[/Script/Ayon.AyonSettings] -FolderColor=(R=91,G=197,B=220,A=255) \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Config/FilterPlugin.ini b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Config/FilterPlugin.ini deleted file mode 100644 index ccebca2f32..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Config/FilterPlugin.ini +++ /dev/null @@ -1,8 +0,0 @@ -[FilterPlugin] -; This section lists additional files which will be packaged along with your plugin. Paths should be listed relative to the root plugin directory, and -; may include "...", "*", and "?" wildcards to match directories, files, and individual characters respectively. -; -; Examples: -; /README.txt -; /Extras/... -; /Binaries/ThirdParty/*.dll diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Content/Python/init_unreal.py b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Content/Python/init_unreal.py deleted file mode 100644 index 43d6b8b7cf..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Content/Python/init_unreal.py +++ /dev/null @@ -1,30 +0,0 @@ -import unreal - -ayon_detected = True -try: - from openpype.pipeline import install_host - from openpype.hosts.unreal.api import UnrealHost - - ayon_host = UnrealHost() -except ImportError as exc: - ayon_host = None - ayon_detected = False - unreal.log_error(f"OpenPype: cannot load Ayon [ {exc} ]") - -if ayon_detected: - install_host(ayon_host) - - -@unreal.uclass() -class AyonIntegration(unreal.AyonPythonBridge): - @unreal.ufunction(override=True) - def RunInPython_Popup(self): - unreal.log_warning("Ayon: showing tools popup") - if ayon_detected: - ayon_host.show_tools_popup() - - @unreal.ufunction(override=True) - def RunInPython_Dialog(self): - unreal.log_warning("Ayon: showing tools dialog") - if ayon_detected: - ayon_host.show_tools_dialog() diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/README.md b/openpype/hosts/unreal/integration/UE_4.27/Ayon/README.md deleted file mode 100644 index 77ae8c7e98..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Ayon Unreal Integration plugin - UE 4.x - -This is plugin for Unreal Editor, creating menu for [Ayon](https://github.com/ynput/OpenPype) tools to run. diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Resources/ayon128.png b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Resources/ayon128.png deleted file mode 100644 index 799d849aa3163ecb16be39c641a6ac30324906b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2358 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 D;gw7~ diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Resources/ayon512.png b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Resources/ayon512.png deleted file mode 100644 index 990d5917e232a0644820428fb2790943de5ffaa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16705 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"LevelEditor"); - - TSharedPtr MenuExtender = MakeShareable(new FExtender()); - TSharedPtr ToolbarExtender = MakeShareable(new FExtender()); - - MenuExtender->AddMenuExtension( - "LevelEditor", - EExtensionHook::After, - NULL, - FMenuExtensionDelegate::CreateRaw(this, &FAyonModule::AddMenuEntry) - ); - ToolbarExtender->AddToolBarExtension( - "Settings", - EExtensionHook::After, - NULL, - FToolBarExtensionDelegate::CreateRaw(this, &FAyonModule::AddToobarEntry)); - - - LevelEditorModule.GetMenuExtensibilityManager()->AddExtender(MenuExtender); - LevelEditorModule.GetToolBarExtensibilityManager()->AddExtender(ToolbarExtender); - - RegisterSettings(); - } -} - -void FAyonModule::ShutdownModule() -{ - FAyonStyle::Shutdown(); -} - - -void FAyonModule::AddMenuEntry(FMenuBuilder& MenuBuilder) -{ - // Create Section - MenuBuilder.BeginSection("Ayon", TAttribute(FText::FromString("Ayon"))); - { - // Create a Submenu inside of the Section - MenuBuilder.AddMenuEntry( - FText::FromString("Tools..."), - FText::FromString("Pipeline tools"), - FSlateIcon(FAyonStyle::GetStyleSetName(), "Ayon.Logo"), - FUIAction(FExecuteAction::CreateRaw(this, &FAyonModule::MenuPopup)) - ); - - MenuBuilder.AddMenuEntry( - FText::FromString("Tools dialog..."), - FText::FromString("Pipeline tools dialog"), - FSlateIcon(FAyonStyle::GetStyleSetName(), "Ayon.Logo"), - FUIAction(FExecuteAction::CreateRaw(this, &FAyonModule::MenuDialog)) - ); - } - MenuBuilder.EndSection(); -} - -void FAyonModule::AddToobarEntry(FToolBarBuilder& ToolbarBuilder) -{ - ToolbarBuilder.BeginSection(TEXT("Ayon")); - { - ToolbarBuilder.AddToolBarButton( - FUIAction( - FExecuteAction::CreateRaw(this, &FAyonModule::MenuPopup), - NULL, - FIsActionChecked() - - ), - NAME_None, - LOCTEXT("Ayon_label", "Ayon"), - LOCTEXT("Ayon_tooltip", "Ayon Tools"), - FSlateIcon(FAyonStyle::GetStyleSetName(), "Ayon.Logo") - ); - } - ToolbarBuilder.EndSection(); -} - -void FAyonModule::RegisterSettings() -{ - ISettingsModule& SettingsModule = FModuleManager::LoadModuleChecked("Settings"); - - // Create the new category - // TODO: After the movement of the plugin from the game to editor, it might be necessary to move this! - ISettingsContainerPtr SettingsContainer = SettingsModule.GetContainer("Project"); - - UAyonSettings* Settings = GetMutableDefault(); - - // Register the settings - ISettingsSectionPtr SettingsSection = SettingsModule.RegisterSettings("Project", "Ayon", "General", - LOCTEXT("RuntimeGeneralSettingsName", - "General"), - LOCTEXT("RuntimeGeneralSettingsDescription", - "Base configuration for Open Pype Module"), - Settings - ); - - // Register the save handler to your settings, you might want to use it to - // validate those or just act to settings changes. - if (SettingsSection.IsValid()) - { - SettingsSection->OnModified().BindRaw(this, &FAyonModule::HandleSettingsSaved); - } -} - -bool FAyonModule::HandleSettingsSaved() -{ - UAyonSettings* Settings = GetMutableDefault(); - bool ResaveSettings = false; - - // You can put any validation code in here and resave the settings in case an invalid - // value has been entered - - if (ResaveSettings) - { - Settings->SaveConfig(); - } - - return true; -} - - -void FAyonModule::MenuPopup() -{ - UAyonPythonBridge* bridge = UAyonPythonBridge::Get(); - bridge->RunInPython_Popup(); -} - -void FAyonModule::MenuDialog() -{ - UAyonPythonBridge* bridge = UAyonPythonBridge::Get(); - bridge->RunInPython_Dialog(); -} - -IMPLEMENT_MODULE(FAyonModule, Ayon) diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp deleted file mode 100644 index e3989eb03c..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp +++ /dev/null @@ -1,114 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#include "AyonAssetContainer.h" -#include "AssetRegistryModule.h" -#include "Misc/PackageName.h" -#include "Containers/UnrealString.h" - -UAyonAssetContainer::UAyonAssetContainer(const FObjectInitializer& ObjectInitializer) -: UAssetUserData(ObjectInitializer) -{ - FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); - FString path = UAyonAssetContainer::GetPathName(); - UE_LOG(LogTemp, Warning, TEXT("UAyonAssetContainer %s"), *path); - FARFilter Filter; - Filter.PackagePaths.Add(FName(*path)); - - AssetRegistryModule.Get().OnAssetAdded().AddUObject(this, &UAyonAssetContainer::OnAssetAdded); - AssetRegistryModule.Get().OnAssetRemoved().AddUObject(this, &UAyonAssetContainer::OnAssetRemoved); - AssetRegistryModule.Get().OnAssetRenamed().AddUObject(this, &UAyonAssetContainer::OnAssetRenamed); -} - -void UAyonAssetContainer::OnAssetAdded(const FAssetData& AssetData) -{ - TArray split; - - // get directory of current container - FString selfFullPath = UAyonAssetContainer::GetPathName(); - FString selfDir = FPackageName::GetLongPackagePath(*selfFullPath); - - // get asset path and class - FString assetPath = AssetData.GetFullName(); - FString assetFName = AssetData.AssetClass.ToString(); - - // split path - assetPath.ParseIntoArray(split, TEXT(" "), true); - - FString assetDir = FPackageName::GetLongPackagePath(*split[1]); - - // take interest only in paths starting with path of current container - if (assetDir.StartsWith(*selfDir)) - { - // exclude self - if (assetFName != "AyonAssetContainer") - { - assets.Add(assetPath); - assetsData.Add(AssetData); - UE_LOG(LogTemp, Log, TEXT("%s: asset added to %s"), *selfFullPath, *selfDir); - } - } -} - -void UAyonAssetContainer::OnAssetRemoved(const FAssetData& AssetData) -{ - TArray split; - - // get directory of current container - FString selfFullPath = UAyonAssetContainer::GetPathName(); - FString selfDir = FPackageName::GetLongPackagePath(*selfFullPath); - - // get asset path and class - FString assetPath = AssetData.GetFullName(); - FString assetFName = AssetData.AssetClass.ToString(); - - // split path - assetPath.ParseIntoArray(split, TEXT(" "), true); - - FString assetDir = FPackageName::GetLongPackagePath(*split[1]); - - // take interest only in paths starting with path of current container - FString path = UAyonAssetContainer::GetPathName(); - FString lpp = FPackageName::GetLongPackagePath(*path); - - if (assetDir.StartsWith(*selfDir)) - { - // exclude self - if (assetFName != "AyonAssetContainer") - { - // UE_LOG(LogTemp, Warning, TEXT("%s: asset removed"), *lpp); - assets.Remove(assetPath); - assetsData.Remove(AssetData); - } - } -} - -void UAyonAssetContainer::OnAssetRenamed(const FAssetData& AssetData, const FString& str) -{ - TArray split; - - // get directory of current container - FString selfFullPath = UAyonAssetContainer::GetPathName(); - FString selfDir = FPackageName::GetLongPackagePath(*selfFullPath); - - // get asset path and class - FString assetPath = AssetData.GetFullName(); - FString assetFName = AssetData.AssetClass.ToString(); - - // split path - assetPath.ParseIntoArray(split, TEXT(" "), true); - - FString assetDir = FPackageName::GetLongPackagePath(*split[1]); - if (assetDir.StartsWith(*selfDir)) - { - // exclude self - if (assetFName != "AyonAssetContainer") - { - - assets.Remove(str); - assets.Add(assetPath); - assetsData.Remove(AssetData); - // UE_LOG(LogTemp, Warning, TEXT("%s: asset renamed %s"), *lpp, *str); - } - } -} - diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp deleted file mode 100644 index 086fc1036e..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "AyonAssetContainerFactory.h" -#include "AyonAssetContainer.h" - -UAyonAssetContainerFactory::UAyonAssetContainerFactory(const FObjectInitializer& ObjectInitializer) - : UFactory(ObjectInitializer) -{ - SupportedClass = UAyonAssetContainer::StaticClass(); - bCreateNew = false; - bEditorImport = true; -} - -UObject* UAyonAssetContainerFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) -{ - UAyonAssetContainer* AssetContainer = NewObject(InParent, Class, Name, Flags); - return AssetContainer; -} - -bool UAyonAssetContainerFactory::ShouldShowInNewMenu() const { - return false; -} diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonLib.cpp b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonLib.cpp deleted file mode 100644 index bff99caee3..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonLib.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#include "AyonLib.h" - -#include "AssetViewUtils.h" -#include "Misc/Paths.h" -#include "Misc/ConfigCacheIni.h" -#include "UObject/UnrealType.h" - -/** - * Sets color on folder icon on given path - * @param InPath - path to folder - * @param InFolderColor - color of the folder - * @warning This color will appear only after Editor restart. Is there a better way? - */ - -bool UAyonLib::SetFolderColor(const FString& FolderPath, const FLinearColor& FolderColor, const bool& bForceAdd) -{ - if (AssetViewUtils::DoesFolderExist(FolderPath)) - { - const TSharedPtr LinearColor = MakeShared(FolderColor); - - AssetViewUtils::SaveColor(FolderPath, LinearColor, true); - UE_LOG(LogAssetData, Display, TEXT("A color {%s} has been set to folder \"%s\""), *LinearColor->ToString(), - *FolderPath) - return true; - } - - UE_LOG(LogAssetData, Display, TEXT("Setting a color {%s} to folder \"%s\" has failed! Directory doesn't exist!"), - *FolderColor.ToString(), *FolderPath) - return false; -} - -/** - * Returns all poperties on given object - * @param cls - class - * @return TArray of properties - */ -TArray UAyonLib::GetAllProperties(UClass* cls) -{ - TArray Ret; - if (cls != nullptr) - { - for (TFieldIterator It(cls); It; ++It) - { - FProperty* Property = *It; - if (Property->HasAnyPropertyFlags(EPropertyFlags::CPF_Edit)) - { - Ret.Add(Property->GetName()); - } - } - } - return Ret; -} diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp deleted file mode 100644 index d7550e2ed1..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "AyonPublishInstance.h" -#include "AssetRegistryModule.h" -#include "AyonLib.h" -#include "AyonSettings.h" -#include "Framework/Notifications/NotificationManager.h" -#include "Widgets/Notifications/SNotificationList.h" - -//Moves all the invalid pointers to the end to prepare them for the shrinking -#define REMOVE_INVALID_ENTRIES(VAR) VAR.CompactStable(); \ - VAR.Shrink(); - -UAyonPublishInstance::UAyonPublishInstance(const FObjectInitializer& ObjectInitializer) - : UPrimaryDataAsset(ObjectInitializer) -{ - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked< - FAssetRegistryModule>("AssetRegistry"); - - const FPropertyEditorModule& PropertyEditorModule = FModuleManager::LoadModuleChecked( - "PropertyEditor"); - - FString Left, Right; - GetPathName().Split("/" + GetName(), &Left, &Right); - - FARFilter Filter; - Filter.PackagePaths.Emplace(FName(Left)); - - TArray FoundAssets; - AssetRegistryModule.GetRegistry().GetAssets(Filter, FoundAssets); - - for (const FAssetData& AssetData : FoundAssets) - OnAssetCreated(AssetData); - - REMOVE_INVALID_ENTRIES(AssetDataInternal) - REMOVE_INVALID_ENTRIES(AssetDataExternal) - - AssetRegistryModule.Get().OnAssetAdded().AddUObject(this, &UAyonPublishInstance::OnAssetCreated); - AssetRegistryModule.Get().OnAssetRemoved().AddUObject(this, &UAyonPublishInstance::OnAssetRemoved); - AssetRegistryModule.Get().OnAssetUpdated().AddUObject(this, &UAyonPublishInstance::OnAssetUpdated); - -#ifdef WITH_EDITOR - ColorAyonDirs(); -#endif - -} - -void UAyonPublishInstance::OnAssetCreated(const FAssetData& InAssetData) -{ - TArray split; - - UObject* Asset = InAssetData.GetAsset(); - - if (!IsValid(Asset)) - { - UE_LOG(LogAssetData, Warning, TEXT("Asset \"%s\" is not valid! Skipping the addition."), - *InAssetData.ObjectPath.ToString()); - return; - } - - const bool result = IsUnderSameDir(Asset) && Cast(Asset) == nullptr; - - if (result) - { - if (AssetDataInternal.Emplace(Asset).IsValidId()) - { - UE_LOG(LogTemp, Log, TEXT("Added an Asset to PublishInstance - Publish Instance: %s, Asset %s"), - *this->GetName(), *Asset->GetName()); - } - } -} - -void UAyonPublishInstance::OnAssetRemoved(const FAssetData& InAssetData) -{ - if (Cast(InAssetData.GetAsset()) == nullptr) - { - if (AssetDataInternal.Contains(nullptr)) - { - AssetDataInternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataInternal) - } - else - { - AssetDataExternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataExternal) - } - } -} - -void UAyonPublishInstance::OnAssetUpdated(const FAssetData& InAssetData) -{ - REMOVE_INVALID_ENTRIES(AssetDataInternal); - REMOVE_INVALID_ENTRIES(AssetDataExternal); -} - -bool UAyonPublishInstance::IsUnderSameDir(const UObject* InAsset) const -{ - FString ThisLeft, ThisRight; - this->GetPathName().Split(this->GetName(), &ThisLeft, &ThisRight); - - return InAsset->GetPathName().StartsWith(ThisLeft); -} - -#ifdef WITH_EDITOR - -void UAyonPublishInstance::ColorAyonDirs() -{ - FString PathName = this->GetPathName(); - - //Check whether the path contains the defined Ayon folder - if (!PathName.Contains(TEXT("Ayon"))) return; - - //Get the base path for open pype - FString PathLeft, PathRight; - PathName.Split(FString("Ayon"), &PathLeft, &PathRight); - - if (PathLeft.IsEmpty() || PathRight.IsEmpty()) - { - UE_LOG(LogAssetData, Error, TEXT("Failed to retrieve the base Ayon directory!")) - return; - } - - PathName.RemoveFromEnd(PathRight, ESearchCase::CaseSensitive); - - //Get the current settings - const UAyonSettings* Settings = GetMutableDefault(); - - //Color the base folder - UAyonLib::SetFolderColor(PathName, Settings->GetFolderFColor(), false); - - //Get Sub paths, iterate through them and color them according to the folder color in UAyonSettings - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked( - "AssetRegistry"); - - TArray PathList; - - AssetRegistryModule.Get().GetSubPaths(PathName, PathList, true); - - if (PathList.Num() > 0) - { - for (const FString& Path : PathList) - { - UAyonLib::SetFolderColor(Path, Settings->GetFolderFColor(), false); - } - } -} - -void UAyonPublishInstance::SendNotification(const FString& Text) const -{ - FNotificationInfo Info{FText::FromString(Text)}; - - Info.bFireAndForget = true; - Info.bUseLargeFont = false; - Info.bUseThrobber = false; - Info.bUseSuccessFailIcons = false; - Info.ExpireDuration = 4.f; - Info.FadeOutDuration = 2.f; - - FSlateNotificationManager::Get().AddNotification(Info); - - UE_LOG(LogAssetData, Warning, - TEXT( - "Removed duplicated asset from the AssetsDataExternal in Container \"%s\", Asset is already included in the AssetDataInternal!" - ), *GetName() - ) -} - - -void UAyonPublishInstance::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - - if (PropertyChangedEvent.ChangeType == EPropertyChangeType::ValueSet && - PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED( - UAyonPublishInstance, AssetDataExternal)) - { - // Check for duplicated assets - for (const auto& Asset : AssetDataInternal) - { - if (AssetDataExternal.Contains(Asset)) - { - AssetDataExternal.Remove(Asset); - return SendNotification( - "You are not allowed to add assets into AssetDataExternal which are already included in AssetDataInternal!"); - } - } - - // Check if no UAyonPublishInstance type assets are included - for (const auto& Asset : AssetDataExternal) - { - if (Cast(Asset.Get()) != nullptr) - { - AssetDataExternal.Remove(Asset); - return SendNotification("You are not allowed to add publish instances!"); - } - } - } -} - -#endif diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp deleted file mode 100644 index f79c428a6d..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#include "AyonPublishInstanceFactory.h" -#include "AyonPublishInstance.h" - -UAyonPublishInstanceFactory::UAyonPublishInstanceFactory(const FObjectInitializer& ObjectInitializer) - : UFactory(ObjectInitializer) -{ - SupportedClass = UAyonPublishInstance::StaticClass(); - bCreateNew = false; - bEditorImport = true; -} - -UObject* UAyonPublishInstanceFactory::FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) -{ - check(InClass->IsChildOf(UAyonPublishInstance::StaticClass())); - return NewObject(InParent, InClass, InName, Flags); -} - -bool UAyonPublishInstanceFactory::ShouldShowInNewMenu() const { - return false; -} diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp deleted file mode 100644 index 0ed4b2f704..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#include "AyonPythonBridge.h" - -UAyonPythonBridge* UAyonPythonBridge::Get() -{ - TArray AyonPythonBridgeClasses; - GetDerivedClasses(UAyonPythonBridge::StaticClass(), AyonPythonBridgeClasses); - int32 NumClasses = AyonPythonBridgeClasses.Num(); - if (NumClasses > 0) - { - return Cast(AyonPythonBridgeClasses[NumClasses - 1]->GetDefaultObject()); - } - return nullptr; -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonSettings.cpp b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonSettings.cpp deleted file mode 100644 index 509b7268ba..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonSettings.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#include "AyonSettings.h" - -#include "Interfaces/IPluginManager.h" - -/** - * Mainly is used for initializing default values if the DefaultAyonSettings.ini file does not exist in the saved config - */ -UAyonSettings::UAyonSettings(const FObjectInitializer& ObjectInitializer) -{ - - const FString ConfigFilePath = AYON_SETTINGS_FILEPATH; - - // This has to be probably in the future set using the UE Reflection system - FColor Color; - GConfig->GetColor(TEXT("/Script/Ayon.AyonSettings"), TEXT("FolderColor"), Color, ConfigFilePath); - - FolderColor = Color; -} diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonStyle.cpp b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonStyle.cpp deleted file mode 100644 index b133225fd5..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/AyonStyle.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#include "AyonStyle.h" -#include "Framework/Application/SlateApplication.h" -#include "Styling/SlateStyle.h" -#include "Styling/SlateStyleRegistry.h" - - -TUniquePtr< FSlateStyleSet > FAyonStyle::AyonStyleInstance = nullptr; - -void FAyonStyle::Initialize() -{ - if (!AyonStyleInstance.IsValid()) - { - AyonStyleInstance = Create(); - FSlateStyleRegistry::RegisterSlateStyle(*AyonStyleInstance); - } -} - -void FAyonStyle::Shutdown() -{ - if (AyonStyleInstance.IsValid()) - { - FSlateStyleRegistry::UnRegisterSlateStyle(*AyonStyleInstance); - AyonStyleInstance.Reset(); - } -} - -FName FAyonStyle::GetStyleSetName() -{ - static FName StyleSetName(TEXT("AyonStyle")); - return StyleSetName; -} - -FName FAyonStyle::GetContextName() -{ - static FName ContextName(TEXT("Ayon")); - return ContextName; -} - -#define IMAGE_BRUSH(RelativePath, ...) FSlateImageBrush( Style->RootToContentDir( RelativePath, TEXT(".png") ), __VA_ARGS__ ) - -const FVector2D Icon40x40(40.0f, 40.0f); - -TUniquePtr< FSlateStyleSet > FAyonStyle::Create() -{ - TUniquePtr< FSlateStyleSet > Style = MakeUnique(GetStyleSetName()); - Style->SetContentRoot(FPaths::EnginePluginsDir() / TEXT("Marketplace/Ayon/Resources")); - - return Style; -} - -void FAyonStyle::SetIcon(const FString& StyleName, const FString& ResourcePath) -{ - FSlateStyleSet* Style = AyonStyleInstance.Get(); - - FString Name(GetContextName().ToString()); - Name = Name + "." + StyleName; - Style->Set(*Name, new FSlateImageBrush(Style->RootToContentDir(ResourcePath, TEXT(".png")), Icon40x40)); - - - FSlateApplication::Get().GetRenderer()->ReloadTextureResources(); -} - -#undef IMAGE_BRUSH - -const ISlateStyle& FAyonStyle::Get() -{ - check(AyonStyleInstance); - return *AyonStyleInstance; -} diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp deleted file mode 100644 index 49376e8648..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - - -#include "Commandlets/AyonActionResult.h" -#include "Logging/Ayon_Log.h" - -EAyon_ActionResult::Type& FAyon_ActionResult::GetStatus() -{ - return Status; -} - -FText& FAyon_ActionResult::GetReason() -{ - return Reason; -} - -FAyon_ActionResult::FAyon_ActionResult():Status(EAyon_ActionResult::Type::Ok) -{ - -} - -FAyon_ActionResult::FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum):Status(InEnum) -{ - TryLog(); -} - -FAyon_ActionResult::FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum, const FText& InReason):Status(InEnum), Reason(InReason) -{ - TryLog(); -}; - -bool FAyon_ActionResult::IsProblem() const -{ - return Status != EAyon_ActionResult::Ok; -} - -void FAyon_ActionResult::TryLog() const -{ - if(IsProblem()) - UE_LOG(LogCommandletOPGenerateProject, Error, TEXT("%s"), *Reason.ToString()); -} diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp deleted file mode 100644 index 0328d3b7e6..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#include "Commandlets/Implementations/AyonGenerateProjectCommandlet.h" - -#include "Editor.h" -#include "GameProjectUtils.h" -#include "AyonConstants.h" -#include "Commandlets/AyonActionResult.h" -#include "ProjectDescriptor.h" - -int32 UAyonGenerateProjectCommandlet::Main(const FString& CommandLineParams) -{ - //Parses command line parameters & creates structure FProjectInformation - const FAyonGenerateProjectParams ParsedParams = FAyonGenerateProjectParams(CommandLineParams); - ProjectInformation = ParsedParams.GenerateUEProjectInformation(); - - //Creates .uproject & other UE files - EVALUATE_AYON_ACTION_RESULT(TryCreateProject()); - - //Loads created .uproject - EVALUATE_AYON_ACTION_RESULT(TryLoadProjectDescriptor()); - - //Adds needed plugin to .uproject - AttachPluginsToProjectDescriptor(); - - //Saves .uproject - EVALUATE_AYON_ACTION_RESULT(TrySave()); - - //When we are here, there should not be problems in generating Unreal Project for Ayon - return 0; -} - - -FAyonGenerateProjectParams::FAyonGenerateProjectParams(): FAyonGenerateProjectParams("") -{ -} - -FAyonGenerateProjectParams::FAyonGenerateProjectParams(const FString& CommandLineParams): CommandLineParams( - CommandLineParams) -{ - UCommandlet::ParseCommandLine(*CommandLineParams, Tokens, Switches); -} - -FProjectInformation FAyonGenerateProjectParams::GenerateUEProjectInformation() const -{ - FProjectInformation ProjectInformation = FProjectInformation(); - ProjectInformation.ProjectFilename = GetProjectFileName(); - - ProjectInformation.bShouldGenerateCode = IsSwitchPresent("GenerateCode"); - - return ProjectInformation; -} - -FString FAyonGenerateProjectParams::TryGetToken(const int32 Index) const -{ - return Tokens.IsValidIndex(Index) ? Tokens[Index] : ""; -} - -FString FAyonGenerateProjectParams::GetProjectFileName() const -{ - return TryGetToken(0); -} - -bool FAyonGenerateProjectParams::IsSwitchPresent(const FString& Switch) const -{ - return INDEX_NONE != Switches.IndexOfByPredicate([&Switch](const FString& Item) -> bool - { - return Item.Equals(Switch); - } - ); -} - - -UAyonGenerateProjectCommandlet::UAyonGenerateProjectCommandlet() -{ - LogToConsole = true; -} - -FAyon_ActionResult UAyonGenerateProjectCommandlet::TryCreateProject() const -{ - FText FailReason; - FText FailLog; - TArray OutCreatedFiles; - - if (!GameProjectUtils::CreateProject(ProjectInformation, FailReason, FailLog, &OutCreatedFiles)) - return FAyon_ActionResult(EAyon_ActionResult::ProjectNotCreated, FailReason); - return FAyon_ActionResult(); -} - -FAyon_ActionResult UAyonGenerateProjectCommandlet::TryLoadProjectDescriptor() -{ - FText FailReason; - const bool bLoaded = ProjectDescriptor.Load(ProjectInformation.ProjectFilename, FailReason); - - return FAyon_ActionResult(bLoaded ? EAyon_ActionResult::Ok : EAyon_ActionResult::ProjectNotLoaded, FailReason); -} - -void UAyonGenerateProjectCommandlet::AttachPluginsToProjectDescriptor() -{ - FPluginReferenceDescriptor AyonPluginDescriptor; - AyonPluginDescriptor.bEnabled = true; - AyonPluginDescriptor.Name = AyonConstants::Ayon_PluginName; - ProjectDescriptor.Plugins.Add(AyonPluginDescriptor); - - FPluginReferenceDescriptor PythonPluginDescriptor; - PythonPluginDescriptor.bEnabled = true; - PythonPluginDescriptor.Name = AyonConstants::PythonScript_PluginName; - ProjectDescriptor.Plugins.Add(PythonPluginDescriptor); - - FPluginReferenceDescriptor SequencerScriptingPluginDescriptor; - SequencerScriptingPluginDescriptor.bEnabled = true; - SequencerScriptingPluginDescriptor.Name = AyonConstants::SequencerScripting_PluginName; - ProjectDescriptor.Plugins.Add(SequencerScriptingPluginDescriptor); - - FPluginReferenceDescriptor MovieRenderPipelinePluginDescriptor; - MovieRenderPipelinePluginDescriptor.bEnabled = true; - MovieRenderPipelinePluginDescriptor.Name = AyonConstants::MovieRenderPipeline_PluginName; - ProjectDescriptor.Plugins.Add(MovieRenderPipelinePluginDescriptor); - - FPluginReferenceDescriptor EditorScriptingPluginDescriptor; - EditorScriptingPluginDescriptor.bEnabled = true; - EditorScriptingPluginDescriptor.Name = AyonConstants::EditorScriptingUtils_PluginName; - ProjectDescriptor.Plugins.Add(EditorScriptingPluginDescriptor); -} - -FAyon_ActionResult UAyonGenerateProjectCommandlet::TrySave() -{ - FText FailReason; - const bool bSaved = ProjectDescriptor.Save(ProjectInformation.ProjectFilename, FailReason); - - return FAyon_ActionResult(bSaved ? EAyon_ActionResult::Ok : EAyon_ActionResult::ProjectNotSaved, FailReason); -} - -FAyonGenerateProjectParams UAyonGenerateProjectCommandlet::ParseParameters(const FString& Params) const -{ - FAyonGenerateProjectParams ParamsResult; - - TArray Tokens, Switches; - ParseCommandLine(*Params, Tokens, Switches); - - return ParamsResult; -} diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp deleted file mode 100644 index 320285591e..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "OpenPypePublishInstance.h" -#include "AssetRegistryModule.h" -#include "AyonLib.h" -#include "AyonSettings.h" -#include "Framework/Notifications/NotificationManager.h" -#include "Widgets/Notifications/SNotificationList.h" - -//Moves all the invalid pointers to the end to prepare them for the shrinking -#define REMOVE_INVALID_ENTRIES(VAR) VAR.CompactStable(); \ - VAR.Shrink(); - -UOpenPypePublishInstance::UOpenPypePublishInstance(const FObjectInitializer& ObjectInitializer) - : UPrimaryDataAsset(ObjectInitializer) -{ - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked< - FAssetRegistryModule>("AssetRegistry"); - - const FPropertyEditorModule& PropertyEditorModule = FModuleManager::LoadModuleChecked( - "PropertyEditor"); - - FString Left, Right; - GetPathName().Split("/" + GetName(), &Left, &Right); - - FARFilter Filter; - Filter.PackagePaths.Emplace(FName(Left)); - - TArray FoundAssets; - AssetRegistryModule.GetRegistry().GetAssets(Filter, FoundAssets); - - for (const FAssetData& AssetData : FoundAssets) - OnAssetCreated(AssetData); - - REMOVE_INVALID_ENTRIES(AssetDataInternal) - REMOVE_INVALID_ENTRIES(AssetDataExternal) - - AssetRegistryModule.Get().OnAssetAdded().AddUObject(this, &UOpenPypePublishInstance::OnAssetCreated); - AssetRegistryModule.Get().OnAssetRemoved().AddUObject(this, &UOpenPypePublishInstance::OnAssetRemoved); - AssetRegistryModule.Get().OnAssetUpdated().AddUObject(this, &UOpenPypePublishInstance::OnAssetUpdated); - -#ifdef WITH_EDITOR - ColorOpenPypeDirs(); -#endif - -} - -void UOpenPypePublishInstance::OnAssetCreated(const FAssetData& InAssetData) -{ - TArray split; - - UObject* Asset = InAssetData.GetAsset(); - - if (!IsValid(Asset)) - { - UE_LOG(LogAssetData, Warning, TEXT("Asset \"%s\" is not valid! Skipping the addition."), - *InAssetData.ObjectPath.ToString()); - return; - } - - const bool result = IsUnderSameDir(Asset) && Cast(Asset) == nullptr; - - if (result) - { - if (AssetDataInternal.Emplace(Asset).IsValidId()) - { - UE_LOG(LogTemp, Log, TEXT("Added an Asset to PublishInstance - Publish Instance: %s, Asset %s"), - *this->GetName(), *Asset->GetName()); - } - } -} - -void UOpenPypePublishInstance::OnAssetRemoved(const FAssetData& InAssetData) -{ - if (Cast(InAssetData.GetAsset()) == nullptr) - { - if (AssetDataInternal.Contains(nullptr)) - { - AssetDataInternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataInternal) - } - else - { - AssetDataExternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataExternal) - } - } -} - -void UOpenPypePublishInstance::OnAssetUpdated(const FAssetData& InAssetData) -{ - REMOVE_INVALID_ENTRIES(AssetDataInternal); - REMOVE_INVALID_ENTRIES(AssetDataExternal); -} - -bool UOpenPypePublishInstance::IsUnderSameDir(const UObject* InAsset) const -{ - FString ThisLeft, ThisRight; - this->GetPathName().Split(this->GetName(), &ThisLeft, &ThisRight); - - return InAsset->GetPathName().StartsWith(ThisLeft); -} - -#ifdef WITH_EDITOR - -void UOpenPypePublishInstance::ColorOpenPypeDirs() -{ - FString PathName = this->GetPathName(); - - //Check whether the path contains the defined OpenPype folder - if (!PathName.Contains(TEXT("OpenPype"))) return; - - //Get the base path for open pype - FString PathLeft, PathRight; - PathName.Split(FString("OpenPype"), &PathLeft, &PathRight); - - if (PathLeft.IsEmpty() || PathRight.IsEmpty()) - { - UE_LOG(LogAssetData, Error, TEXT("Failed to retrieve the base OpenPype directory!")) - return; - } - - PathName.RemoveFromEnd(PathRight, ESearchCase::CaseSensitive); - - //Get the current settings - const UAyonSettings* Settings = GetMutableDefault(); - - //Color the base folder - UAyonLib::SetFolderColor(PathName, Settings->GetFolderFColor(), false); - - //Get Sub paths, iterate through them and color them according to the folder color in UAyonSettings - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked( - "AssetRegistry"); - - TArray PathList; - - AssetRegistryModule.Get().GetSubPaths(PathName, PathList, true); - - if (PathList.Num() > 0) - { - for (const FString& Path : PathList) - { - UAyonLib::SetFolderColor(Path, Settings->GetFolderFColor(), false); - } - } -} - -void UOpenPypePublishInstance::SendNotification(const FString& Text) const -{ - FNotificationInfo Info{FText::FromString(Text)}; - - Info.bFireAndForget = true; - Info.bUseLargeFont = false; - Info.bUseThrobber = false; - Info.bUseSuccessFailIcons = false; - Info.ExpireDuration = 4.f; - Info.FadeOutDuration = 2.f; - - FSlateNotificationManager::Get().AddNotification(Info); - - UE_LOG(LogAssetData, Warning, - TEXT( - "Removed duplicated asset from the AssetsDataExternal in Container \"%s\", Asset is already included in the AssetDataInternal!" - ), *GetName() - ) -} - - -void UOpenPypePublishInstance::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - - if (PropertyChangedEvent.ChangeType == EPropertyChangeType::ValueSet && - PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED( - UOpenPypePublishInstance, AssetDataExternal)) - { - // Check for duplicated assets - for (const auto& Asset : AssetDataInternal) - { - if (AssetDataExternal.Contains(Asset)) - { - AssetDataExternal.Remove(Asset); - return SendNotification( - "You are not allowed to add assets into AssetDataExternal which are already included in AssetDataInternal!"); - } - } - - // Check if no UOpenPypePublishInstance type assets are included - for (const auto& Asset : AssetDataExternal) - { - if (Cast(Asset.Get()) != nullptr) - { - AssetDataExternal.Remove(Asset); - return SendNotification("You are not allowed to add publish instances!"); - } - } - } -} - -#endif diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Ayon.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Ayon.h deleted file mode 100644 index d11af70058..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Ayon.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#pragma once - - -class FAyonModule : public IModuleInterface -{ -public: - virtual void StartupModule() override; - virtual void ShutdownModule() override; - -private: - void RegisterSettings(); - bool HandleSettingsSaved(); - - void AddMenuEntry(FMenuBuilder& MenuBuilder); - void AddToobarEntry(FToolBarBuilder& ToolbarBuilder); - void MenuPopup(); - void MenuDialog(); -}; diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonAssetContainer.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonAssetContainer.h deleted file mode 100644 index cc17b3960a..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonAssetContainer.h +++ /dev/null @@ -1,39 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "UObject/NoExportTypes.h" -#include "Engine/AssetUserData.h" -#include "AssetData.h" -#include "AyonAssetContainer.generated.h" - -/** - * - */ -UCLASS(Blueprintable) -class AYON_API UAyonAssetContainer : public UAssetUserData -{ - GENERATED_BODY() - -public: - - UAyonAssetContainer(const FObjectInitializer& ObjectInitalizer); - // ~UAyonAssetContainer(); - - UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Assets") - TArray assets; - - // There seems to be no reflection option to expose array of FAssetData - /* - UPROPERTY(Transient, BlueprintReadOnly, Category = "Python", meta=(DisplayName="Assets Data")) - TArray assetsData; - */ -private: - TArray assetsData; - void OnAssetAdded(const FAssetData& AssetData); - void OnAssetRemoved(const FAssetData& AssetData); - void OnAssetRenamed(const FAssetData& AssetData, const FString& str); -}; - - diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h deleted file mode 100644 index 7c35897911..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h +++ /dev/null @@ -1,21 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "Factories/Factory.h" -#include "AyonAssetContainerFactory.generated.h" - -/** - * - */ -UCLASS() -class AYON_API UAyonAssetContainerFactory : public UFactory -{ - GENERATED_BODY() - -public: - UAyonAssetContainerFactory(const FObjectInitializer& ObjectInitializer); - virtual UObject* FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override; - virtual bool ShouldShowInNewMenu() const override; -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonConstants.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonConstants.h deleted file mode 100644 index 6a02b5682f..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonConstants.h +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - -#include "CoreMinimal.h" - -namespace AyonConstants -{ - const FString Ayon_PluginName = "Ayon"; - const FString PythonScript_PluginName = "PythonScriptPlugin"; - const FString SequencerScripting_PluginName = "SequencerScripting"; - const FString MovieRenderPipeline_PluginName = "MovieRenderPipeline"; - const FString EditorScriptingUtils_PluginName = "EditorScriptingUtilities"; -} - - diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonLib.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonLib.h deleted file mode 100644 index da83b448fb..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonLib.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - -#include "AyonLib.generated.h" - - -UCLASS(Blueprintable) -class AYON_API UAyonLib : public UBlueprintFunctionLibrary -{ - - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, Category = Python) - static bool SetFolderColor(const FString& FolderPath, const FLinearColor& FolderColor,const bool& bForceAdd); - - UFUNCTION(BlueprintCallable, Category = Python) - static TArray GetAllProperties(UClass* cls); -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPublishInstance.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPublishInstance.h deleted file mode 100644 index 0a0628c3ec..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPublishInstance.h +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "AyonPublishInstance.generated.h" - - -UCLASS(Blueprintable) -class AYON_API UAyonPublishInstance : public UPrimaryDataAsset -{ - GENERATED_UCLASS_BODY() - -public: - /** - * Retrieves all the assets which are monitored by the Publish Instance (Monitors assets in the directory which is - * placed in) - * - * @return - Set of UObjects. Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetInternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataInternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Retrieves all the assets which have been added manually by the Publish Instance - * - * @return - TSet of assets (UObjects). Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetExternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataExternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Function for returning all the assets in the container combined. - * - * @return Returns all the internal and externally added assets into one set (TSet of UObjects). Careful! They are - * returning raw pointers. Seems like an issue in UE5 - * - * @attention If the bAddExternalAssets variable is false, external assets won't be included! - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetAllAssets() const - { - const TSet>& IteratedSet = bAddExternalAssets - ? AssetDataInternal.Union(AssetDataExternal) - : AssetDataInternal; - - //Create a new TSet only with raw pointers. - TSet ResultSet; - - for (auto& Asset : IteratedSet) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - -private: - UPROPERTY(VisibleAnywhere, Category="Assets") - TSet> AssetDataInternal; - - /** - * This property allows exposing the array to include other assets from any other directory than what it's currently - * monitoring. NOTE: that these assets have to be added manually! They are not automatically registered or added! - */ - UPROPERTY(EditAnywhere, Category = "Assets") - bool bAddExternalAssets = false; - - UPROPERTY(EditAnywhere, meta=(EditCondition="bAddExternalAssets"), Category="Assets") - TSet> AssetDataExternal; - - - void OnAssetCreated(const FAssetData& InAssetData); - void OnAssetRemoved(const FAssetData& InAssetData); - void OnAssetUpdated(const FAssetData& InAssetData); - - bool IsUnderSameDir(const UObject* InAsset) const; - -#ifdef WITH_EDITOR - - void ColorAyonDirs(); - - void SendNotification(const FString& Text) const; - virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; - -#endif -}; diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h deleted file mode 100644 index 3cef8e76b2..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "CoreMinimal.h" -#include "Factories/Factory.h" -#include "AyonPublishInstanceFactory.generated.h" - -/** - * - */ -UCLASS() -class AYON_API UAyonPublishInstanceFactory : public UFactory -{ - GENERATED_BODY() - -public: - UAyonPublishInstanceFactory(const FObjectInitializer& ObjectInitializer); - virtual UObject* FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override; - virtual bool ShouldShowInNewMenu() const override; -}; diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPythonBridge.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPythonBridge.h deleted file mode 100644 index 3c429fd7d3..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonPythonBridge.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once -#include "AyonPythonBridge.generated.h" - -UCLASS(Blueprintable) -class UAyonPythonBridge : public UObject -{ - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, Category = Python) - static UAyonPythonBridge* Get(); - - UFUNCTION(BlueprintImplementableEvent, Category = Python) - void RunInPython_Popup() const; - - UFUNCTION(BlueprintImplementableEvent, Category = Python) - void RunInPython_Dialog() const; - -}; diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonSettings.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonSettings.h deleted file mode 100644 index 7a93f107c5..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonSettings.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "AyonSettings.generated.h" - -#define AYON_SETTINGS_FILEPATH IPluginManager::Get().FindPlugin("Ayon")->GetBaseDir() / TEXT("Config") / TEXT("DefaultAyonSettings.ini") - -UCLASS(Config=AyonSettings, DefaultConfig) -class AYON_API UAyonSettings : public UObject -{ - GENERATED_UCLASS_BODY() - - UFUNCTION(BlueprintCallable, BlueprintPure, Category = Settings) - FColor GetFolderFColor() const - { - return FolderColor; - } - - UFUNCTION(BlueprintCallable, BlueprintPure, Category = Settings) - FLinearColor GetFolderFLinearColor() const - { - return FLinearColor(FolderColor); - } - -protected: - - UPROPERTY(config, EditAnywhere, Category = Folders) - FColor FolderColor = FColor(25,45,223); -}; diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonStyle.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonStyle.h deleted file mode 100644 index 188e4a510c..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/AyonStyle.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once -#include "CoreMinimal.h" - -class FSlateStyleSet; -class ISlateStyle; - - -class FAyonStyle -{ -public: - static void Initialize(); - static void Shutdown(); - static const ISlateStyle& Get(); - static FName GetStyleSetName(); - static FName GetContextName(); - - static void SetIcon(const FString& StyleName, const FString& ResourcePath); - -private: - static TUniquePtr< FSlateStyleSet > Create(); - static TUniquePtr< FSlateStyleSet > AyonStyleInstance; -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h deleted file mode 100644 index 4694055164..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "AyonActionResult.generated.h" - -/** - * @brief This macro returns error code when is problem or does nothing when there is no problem. - * @param ActionResult FAyon_ActionResult structure - */ -#define EVALUATE_AYON_ACTION_RESULT(ActionResult) \ - if(ActionResult.IsProblem()) \ - return ActionResult.GetStatus(); - -/** -* @brief This enum values are humanly readable mapping of error codes. -* Here should be all error codes to be possible find what went wrong. -* TODO: In the future should exists an web document where is mapped error code & what problem occured & how to repair it... -*/ -UENUM() -namespace EAyon_ActionResult -{ - enum Type - { - Ok, - ProjectNotCreated, - ProjectNotLoaded, - ProjectNotSaved, - //....Here insert another values - - //Do not remove! - //Usable for looping through enum values - __Last UMETA(Hidden) - }; -} - - -/** - * @brief This struct holds action result enum and optionally reason of fail - */ -USTRUCT() -struct FAyon_ActionResult -{ - GENERATED_BODY() - -public: - /** @brief Default constructor usable when there is no problem */ - FAyon_ActionResult(); - - /** - * @brief This constructor initializes variables & attempts to log when is error - * @param InEnum Status - */ - FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum); - - /** - * @brief This constructor initializes variables & attempts to log when is error - * @param InEnum Status - * @param InReason Reason of potential fail - */ - FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum, const FText& InReason); - -private: - /** @brief Action status */ - EAyon_ActionResult::Type Status; - - /** @brief Optional reason of fail */ - FText Reason; - -public: - /** - * @brief Checks if there is problematic state - * @return true when status is not equal to EAyon_ActionResult::Ok - */ - bool IsProblem() const; - EAyon_ActionResult::Type& GetStatus(); - FText& GetReason(); - -private: - void TryLog() const; -}; - diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h deleted file mode 100644 index cabd524b8c..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - -#include "GameProjectUtils.h" -#include "Commandlets/AyonActionResult.h" -#include "ProjectDescriptor.h" -#include "Commandlets/Commandlet.h" -#include "AyonGenerateProjectCommandlet.generated.h" - -struct FProjectDescriptor; -struct FProjectInformation; - -/** -* @brief Structure which parses command line parameters and generates FProjectInformation -*/ -USTRUCT() -struct FAyonGenerateProjectParams -{ - GENERATED_BODY() - -private: - FString CommandLineParams; - TArray Tokens; - TArray Switches; - -public: - FAyonGenerateProjectParams(); - FAyonGenerateProjectParams(const FString& CommandLineParams); - - FProjectInformation GenerateUEProjectInformation() const; - -private: - FString TryGetToken(const int32 Index) const; - FString GetProjectFileName() const; - - bool IsSwitchPresent(const FString& Switch) const; -}; - -UCLASS() -class AYON_API UAyonGenerateProjectCommandlet : public UCommandlet -{ - GENERATED_BODY() - -private: - FProjectInformation ProjectInformation; - FProjectDescriptor ProjectDescriptor; - -public: - UAyonGenerateProjectCommandlet(); - - virtual int32 Main(const FString& CommandLineParams) override; - -private: - FAyonGenerateProjectParams ParseParameters(const FString& Params) const; - FAyon_ActionResult TryCreateProject() const; - FAyon_ActionResult TryLoadProjectDescriptor(); - void AttachPluginsToProjectDescriptor(); - FAyon_ActionResult TrySave(); -}; - diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h deleted file mode 100644 index 21571afd02..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - -DEFINE_LOG_CATEGORY_STATIC(LogCommandletOPGenerateProject, Log, All); diff --git a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h b/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h deleted file mode 100644 index 4a7a6a3a9f..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "OpenPypePublishInstance.generated.h" - - -UCLASS(Blueprintable) -class AYON_API UOpenPypePublishInstance : public UPrimaryDataAsset -{ - GENERATED_UCLASS_BODY() - -public: - /** - * Retrieves all the assets which are monitored by the Publish Instance (Monitors assets in the directory which is - * placed in) - * - * @return - Set of UObjects. Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetInternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataInternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Retrieves all the assets which have been added manually by the Publish Instance - * - * @return - TSet of assets (UObjects). Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetExternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataExternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Function for returning all the assets in the container combined. - * - * @return Returns all the internal and externally added assets into one set (TSet of UObjects). Careful! They are - * returning raw pointers. Seems like an issue in UE5 - * - * @attention If the bAddExternalAssets variable is false, external assets won't be included! - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetAllAssets() const - { - const TSet>& IteratedSet = bAddExternalAssets - ? AssetDataInternal.Union(AssetDataExternal) - : AssetDataInternal; - - //Create a new TSet only with raw pointers. - TSet ResultSet; - - for (auto& Asset : IteratedSet) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - -private: - UPROPERTY(VisibleAnywhere, Category="Assets") - TSet> AssetDataInternal; - - /** - * This property allows exposing the array to include other assets from any other directory than what it's currently - * monitoring. NOTE: that these assets have to be added manually! They are not automatically registered or added! - */ - UPROPERTY(EditAnywhere, Category = "Assets") - bool bAddExternalAssets = false; - - UPROPERTY(EditAnywhere, meta=(EditCondition="bAddExternalAssets"), Category="Assets") - TSet> AssetDataExternal; - - - void OnAssetCreated(const FAssetData& InAssetData); - void OnAssetRemoved(const FAssetData& InAssetData); - void OnAssetUpdated(const FAssetData& InAssetData); - - bool IsUnderSameDir(const UObject* InAsset) const; - -#ifdef WITH_EDITOR - - void ColorOpenPypeDirs(); - - void SendNotification(const FString& Text) const; - virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; - -#endif -}; diff --git a/openpype/hosts/unreal/integration/UE_4.27/BuildPlugin_4-27.bat b/openpype/hosts/unreal/integration/UE_4.27/BuildPlugin_4-27.bat deleted file mode 100644 index 96cdb96f8a..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/BuildPlugin_4-27.bat +++ /dev/null @@ -1 +0,0 @@ -D:\UE4\UE_4.27\Engine\Build\BatchFiles\RunUAT.bat BuildPlugin -plugin="D:\OpenPype\openpype\hosts\unreal\integration\UE_4.27\Ayon\Ayon.uplugin" -Package="D:\BuiltPlugins\4.27" \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_4.27/BuildPlugin_4-27_Window.bat b/openpype/hosts/unreal/integration/UE_4.27/BuildPlugin_4-27_Window.bat deleted file mode 100644 index 1343843a82..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/BuildPlugin_4-27_Window.bat +++ /dev/null @@ -1 +0,0 @@ -cmd /k "BuildPlugin_4-27.bat" \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_4.27/CommandletProject/.gitignore b/openpype/hosts/unreal/integration/UE_4.27/CommandletProject/.gitignore deleted file mode 100644 index e74e6886b7..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/CommandletProject/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -/Saved -/DerivedDataCache -/Intermediate -/Content -/Config -/Binaries -/.idea -/.vs \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_4.27/CommandletProject/CommandletProject.uproject b/openpype/hosts/unreal/integration/UE_4.27/CommandletProject/CommandletProject.uproject deleted file mode 100644 index ea7bf21dc4..0000000000 --- a/openpype/hosts/unreal/integration/UE_4.27/CommandletProject/CommandletProject.uproject +++ /dev/null @@ -1,12 +0,0 @@ -{ - "FileVersion": 3, - "EngineAssociation": "4.27", - "Category": "", - "Description": "", - "Plugins": [ - { - "Name": "Ayon", - "Enabled": true - } - ] -} \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/.gitignore b/openpype/hosts/unreal/integration/UE_5.0/Ayon/.gitignore deleted file mode 100644 index b32a6f55e5..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -/Binaries -/Intermediate diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Ayon.uplugin b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Ayon.uplugin deleted file mode 100644 index 70ed8f6b9a..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Ayon.uplugin +++ /dev/null @@ -1,24 +0,0 @@ -{ - "FileVersion": 3, - "Version": 1, - "VersionName": "1.0", - "FriendlyName": "Ayon", - "Description": "Ayon Integration", - "Category": "Ayon.Integration", - "CreatedBy": "Ondrej Samohel", - "CreatedByURL": "https://ayon.ynput.io", - "DocsURL": "https://ayon.ynput.io/docs/artist_hosts_unreal", - "MarketplaceURL": "", - "SupportURL": "https://ynput.io/", - "CanContainContent": true, - "EngineVersion": "5.0", - "IsExperimentalVersion": false, - "Installed": true, - "Modules": [ - { - "Name": "Ayon", - "Type": "Editor", - "LoadingPhase": "Default" - } - ] -} diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Config/DefaultAyonSettings.ini b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Config/DefaultAyonSettings.ini deleted file mode 100644 index 9ad7f55201..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Config/DefaultAyonSettings.ini +++ /dev/null @@ -1,2 +0,0 @@ -[/Script/Ayon.AyonSettings] -FolderColor=(R=91,G=197,B=220,A=255) \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Config/FilterPlugin.ini b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Config/FilterPlugin.ini deleted file mode 100644 index ccebca2f32..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Config/FilterPlugin.ini +++ /dev/null @@ -1,8 +0,0 @@ -[FilterPlugin] -; This section lists additional files which will be packaged along with your plugin. Paths should be listed relative to the root plugin directory, and -; may include "...", "*", and "?" wildcards to match directories, files, and individual characters respectively. -; -; Examples: -; /README.txt -; /Extras/... -; /Binaries/ThirdParty/*.dll diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Content/Python/init_unreal.py b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Content/Python/init_unreal.py deleted file mode 100644 index c0b1d0ce5d..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Content/Python/init_unreal.py +++ /dev/null @@ -1,30 +0,0 @@ -import unreal - -ayon_detected = True -try: - from openpype.pipeline import install_host - from openpype.hosts.unreal.api import UnrealHost - - ayon_host = UnrealHost() -except ImportError as exc: - ayon_host = None - ayon_detected = False - unreal.log_error(f"Ayon: cannot load Ayon integration [ {exc} ]") - -if ayon_detected: - install_host(ayon_host) - - -@unreal.uclass() -class AyonIntegration(unreal.AyonPythonBridge): - @unreal.ufunction(override=True) - def RunInPython_Popup(self): - unreal.log_warning("Ayon: showing tools popup") - if ayon_detected: - ayon_host.show_tools_popup() - - @unreal.ufunction(override=True) - def RunInPython_Dialog(self): - unreal.log_warning("Ayon: showing tools dialog") - if ayon_detected: - ayon_host.show_tools_dialog() diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/README.md b/openpype/hosts/unreal/integration/UE_5.0/Ayon/README.md deleted file mode 100644 index 865c8cafea..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Ayon Unreal Integration plugin - UE 5.0 - -This is plugin for Unreal Editor, creating menu for [Ayon](https://github.com/ynput/OpenPype) tools to run. diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Resources/ayon128.png b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Resources/ayon128.png deleted file mode 100644 index 799d849aa3163ecb16be39c641a6ac30324906b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2358 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 D;gw7~ diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Resources/ayon512.png b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Resources/ayon512.png deleted file mode 100644 index 990d5917e232a0644820428fb2790943de5ffaa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16705 zcmdt~tJv<)UH<2ka%^dAz ztmXfVz)uVo=Yp^36MM|lbKKqh%)+^wz+aFcauWEkNki2Cn8Tx z%h{+@=X3jOfRwK7k0i_xCw2X+s&hmPW{Q*waIr)xalQ(ziYa(IF|utway6+?_U>_? z1K$ay#BD&8ZeFtjDaBRa9PfORqZ_0r$4mxH-&Cnf0EEHq?2xWe+WB2Wn1 zIw62~x0zh`dh9)npYu#*yZma(`0SbjsPlQQus^3E3HWes1s8;4FH5#J1YvYsrpVLO zjoT68P=GDF;~@@FK2v;n{Y@A0|P9!#9 zCqB42ikOX;5O^B~07P-<%)r9$sD)O{9?Q1#r(RxlU%SQ3f>^G=`&<06#G$jnX@pE1 z)i(IRqh|mj)!yA1_oIM%|E$Wz8O8slSZw)qaGZdT;#dwBX5!B+YDx(?i`V}L`ccx6 z3w(1e2YHG{lIaRgMMjP;!r8VKI5Drs#ItD^BR~CP2O{X9z%L!}t>n{&g8XdsLBv*L zly6ddGZJe$b|51K{38B{0LHZ={V_bV7va0uyt4W$*YTy!}7zRuKAsCl<8ehO_A`K{nPy)aZWt)G7%mR)a86$Bi+~>wJch6(3V{Mq^N3WJ* z?h$w>x=A{(t5l>owgh4RrfuSaPXU*~!cPQD_&3p*TZr!a0KmY1`oSD|YL1yoYG=n? zZlWLeKo0aDuH1iG`&-_Fjs8C%yg!cMGdtJjFxwUL_>(6O{Q4F{%ZZTGfG7X~MkN?! zS8@C>=?iSqTA<*(7sbOZs}BIf;ToQ%IsN1bd`J~T)>B<$E?a+@t|LZI%mL9aWgr}< zg8-WFH*MFtFkBZAToj8M-?w+4oFT>;jbTcdIpa7%W?>vps&PA&VJTWkWEhbh#xsAz zcmH%Ykp*ZUvEVC^Pus=FBltAq)g6}#bDQ?bZGH`cOiL?3ll8yN9{$n`=8cE1`iGip zj{MAPA2PeV8Vjj2m&|2ZZuw0}VfChOL45>sfHv|T)JUnCDsKzBRmrI75ANNwY9X1o z6@S-ivT|$Zq+WW@KJ8z{K=6C;lXg`T^n1>Y=d!fc{<@{BdX?;&#{cbbJPN}4x3-W* zY8x_02-u2DQj`cnf!qeMrf!TJ59Fy5K8NP<9-m7s{r;-b+r_dA)ScS!-)h z<}JY=zpV`@IDYjkUFiIJSrsW{KJ$>qMRBYZKbvDzGYSAyC-*))3C}F)PCuI_ne<2~ zhMKYeq%x3#0v5J>suMAq``_gr%g2_8`EXj0s|o}cf)plm4`OoSJdnRoVFv5=Lua>> zBLKi4{T0gFJhWN@A823p z__4wI7#IE{jFhhO(w>EAQ)Q|V?};J+2n;h20O3=6RlI&#KE4sl3hm1j06_A6Om<|B z^UITo+yliQbo^QY%!n5tI<(vyTsF>4`||1b83$b~ZV<%B|5o3(?_gs^(5ysx(3SG} zM{!g?+o2$olgX{@bx3mViu4S1O=-*ppgJ@oobPhR75I%63yPv=4e|-DTp zyR~HW!YuY+!fZhr7-_!?96Df-F@8h1mzCNMUr%M5xoyY)K!EIaLhuQ{$-DK`kYF9& zOX_EMZPq*wDDTKHLV!aLQ>2&QJY072ftT3D{N8CR{vkdTSWGdJJ%IOdzte zeYvq+WMUUA`y9U17hL~6_iLHh<#oP}^fA(|4@kgQUnBy>GqPs7YyGdY=Sc;heyy1& zv}uEMblG2Gm+I#(Eujv`f*_>pGuK(&wdo&X-{|(22HJ{e2s02lAdlsFeJ~fs4txm@ zW&$+OTKDf=5P{ewyj=IOdC=4-^y&AWfB$E)Tw)0D&^mfDCOqm$v9j;!i#EIV#|tx- zoL*4(5`4nJ(%myu#=CFNiP0Xh1sU_4n?}>ZgdqJ7_1B!gr$kn)`w1usBy)W|mz~e* z?vH6tAOzyPWapor=N9DEnMd8dcibxX+z}{Xh5%ziyZ5}ONuMfD3o8+ONB}-rbI^D% zd_bl4Z`qS&>C|hDkC~Bpx^}YTb)(c2Jm7=!4~!U1E+>&&Z?(8)cLdwe(j}yby0R8kNQ@>E zq3sI*QAdPXidM&;N!wIAG;q8(p7`|X()_`3ZFTTBssd7NKqW)S`X=F)ob#t_)qBUa z6h+W|m>*NHC6wU<2z1B|eG#K|EdDZG%;ekPS}^(L6rdFX0JdWXq;Jk&pIWoOeUegr z?^zJ{xi&k6?Nji3z0LRz53XvHnqznz&UD(Hij?AMLCPYlxppC_Rq-KoCI_mA+0H5< zCmJ(M4WWt!p^YwohWncWVGhnRrCLljRXH@D@z_B}5qJAd`GUwiS%WA0M#jaIvyT0V zh+Fr_oj4m1V$%nIkE+IV={?D8t`+Mw&zJZdq~I10M%gMxWV2M`%xmgKfk<_E{_C4v z;M0o+exyV1*?eb_aNw-%pmt798VOQ~%XFoK{S&zB9ivR9fBQ*uM5fAcZ{1~Dqu>@J z6yT%*8B|82zB#>Njz{vX#%?=egW%J10KvKK+PF~tXNF<_A+2q6PTtaUXNHgCZ;1hz z&eRT0_hs{2qASduxl^5X4k2!2C?&x8syxMw`OwHI+f_i%$E(2~e{t>O-#Fk)ObQ3G zpet!sUGso7^7vHuld%j{bbp(R(Ce8LQ2qmsC?+3 z#W9lMBmDmDT05{d0xHmC$bBL`Np0!D-(+seInG5o;|8{R358R~@X7SPQjP>|xo7aj zTgi<=?I}pPL=UbpWs(-qxh^}6s$$P23`y3M+6umnMJYv!Fz^rCd=WLqhAzb3Ek64P zr>(Pc+a6w@ND?d&$q>fL1xVFg9v?_Q_FWT+@|m%V6(jY}K{Urp@L5n20u=4g*&m9sFO%5AT^UASm?(@Q1#Q?CDoH;I zIofXh{rmL07;RHsEaY)zbA33Rv%~8<^AOV&UZv8sLWywK5WIiq`91Iyac{f|;$y74JLW|o{3?3$yXEBB&To4^@0;Wx zQ1)*n^W~){|5Ww4wMF55;wwbHEToqeP~SQl{J}D;mQ>8@G#Is`)??>rw^jBN#mN7L zY?Vtsl8!Tw-&V|#4srwjp^h&WEX}lv}2E2JRee!-~$mE z^<=qqg?6fb(b_RR63To;>F9a?QLZs4kA-E)u_ zd!Xq05;t0JCT--W8=?I=ufH9$Ec7NNr;8COcOOv51a((kPvQjboz90HDl4ceX4x`V zuH4RH4J;nv-cQ!Q;m@!)gI%#wlRT?gOq^$KF8sFqwI)wXL0?JQ*gr{CV+f&0_l0<5 z9j#7`e;>4}uD{o`P{o|2gP6opT*GHRDyH$RiY&1__pcbO%MsecD zA#&+0#ZwPAa-#oDHe~vgxU~kmL}558jMD7?q{Zm25r5$Q*3lJQ`9p#N0{jo5(Je0h z>((1#8q0w^hXd&q@6(Z3p`Fg7nRLNnF{euSqsM8-kFuFj73asdpZQ_}Cp8;eT!=#% zYbUO?T2^cU&?$^*nM*Ur>l-=;_6z^h5yi3#?{$nv%+sR^y}O-LR4=ij2Q07G;t^_> z2Az+>Em0C@60ZhU_!ZlEa z`zC`^DV)Tepg}>^J3Tj3zwj_Yr|&OKvJ8piwM(Xsmk98n7CAB~%zuCT zZ{+xxkcs?IWE`S!*D>zYk3ppL83(-{Fq_I8YtV)I*gweZRa&xByVCSn)`-kWt7xbX z@g@hMnnu87xteCs|8elm&(Ydd20A1|-HB*Ot45;i z`GzG)Nm7nP0)BZy{Fc3-Dq>LJIjq0m5l@}|X34h_!pwEqUpkxFk@i}v#gyo#7>}mSGnw31}x{LP}ulh&0*{_emIs!Sy7lQ@% z3<^QX-hO-*{9GR>X}~QXS|)E;z0T^^b#LsEUtX@69UHhR)fTRLezJba6-{d`$}(Kl zG{8E^)br8)s5Y>-9-`8&^yi4;KCxfsDcxh7e&JC}s1m$RRNINuno5G3WtcZ}#>Q4G z9x^ObaV!$_haYdhYq=!eAPQh3{`VXPp)*v6GC>GMv(p)%+m+7U{tLFd0qq>Q)}3EU4n@nj{x-3&qo}=_aF))XZ|Xp0`W#! z>(cQ9@5Zx-%4HMuj(lJ=?wU5AXq-WG6Hh-DqS~ zwwCzXn!Bpf!R+#Q@-Z*T>c%ifPG9nfV1QfHE&LtK?g8wN-ed$V6cAN4I7b&vDi>oV z@3bz*IH+e4?Xhnpz1DBgBy)313!U5V>avqeAqY|(i)mt_JA{_PkG}9qnI7O03mj)Z zj555Npl9fH$eT4**Yj=BYW#iByFS3G1O(L$Ed=X7pp1IY1}NmOnG#x|;94|-iJu4F zJ&CiQu&8`d@diIPF_#yiRT`kaG<)SKat}YTzb9Kz!_mXWGS9fx@OD79WurHVOg9=Y8Vv504EHdj zv18Zp2CPY>SHroTy{bl|P0X^1*moT*W3ehhLD}iw)8%a@+hV>Z5&dBX#bai7Nut5h zm(u15#fF)g(};Mg{RFlF(mFO>9HX}1BXITah%d~AY{{epp3gx9o0^{%U*j;2C`D%NMFa4r_2zfO+SU8*Z&F1V(HESd7Y&yENnPv=h>#sGp(PosK7`Z`0yBw_8<&fp=(gGJjH3PMUtp(rJXoqrkEe>yHjQ{U68Pm? z))%S1c$NIw55C;+KC2y=NBib5&| zPT^h^f2yRy`+Gj86RBF0!>$a*ijht(wy*iYV^SC-e$%OQQ{FmSjkQGI796NAv*)Zr z#Vm|vrS&y-|IiYwp4Wy>=n{$e3J!eV_PHj;XiqA&&VMUwSz)zvihjIypwmlm5m|6; z@^%~wlF7S!jt)ymnf_5zPm_LLZF*SM^ta?mhM;hjzw>T`khrfD-i@aMF+-^UZxy=WY1WOLSndjrd8{BlOeFk9WH-b?WB z_jIua&%svbr{*iW<2EO?Sev3vwp=Zd#h!EAi(mxfH4+aXpuTiaFF$4mb>4jVlw244 zv~hVz&{P!bshf3@GPN6kI6=xK+}(SU7a`NuSn~0V4%Q z!0GhxG25H}mzdRyN*z%wHG7(j32NYFYG7!7A}IiiQet-bAuCn1uP8uzmtna=aBdA@ zp{!a}sUEw%J(wyqB=fgxi_$ck<@Zn;5tzyReeP;hIJT?(0TJ~$?dx>St+Q2PqcrC~ z-A_}*=$h(y7b@y6V~&S|c1W^};+^@c)D$>wcBQ^wNqhB_Lxoh+m&7c-5dzgZ74!8D zaos52ry)$|BBf} zeKB)vD6Vx$7F%-QKQ1$gG4=0tsx&D371a8Yi}?K$mCcV|&!%x9EMI1~6cBWGX~ThB zqu-?PUM%kUSUA?i>WPBoJ1VIw(2o@MU;SAsvwHKSogP-q>3CL&0BEnsGOizGr|lf! zUXM9vVOWts>yvkvAyTS#09aj2E<2|3TOE-_>$M$~wDX&F4sHV$*beV4W0<+hRj)KO z`vgr=LZk#}3I}Er`wXe#drQ84*wZd_sIyc^LnX4`w1kT;koVcdK~lc@rb5B~2SR1j zE2v#P<+1Fhd6g?0U@`o4;3lja`_&&~?nltxW0Jpq|Gz#7LWL+Ab9<85XD(RbB9QLW z2bIQ$fnxW!q{VMgDW}%BAhA6<9=`weUfA4-=UIGOi}B2oJaopC#K@k${CEeeikv?Y zg1`BP`&=-CEb@KuB?Mr5PYB$19My(aH8))9X^>D5vXOGj%);mU0#PT&ZOyY7oB#WE zFUbI2c$pW4%w9Z1kAy8aNWkH+R~A!UaKLPR9&TZg+00`4zZMY%>cWA-s@p#5py5a1#d1>wx7Z*|A(ZW8yUWsujpbF-UqPmcu!OTQ%;6myp0;$ zL2ZWR+?RW#2vCUN1K-A%=W*&)cO}@itTqTVUsIgD&H*fDNpX|&jR#*-&OUOYc=zA6 zPyoN~KolITWbRjwCE+g|e-0L0C1B%b@%51x*tjOI+Cptv1-7KVjrbqYRP0}A|5a*9 z3R@V^Gar2pt^^TyK4xisj@lUV!>%L$y+ijfK@;5V*x=R9_FM?(m7Et{#wZJSH(o%Db8 zTRdFC^(o>WL>Ms~xt}McoVIQpw~GJhkKk7VC;~^!iPH2&!(|KVMEjavGe)M;O{Lbi!Z$xf62V^`5~`!cB=o4*;Uj@ z^`$53X84Nh_YFzoDZqv=7FbDFJ@d1j-C63FU2tm2pQ1pH%0+Zr&b4q$8&2`5ABH|Q zl=;*h)qh4Dv`0xcxN#qe9}&vugSn}ieK3F6(88Z}dDB{+HPn4^Y8^nfbW&lC(3c%y z)Fb&h1U)=~)|G?sEztg}1Pt5zY`v(onoBT5+NQjsCE z8rda_-aR8qRI4&Wy1a4qlZt_;k&5Fi+%$yZl9cxa5a(2W^FiX~SNdhY$r9g4PL;dX z`1k!MUA_qk+g2g^S*NTeNU_iy@2iXIIAAab@#- zt?cRN`NK%}kYZ&D_#dZD+;Y~H+%e&3C%)j$j$6=xZLE#1*WjHIm-A1!hPj1HV-_M% zZ+M}IQ=^qtl<5d>VuEMUjZrM&slUz9S92yh(-`q#*%Bmm8;c|bVLoJo>CW!qs4ZCM zp(YVuw?5?;zdDd!5*7{U!Z#Vo#5;YZt7_Wmf>S*y`9R-xQgwks?Z(R%+$jgfN+(s9 zv9HHw)M?XWM@M6?3$Lt&Q>1oMl(mqb9`8%;xjJuq=sx+$2jU$9%YHDvKEPG8cw|iRjgQp!S(s&{E?*0g>&EJ4>tdBL3e% zmM-IFL>TIAT5)q_<02(Qp`QXM&?w$GMf*#@AMqJ>?_i*QU9IuxablG|-~ zh}hO!yE}3V?ES>b!=W2z@~+P3=r(Iu>5RFHVC0$lqW?@Q?uqIh74a+6>OUO5FhinX zP(@TyXh$wv*VlqnlPdbj4G#GH52UBIRh?%Ty{XMG54YW?H_ZM(2%wzAVv}`@*w~xd zz-1cdNviRS?>~ZrCZcgdllvtTPAM5T>OXek6F38$ACcn&TVs1>o%T*Y>s8R3){Xm5S$&+u_Fp<( z;Qk2r>(BE0&rP296(*L%x|-t_q(^Tu`1QIQ<+>7X%l5$gxdNWW!gJL}3?h|j$fP3t z;&P`6eL%B)`ft12PMMjpEGlKtQ-UY=cxq8#_as|C_L^eFQdqEg39(pao-Hj?Gp6z4 zXF9(wO~qxuqLo!5FK@$OU~T3 z_M{`4!py+fVW0j(cKbGmOB75iEeD&Gk{h%W z#>Z>rU@YV2HP}^hF5Od54vB_$shVl|OpS=<14POow$6WVi-J!5fg%)iUMkS zILNP=s?8lb9_0oT0!ZiRjTN-8%MiSRRO+(&@uY!andh+X#WD+Fl)uf@2gWjv{a4JM zfKpIm8cpb>vQ;`!gg(0KxDza zQyY`QfCD*sMpH@&)Q1I{BpR>_2S!$L4w!virehTa9gpiD4VPB6UBX=>Hyvqe?X&xy zaJe(zz=QZyM>&0Ha88B?a8Z$PjqRKiUf&;EiTu#h zhK9S2;8YiIN1>VKKV@$)>c=w&x!%6`jJVJBL3$(pS6nbvfj9U-UwyaxemKYcXq|sd zKx;9+*u_8osWUXyLk7)0@{3_22mRInmlXfdR^A(-;UDKWp6JK8RfR2+4^%hDEPGSi z7B`8?!Fn$i|CtpG9K`Ifw7xa8fP&39ZB^Z~>a0gb32hyU1FCZ8^4BNPsz=>(srrN_ zXE*27j2|s4yOX&mWyf*K8we8*g}B7yR#TRF`K`4)=~m7L)I83m@Xj(7>eQF6scFwb zhDg=>2p?nu?++f?-8bD5GzEQ4J))bpU9-aPk4W)fA`^C&9mZ5=oFrj~VYPE;{XMbN zaT>f8AyQ0qvG2U+iW?WSM~{Eb>@T_ooYk3&6LY(Ctax`rM(^c_5T>r%^WOdhu*KiL z8Izn?wSucotVs4o@3ZSChXf+yYC4WZ+wsK1np^MgCgS}l*b_5IyG`^AgF36mWrarV z>Iir{^%w`e2eXxbqiBa{4y+`dvP*sIJMo4i<|sirP`~a zUOck%83lG4iJk&+O!O#^Fxgdu@`|VVxpTe{M%k}dl>@}MiBF!eRB@IwlJm?I^DH;^ zyg8PMPj(F#wQ9b%er>QcUV=3(R<4o&=W@LLmCAb8@r9oSf=9dV9oyA-hy&`HmABiV z1eL=XdnWB$CY%%NqzG+JB={dU1KL=R}Bw~!qvvJNatc-TI$0z(dP%b;*0!-uH!+*ejLSf|$2L994)DB1JH zf7_0Y3xY{nlOP{JJ9YOtiR_GU}?(!#c zhu?T!pp@UJU!?i>b>d*@cK-4GB{M-9Yntp2!7;jJ;T=hwh?!DyL*S;rj7HnU25MNb zosQ*mP#l6XSZqV_*Bkwxw5;}2dXL`8;##}i7kM%%QG$gT(pF3tnMcGi-c&V@wCyN? zU*;+K$C?V(?w_lk`RiJ>Vpybb3DmdX5$#8UfB!ay71vn`jc^+is=Yi7c) zXA$i@W@g?Z@6XmwhFveD3B(&gK#{95_fJNHC)ZM~Fy24jnp?$UsmZD*yWZg!&DXF% zru6GMQ7w6HZr_uKr_k5n z*w$@-$ni*K|1p6Ys}$Rh(AU#4 zLW=XIBn8}b*ZfC*Y@mjGpWH#qo2MwNoJ%g9zfB~k)ldc~G|FYfeM=~tBe|aE*)_h) zVf+`{@@t=(PU6#N2+D-KJHXJ|O5>7zR=b5R*s{!EYq4x>WnnKjJq(V$9RL^hFCJiY zm2?>dhXISv_ABo2)w&#`Bw?IRKN|W$VTbKC~|<5UG9mKmipJTwSmwE6jLP z^r;b2o;B$zT4dY{wh=bmI-jg&&;ajRw7BnTOYO4YywGnqj;-zL;)D8ilIQkaAtlnb zC^pxp0EKYU{L*Xm+iFq64FV?g>;boU`+?NAtv1zcF}{1fjqy^unAL@TxGpV=}9ny z=LU(*?;608U0C(kpr-r%f`0Uz{IxfQdSw+8w3WLDDWH_^t8;pY6w}Ck-ywrKO>Qle z4xTt4KE%B?pUiq>`ihc3Qlt1z^Bwe)&v;#U5CxgLH;<*a*xxeXe2vF{ITdy+$AwpR zz6@TF$iQ4nRrs3iblXYf4M<4`I_YQHzm5gijO&jVNqI_i#dhllAw= z8smQ$<-;Et*UO%QwM~M+kx>bIQ|80;9cZ<&#V=6*JC#tP=t2*=8m!q9OR0jLTqEDo9&%6sz-2q`@D4$!1cc15t z1K5@cfiKPp31i@>NmZ%QoPxK%okfa0LBRHt(a1R($29-)o>>>JIpUlhUjl7?THiKV zmiVcSmQ*}ls~p&deYOy)JVw%2Oz2vnfC{2eMU0fzaee|ZcGdt(H3;o45I0}bz_VHAnZrOE5?Qo?C_ZRp2 z^1auX;D*hZMuc_C8zo<6oi(E9>if?WqA7vrlL-HGe`Z29zb2W-wNo6>ojH}j)iN9M z91(`mHQP|?>~&bitL*Q%{)|2u`#qn(99$VPgYbSFiuBHz@-$!U@f~Rm?w8jJ;2hZ( z{!^!UFF+ydn2+-7zjV)__Nv*Ea9t?;G(v$8pF8K`z*ts8YWF&`taUvQ=a$x(xBO<~ zb-;1r&bVF@o_jxs;4>D_yrWp8c@Qs2kaz1|=!o~9pif`G%1nCGoB|Wf_TXX6F-xi8 zRy@KJdzm*tY+l;$v#^S+^Ve=m(=M+1$-4o~JjwZfJ*^83P1t``BM)zJIF{c1s_d&Y z7Nqzk3}Ew?!EMbQzL#}$nU>MHOwIy0zU# zo3LDD;v8}kdetTLEw~1*?(a{H>~f<9hJ7b`w2}kAbb~}&_qKL+X7eb?)Hl)1Y`lHC zBU9$SFfr!!Ey>+5ysFFAyfz5UK<;O_@P&kfovO*SbCtlEF(7+}iWw~9)ON|{%nf3A zp2jMBH28=vhA}o`%`;8>tm_Gw0G);(W*dts$jKvp!~TF7Z3sR<3ECUxqza4hR)MJL zwZ7L=Ha5+*leOwDota+bXLPc}3X2&66>X?ap*tRJ>esdwVEF#UvR(Gq%GXPcuh8fj zZL2ggSc{de@$H4G6{k1@Ane~4%Vj3+uLo2OF#XV!3Tzx2!GU>^X=ts zk|PpJcOx2ewno<30h^dt^AJa2dn`2~My&dttZuVn&5C=x#1!-vV54#L-d^?zIr&ACXy!veU{nglfxgQ6BxOmQ`>3PkFAT<00w;Zr zkN5Dk$foz|E0{iKV9q&-mU9#^ZeF;%_C^Duc}f5Tm39q4$(yy<*p0F%fpPtNZ+xdt zu)>X3G{EAP5vEdR+1om1M@L=_GOn-kUUJ(H_Y5ZY`nd)dD%$Dp+xNW(gJ5ghbPUhQ zBJd$p)7-vgZ!PF07TVr&>SMU5_!)144x)g$<9p9OHo+JX_BN0Gt;6WSFh^AOUvh{- z;N6?Unh9Y*K;3F!Q8uXfKPA|v0T@Kre>WY=FgqEcq6G|ETI}&!w!Hc6BEZpYsoBFEzw^$Q5I4X8u@_X_ z_Vm-@^nIWt>jQ}a(;=Sf0V|L!bl|-cgewSo745=q4-R5pH%(S~$z3~Jz0q^mq$P;> zCNz2LLVfHREagXBx_)y@QcD(qYCB>3*ePs!&lkR}n{U|76%9*w8bz5OBK4Es<~{6&9VeG=aL!e&xP@<{zAp@X6N@)^E&Wy7 zFpe|`4fYGOLo5U+z>OaT`N^gEJ#|eqpx@}Gqe+n1A^AwTJR^+*U0kd2&Hg_X|Bu{; zd*06XAQztj3s*vbmS=-S(;(&Q@g(J|yHJEZaz6g_6XUiPGx6)8rf(xnV%Lg~sqG?F z>=Zksy^D7$Z(fY;m9f#BJnyV`F_iaVC$eIkq@aArYx^tOqsxJrtb7&a{R_uEs+L3? z%p;3Aqfu<{s3x{pnx4axT3MD?sHI`ZjGG+B?nXqs3Ze`5cHxCtY~^8WhlBL`rR%3g(D*yBO~i1lr>^d;fIH@Yyu;?2{J1!FUKe?1;z zec&qVCVAm^Di6cAOXH9spEO#p3?`!M*ioy6G87Tl%>Em9>Rd|V0&erb0@5T^@pQI z4`KU><7voU;#YMqE)^hv)n1S_D_WXq1pJBzeM%~m*Bmb90ShOvSSnR6M)G#D-`awB zajQcQrOeg3@5loIj;QA6s$fmLTiFH5v#1wJYfQK1j|b5q+3fFvsn`nT+@TZvBiEcf2(C}h zI_ek!DAd$7KDIEJs*m=U4hJmMf7&Z`&VsZsX=0LYAP60w#%<=DE3U))z{T(PBjkH7 z82JD8NT=_ zBEJ>9n4#(q#GUgZlGN`IQ7+YhLsvjw-Z)a&f{I^icVygON`$)g4Y@xC?of#ri3TkCI;7>t z@gz1Ia%H1aM57@JV52#p`Es>t!3#4CtGbFD17?>tZNe{a7q*lT)NYD5{A4CL0Zo|5_D07UV> zMX|T;Mt)khM1Yu7(@eM7e~W~UonGH*7{^?K$EW~@qsOroloGUnf~cdX@i#6~G!H36 zVb~bEAG6W~Qq%d>%lO-0N98Zz4U>BwVH=t&SXlB3L_w{>GviU}DP!s>klW=hX`gyc z01Q6Mn2CyeXr^*}OVtgCJ7K{|GvkXMD%F7Oe_OUFW?4KF_e=d2rzG$|=N7=2z|sd! z1bhM4!@>0iW*8Z8jJ(R4kW5^zh=l+rDV{6}24ZrH4V>{*{%=_twvJ8Ix4nGrz^F=@ z`zfGP-opA=7xg)pH>i=^V|0TQ77!@OAqkP%$c~h0<-gi4Zwp-rWXQ? zD_ikOY6FkP5lo1}x9?ej`+OPzg?Z~)4io@5b*zYU#Y=foSC@|NMF9_M$pK2;H0b{z zQzC@uT)^fWP_3Dy3z))M-5lcZ00m+Y2_FGloiPXem|G{$jW`hzsh*6-5~bpteUNrj z7&+(A^F;#yGyu~v*G{TbynQeP*fRaU7rhvf{{Xf=4gk$53*Jcr1UkOX#QDQoePB7z z9~ywB^xz1dO8l=_px_O$g%q@hN-`-dlieF|)t`G*x+GnJ#B<>(C09Y>Aqa-&-_a;U zQwRVm@$?!H8MSR*9$#XMU*gUJ&>kq5cDjD&$cME$!&o4M&v4W*v(Co5r|S^T7g_Vx zu}t`!UJQ~T8ZQU{G=>_y-gD3U92Yu+eE!l6c(}8a!3Z{Ervr<_)7 zcz}0!vR%K^=QNYT95A(_4g>*nzh{#OnMmU9kH)TR0u53*8e z(FcTecRC_=?mefRvjF(W#c=EzDfD8|0Fl_M>H4+5ak91U2Dd22RzLCP zPb$8F;OvDk7iPLsp)>;zinvRE)-2a@f>QIhy%3EBbV8SM7GOr)wyg!N_+WuvqE_fO zIwxqOxJ^I?(w=J_w>EA;bz)B0JHT?q z>Z_oq-8kH7v)tKp;7}xC{`O;&1R|KT%Jh;hRDoKjjG8hW8hP6ODF~cmSh$JFS$;eG zpF=#fXyM;#`0tuTc>&%q=pBCbFjt-7^wC&hmxG`f@TS(&?>jZDss6~IIB+0B5B9Ny zSpX<7^W;5H^ZkVO^gj|Dx_ zOVkcpJo^K%c*){Bw22psf5XZ`Y7>2|$g!S!ML_$0zxnafZQO#%>V`1`Zi557xmGQ^ zs!Rq|;*5q(kANnTf+%kiK52Y~6(+wnf9W5ea|!y!9D1I(P(CevuB>iF<&Kay9a5%8S-OT46apu##TKuf!Ep45rXtHRRsXe9Q5Hc z^hKxi#pi+%)7cG?{zldVvg16c-rmNB4*L^pNi{6X1jM1qlW0vA0hf%N8Hw(mS4(d{m=`0v~|! zeh*!z31-|?vU{aa<0QNbt`v(3BLwW62VZYnDOd29Q{B>+yl1dyPVPga_%k0GMKM|_ zqdzgx=kseToB9hkqtCqrU6=vhetgpU5$;)&t{*xn8=JV0g3fG&&qZUS%kWVdWE7eN z;G9G9%XnW_D-(&5nViZpjb=t1E$$A^Gy|@2pWTd8hJPjdgVYX-7RT2^(McisPEPZs z7w_j5HLiTq+&bmf7GiY*S*}IsliD9Az}{=azyxqY_S$5k_;};8tQ&RQ_lLQgWEDfz zx-zewpRC~Nch^1*Pk;UGkqnnS2eobv3}MapAction( - FAyonCommands::Get().AyonTools, - FExecuteAction::CreateRaw(this, &FAyonModule::MenuPopup), - FCanExecuteAction()); - PluginCommands->MapAction( - FAyonCommands::Get().AyonToolsDialog, - FExecuteAction::CreateRaw(this, &FAyonModule::MenuDialog), - FCanExecuteAction()); - - UToolMenus::RegisterStartupCallback( - FSimpleMulticastDelegate::FDelegate::CreateRaw(this, &FAyonModule::RegisterMenus)); - - RegisterSettings(); -} - -void FAyonModule::ShutdownModule() -{ - UToolMenus::UnRegisterStartupCallback(this); - - UToolMenus::UnregisterOwner(this); - - FAyonStyle::Shutdown(); - - FAyonCommands::Unregister(); -} - - -void FAyonModule::RegisterSettings() -{ - ISettingsModule& SettingsModule = FModuleManager::LoadModuleChecked("Settings"); - - // Create the new category - // TODO: After the movement of the plugin from the game to editor, it might be necessary to move this! - ISettingsContainerPtr SettingsContainer = SettingsModule.GetContainer("Project"); - - UAyonSettings* Settings = GetMutableDefault(); - - // Register the settings - ISettingsSectionPtr SettingsSection = SettingsModule.RegisterSettings("Project", "Ayon", "General", - LOCTEXT("RuntimeGeneralSettingsName", - "General"), - LOCTEXT("RuntimeGeneralSettingsDescription", - "Base configuration for Open Pype Module"), - Settings - ); - - // Register the save handler to your settings, you might want to use it to - // validate those or just act to settings changes. - if (SettingsSection.IsValid()) - { - SettingsSection->OnModified().BindRaw(this, &FAyonModule::HandleSettingsSaved); - } -} - -bool FAyonModule::HandleSettingsSaved() -{ - UAyonSettings* Settings = GetMutableDefault(); - bool ResaveSettings = false; - - // You can put any validation code in here and resave the settings in case an invalid - // value has been entered - - if (ResaveSettings) - { - Settings->SaveConfig(); - } - - return true; -} - -void FAyonModule::RegisterMenus() -{ - // Owner will be used for cleanup in call to UToolMenus::UnregisterOwner - FToolMenuOwnerScoped OwnerScoped(this); - - { - UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("LevelEditor.MainMenu.Tools"); - { - // FToolMenuSection& Section = Menu->FindOrAddSection("Ayon"); - FToolMenuSection& Section = Menu->AddSection( - "Ayon", - TAttribute(FText::FromString("Ayon")), - FToolMenuInsert("Programming", EToolMenuInsertType::Before) - ); - Section.AddMenuEntryWithCommandList(FAyonCommands::Get().AyonTools, PluginCommands); - Section.AddMenuEntryWithCommandList(FAyonCommands::Get().AyonToolsDialog, PluginCommands); - } - UToolMenu* ToolbarMenu = UToolMenus::Get()->ExtendMenu("LevelEditor.LevelEditorToolBar.PlayToolBar"); - { - FToolMenuSection& Section = ToolbarMenu->FindOrAddSection("PluginTools"); - { - FToolMenuEntry& Entry = Section.AddEntry( - FToolMenuEntry::InitToolBarButton(FAyonCommands::Get().AyonTools)); - Entry.SetCommandList(PluginCommands); - } - } - } -} - - -void FAyonModule::MenuPopup() -{ - UAyonPythonBridge* bridge = UAyonPythonBridge::Get(); - bridge->RunInPython_Popup(); -} - -void FAyonModule::MenuDialog() -{ - UAyonPythonBridge* bridge = UAyonPythonBridge::Get(); - bridge->RunInPython_Dialog(); -} - -IMPLEMENT_MODULE(FAyonModule, Ayon) diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp deleted file mode 100644 index 869aa45256..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp +++ /dev/null @@ -1,113 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#include "AyonAssetContainer.h" -#include "AssetRegistry/AssetRegistryModule.h" -#include "Misc/PackageName.h" -#include "Containers/UnrealString.h" - -UAyonAssetContainer::UAyonAssetContainer(const FObjectInitializer& ObjectInitializer) -: UAssetUserData(ObjectInitializer) -{ - FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); - FString path = UAyonAssetContainer::GetPathName(); - UE_LOG(LogTemp, Warning, TEXT("UAyonAssetContainer %s"), *path); - FARFilter Filter; - Filter.PackagePaths.Add(FName(*path)); - - AssetRegistryModule.Get().OnAssetAdded().AddUObject(this, &UAyonAssetContainer::OnAssetAdded); - AssetRegistryModule.Get().OnAssetRemoved().AddUObject(this, &UAyonAssetContainer::OnAssetRemoved); - AssetRegistryModule.Get().OnAssetRenamed().AddUObject(this, &UAyonAssetContainer::OnAssetRenamed); -} - -void UAyonAssetContainer::OnAssetAdded(const FAssetData& AssetData) -{ - TArray split; - - // get directory of current container - FString selfFullPath = UAyonAssetContainer::GetPathName(); - FString selfDir = FPackageName::GetLongPackagePath(*selfFullPath); - - // get asset path and class - FString assetPath = AssetData.GetFullName(); - FString assetFName = AssetData.ObjectPath.ToString(); - UE_LOG(LogTemp, Log, TEXT("asset name %s"), *assetFName); - // split path - assetPath.ParseIntoArray(split, TEXT(" "), true); - - FString assetDir = FPackageName::GetLongPackagePath(*split[1]); - - // take interest only in paths starting with path of current container - if (assetDir.StartsWith(*selfDir)) - { - // exclude self - if (assetFName != "AssetContainer") - { - assets.Add(assetPath); - assetsData.Add(AssetData); - UE_LOG(LogTemp, Log, TEXT("%s: asset added to %s"), *selfFullPath, *selfDir); - } - } -} - -void UAyonAssetContainer::OnAssetRemoved(const FAssetData& AssetData) -{ - TArray split; - - // get directory of current container - FString selfFullPath = UAyonAssetContainer::GetPathName(); - FString selfDir = FPackageName::GetLongPackagePath(*selfFullPath); - - // get asset path and class - FString assetPath = AssetData.GetFullName(); - FString assetFName = AssetData.ObjectPath.ToString(); - - // split path - assetPath.ParseIntoArray(split, TEXT(" "), true); - - FString assetDir = FPackageName::GetLongPackagePath(*split[1]); - - // take interest only in paths starting with path of current container - FString path = UAyonAssetContainer::GetPathName(); - FString lpp = FPackageName::GetLongPackagePath(*path); - - if (assetDir.StartsWith(*selfDir)) - { - // exclude self - if (assetFName != "AssetContainer") - { - // UE_LOG(LogTemp, Warning, TEXT("%s: asset removed"), *lpp); - assets.Remove(assetPath); - assetsData.Remove(AssetData); - } - } -} - -void UAyonAssetContainer::OnAssetRenamed(const FAssetData& AssetData, const FString& str) -{ - TArray split; - - // get directory of current container - FString selfFullPath = UAyonAssetContainer::GetPathName(); - FString selfDir = FPackageName::GetLongPackagePath(*selfFullPath); - - // get asset path and class - FString assetPath = AssetData.GetFullName(); - FString assetFName = AssetData.ObjectPath.ToString(); - - // split path - assetPath.ParseIntoArray(split, TEXT(" "), true); - - FString assetDir = FPackageName::GetLongPackagePath(*split[1]); - if (assetDir.StartsWith(*selfDir)) - { - // exclude self - if (assetFName != "AssetContainer") - { - - assets.Remove(str); - assets.Add(assetPath); - assetsData.Remove(AssetData); - // UE_LOG(LogTemp, Warning, TEXT("%s: asset renamed %s"), *lpp, *str); - } - } -} diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp deleted file mode 100644 index 086fc1036e..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "AyonAssetContainerFactory.h" -#include "AyonAssetContainer.h" - -UAyonAssetContainerFactory::UAyonAssetContainerFactory(const FObjectInitializer& ObjectInitializer) - : UFactory(ObjectInitializer) -{ - SupportedClass = UAyonAssetContainer::StaticClass(); - bCreateNew = false; - bEditorImport = true; -} - -UObject* UAyonAssetContainerFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) -{ - UAyonAssetContainer* AssetContainer = NewObject(InParent, Class, Name, Flags); - return AssetContainer; -} - -bool UAyonAssetContainerFactory::ShouldShowInNewMenu() const { - return false; -} diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonCommands.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonCommands.cpp deleted file mode 100644 index 566ee1dcd1..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonCommands.cpp +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#include "AyonCommands.h" - -#define LOCTEXT_NAMESPACE "FAyonModule" - -void FAyonCommands::RegisterCommands() -{ - UI_COMMAND(AyonTools, "Ayon Tools", "Pipeline tools", EUserInterfaceActionType::Button, FInputChord()); - UI_COMMAND(AyonToolsDialog, "Ayon Tools Dialog", "Pipeline tools dialog", EUserInterfaceActionType::Button, FInputChord()); -} - -#undef LOCTEXT_NAMESPACE diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonLib.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonLib.cpp deleted file mode 100644 index 7cfa0c9c30..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonLib.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#include "AyonLib.h" - -#include "AssetViewUtils.h" -#include "UObject/UnrealType.h" - -/** - * Sets color on folder icon on given path - * @param InPath - path to folder - * @param InFolderColor - color of the folder - * @warning This color will appear only after Editor restart. Is there a better way? - */ - -bool UAyonLib::SetFolderColor(const FString& FolderPath, const FLinearColor& FolderColor, const bool& bForceAdd) -{ - if (AssetViewUtils::DoesFolderExist(FolderPath)) - { - const TSharedPtr LinearColor = MakeShared(FolderColor); - - AssetViewUtils::SaveColor(FolderPath, LinearColor, true); - UE_LOG(LogAssetData, Display, TEXT("A color {%s} has been set to folder \"%s\""), *LinearColor->ToString(), - *FolderPath) - return true; - } - - UE_LOG(LogAssetData, Display, TEXT("Setting a color {%s} to folder \"%s\" has failed! Directory doesn't exist!"), - *FolderColor.ToString(), *FolderPath) - return false; -} - -/** - * Returns all poperties on given object - * @param cls - class - * @return TArray of properties - */ -TArray UAyonLib::GetAllProperties(UClass* cls) -{ - TArray Ret; - if (cls != nullptr) - { - for (TFieldIterator It(cls); It; ++It) - { - FProperty* Property = *It; - if (Property->HasAnyPropertyFlags(EPropertyFlags::CPF_Edit)) - { - Ret.Add(Property->GetName()); - } - } - } - return Ret; -} diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp deleted file mode 100644 index 8d34090a15..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "AyonPublishInstance.h" -#include "AssetRegistry/AssetRegistryModule.h" -#include "AssetToolsModule.h" -#include "Framework/Notifications/NotificationManager.h" -#include "AyonLib.h" -#include "AyonSettings.h" -#include "Widgets/Notifications/SNotificationList.h" - - -//Moves all the invalid pointers to the end to prepare them for the shrinking -#define REMOVE_INVALID_ENTRIES(VAR) VAR.CompactStable(); \ - VAR.Shrink(); - -UAyonPublishInstance::UAyonPublishInstance(const FObjectInitializer& ObjectInitializer) - : UPrimaryDataAsset(ObjectInitializer) -{ - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked< - FAssetRegistryModule>("AssetRegistry"); - - const FPropertyEditorModule& PropertyEditorModule = FModuleManager::LoadModuleChecked( - "PropertyEditor"); - - FString Left, Right; - GetPathName().Split("/" + GetName(), &Left, &Right); - - FARFilter Filter; - Filter.PackagePaths.Emplace(FName(Left)); - - TArray FoundAssets; - AssetRegistryModule.GetRegistry().GetAssets(Filter, FoundAssets); - - for (const FAssetData& AssetData : FoundAssets) - OnAssetCreated(AssetData); - - REMOVE_INVALID_ENTRIES(AssetDataInternal) - REMOVE_INVALID_ENTRIES(AssetDataExternal) - - AssetRegistryModule.Get().OnAssetAdded().AddUObject(this, &UAyonPublishInstance::OnAssetCreated); - AssetRegistryModule.Get().OnAssetRemoved().AddUObject(this, &UAyonPublishInstance::OnAssetRemoved); - AssetRegistryModule.Get().OnAssetUpdated().AddUObject(this, &UAyonPublishInstance::OnAssetUpdated); - -#ifdef WITH_EDITOR - ColorAyonDirs(); -#endif -} - -void UAyonPublishInstance::OnAssetCreated(const FAssetData& InAssetData) -{ - TArray split; - - UObject* Asset = InAssetData.GetAsset(); - - if (!IsValid(Asset)) - { - UE_LOG(LogAssetData, Warning, TEXT("Asset \"%s\" is not valid! Skipping the addition."), - *InAssetData.ObjectPath.ToString()); - return; - } - - const bool result = IsUnderSameDir(Asset) && Cast(Asset) == nullptr; - - if (result) - { - if (AssetDataInternal.Emplace(Asset).IsValidId()) - { - UE_LOG(LogTemp, Log, TEXT("Added an Asset to PublishInstance - Publish Instance: %s, Asset %s"), - *this->GetName(), *Asset->GetName()); - } - } -} - -void UAyonPublishInstance::OnAssetRemoved(const FAssetData& InAssetData) -{ - if (Cast(InAssetData.GetAsset()) == nullptr) - { - if (AssetDataInternal.Contains(nullptr)) - { - AssetDataInternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataInternal) - } - else - { - AssetDataExternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataExternal) - } - } -} - -void UAyonPublishInstance::OnAssetUpdated(const FAssetData& InAssetData) -{ - REMOVE_INVALID_ENTRIES(AssetDataInternal); - REMOVE_INVALID_ENTRIES(AssetDataExternal); -} - -bool UAyonPublishInstance::IsUnderSameDir(const UObject* InAsset) const -{ - FString ThisLeft, ThisRight; - this->GetPathName().Split(this->GetName(), &ThisLeft, &ThisRight); - - return InAsset->GetPathName().StartsWith(ThisLeft); -} - -#ifdef WITH_EDITOR - -void UAyonPublishInstance::ColorAyonDirs() -{ - FString PathName = this->GetPathName(); - - //Check whether the path contains the defined Ayon folder - if (!PathName.Contains(TEXT("Ayon"))) return; - - //Get the base path for open pype - FString PathLeft, PathRight; - PathName.Split(FString("Ayon"), &PathLeft, &PathRight); - - if (PathLeft.IsEmpty() || PathRight.IsEmpty()) - { - UE_LOG(LogAssetData, Error, TEXT("Failed to retrieve the base Ayon directory!")) - return; - } - - PathName.RemoveFromEnd(PathRight, ESearchCase::CaseSensitive); - - //Get the current settings - const UAyonSettings* Settings = GetMutableDefault(); - - //Color the base folder - UAyonLib::SetFolderColor(PathName, Settings->GetFolderFColor(), false); - - //Get Sub paths, iterate through them and color them according to the folder color in UAyonSettings - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked( - "AssetRegistry"); - - TArray PathList; - - AssetRegistryModule.Get().GetSubPaths(PathName, PathList, true); - - if (PathList.Num() > 0) - { - for (const FString& Path : PathList) - { - UAyonLib::SetFolderColor(Path, Settings->GetFolderFColor(), false); - } - } -} - -void UAyonPublishInstance::SendNotification(const FString& Text) const -{ - FNotificationInfo Info{FText::FromString(Text)}; - - Info.bFireAndForget = true; - Info.bUseLargeFont = false; - Info.bUseThrobber = false; - Info.bUseSuccessFailIcons = false; - Info.ExpireDuration = 4.f; - Info.FadeOutDuration = 2.f; - - FSlateNotificationManager::Get().AddNotification(Info); - - UE_LOG(LogAssetData, Warning, - TEXT( - "Removed duplicated asset from the AssetsDataExternal in Container \"%s\", Asset is already included in the AssetDataInternal!" - ), *GetName() - ) -} - - -void UAyonPublishInstance::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - - if (PropertyChangedEvent.ChangeType == EPropertyChangeType::ValueSet && - PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED( - UAyonPublishInstance, AssetDataExternal)) - { - // Check for duplicated assets - for (const auto& Asset : AssetDataInternal) - { - if (AssetDataExternal.Contains(Asset)) - { - AssetDataExternal.Remove(Asset); - return SendNotification( - "You are not allowed to add assets into AssetDataExternal which are already included in AssetDataInternal!"); - } - } - - // Check if no UAyonPublishInstance type assets are included - for (const auto& Asset : AssetDataExternal) - { - if (Cast(Asset.Get()) != nullptr) - { - AssetDataExternal.Remove(Asset); - return SendNotification("You are not allowed to add publish instances!"); - } - } - } -} - -#endif diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp deleted file mode 100644 index f79c428a6d..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#include "AyonPublishInstanceFactory.h" -#include "AyonPublishInstance.h" - -UAyonPublishInstanceFactory::UAyonPublishInstanceFactory(const FObjectInitializer& ObjectInitializer) - : UFactory(ObjectInitializer) -{ - SupportedClass = UAyonPublishInstance::StaticClass(); - bCreateNew = false; - bEditorImport = true; -} - -UObject* UAyonPublishInstanceFactory::FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) -{ - check(InClass->IsChildOf(UAyonPublishInstance::StaticClass())); - return NewObject(InParent, InClass, InName, Flags); -} - -bool UAyonPublishInstanceFactory::ShouldShowInNewMenu() const { - return false; -} diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp deleted file mode 100644 index 0ed4b2f704..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#include "AyonPythonBridge.h" - -UAyonPythonBridge* UAyonPythonBridge::Get() -{ - TArray AyonPythonBridgeClasses; - GetDerivedClasses(UAyonPythonBridge::StaticClass(), AyonPythonBridgeClasses); - int32 NumClasses = AyonPythonBridgeClasses.Num(); - if (NumClasses > 0) - { - return Cast(AyonPythonBridgeClasses[NumClasses - 1]->GetDefaultObject()); - } - return nullptr; -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonSettings.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonSettings.cpp deleted file mode 100644 index da388fbc8f..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonSettings.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#include "AyonSettings.h" - -#include "Interfaces/IPluginManager.h" -#include "UObject/UObjectGlobals.h" - -/** - * Mainly is used for initializing default values if the DefaultAyonSettings.ini file does not exist in the saved config - */ -UAyonSettings::UAyonSettings(const FObjectInitializer& ObjectInitializer) -{ - - const FString ConfigFilePath = AYON_SETTINGS_FILEPATH; - - // This has to be probably in the future set using the UE Reflection system - FColor Color; - GConfig->GetColor(TEXT("/Script/Ayon.AyonSettings"), TEXT("FolderColor"), Color, ConfigFilePath); - - FolderColor = Color; -} \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonStyle.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonStyle.cpp deleted file mode 100644 index d88df78735..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/AyonStyle.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#include "AyonStyle.h" -#include "Framework/Application/SlateApplication.h" -#include "Styling/SlateStyleRegistry.h" -#include "Slate/SlateGameResources.h" -#include "Interfaces/IPluginManager.h" -#include "Styling/SlateStyleMacros.h" - -#define RootToContentDir Style->RootToContentDir - -TSharedPtr FAyonStyle::AyonStyleInstance = nullptr; - -void FAyonStyle::Initialize() -{ - if (!AyonStyleInstance.IsValid()) - { - AyonStyleInstance = Create(); - FSlateStyleRegistry::RegisterSlateStyle(*AyonStyleInstance); - } -} - -void FAyonStyle::Shutdown() -{ - FSlateStyleRegistry::UnRegisterSlateStyle(*AyonStyleInstance); - ensure(AyonStyleInstance.IsUnique()); - AyonStyleInstance.Reset(); -} - -FName FAyonStyle::GetStyleSetName() -{ - static FName StyleSetName(TEXT("AyonStyle")); - return StyleSetName; -} - -const FVector2D Icon16x16(16.0f, 16.0f); -const FVector2D Icon20x20(20.0f, 20.0f); -const FVector2D Icon40x40(40.0f, 40.0f); - -TSharedRef< FSlateStyleSet > FAyonStyle::Create() -{ - TSharedRef< FSlateStyleSet > Style = MakeShareable(new FSlateStyleSet("AyonStyle")); - Style->SetContentRoot(IPluginManager::Get().FindPlugin("Ayon")->GetBaseDir() / TEXT("Resources")); - - Style->Set("Ayon.AyonTools", new IMAGE_BRUSH(TEXT("ayon40"), Icon40x40)); - Style->Set("Ayon.AyonToolsDialog", new IMAGE_BRUSH(TEXT("ayon40"), Icon40x40)); - - return Style; -} - -void FAyonStyle::ReloadTextures() -{ - if (FSlateApplication::IsInitialized()) - { - FSlateApplication::Get().GetRenderer()->ReloadTextureResources(); - } -} - -const ISlateStyle& FAyonStyle::Get() -{ - return *AyonStyleInstance; -} diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp deleted file mode 100644 index 2a137e3ed7..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#include "Commandlets/AyonActionResult.h" -#include "Logging/Ayon_Log.h" - -EAyon_ActionResult::Type& FAyon_ActionResult::GetStatus() -{ - return Status; -} - -FText& FAyon_ActionResult::GetReason() -{ - return Reason; -} - -FAyon_ActionResult::FAyon_ActionResult():Status(EAyon_ActionResult::Type::Ok) -{ - -} - -FAyon_ActionResult::FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum):Status(InEnum) -{ - TryLog(); -} - -FAyon_ActionResult::FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum, const FText& InReason):Status(InEnum), Reason(InReason) -{ - TryLog(); -}; - -bool FAyon_ActionResult::IsProblem() const -{ - return Status != EAyon_ActionResult::Ok; -} - -void FAyon_ActionResult::TryLog() const -{ - if(IsProblem()) - UE_LOG(LogCommandletAyonGenerateProject, Error, TEXT("%s"), *Reason.ToString()); -} diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp deleted file mode 100644 index ed876c8128..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#include "Commandlets/Implementations/AyonGenerateProjectCommandlet.h" - -#include "GameProjectUtils.h" -#include "AyonConstants.h" -#include "Commandlets/AyonActionResult.h" -#include "ProjectDescriptor.h" - -int32 UAyonGenerateProjectCommandlet::Main(const FString& CommandLineParams) -{ - //Parses command line parameters & creates structure FProjectInformation - const FAyonGenerateProjectParams ParsedParams = FAyonGenerateProjectParams(CommandLineParams); - ProjectInformation = ParsedParams.GenerateUEProjectInformation(); - - //Creates .uproject & other UE files - EVALUATE_Ayon_ACTION_RESULT(TryCreateProject()); - - //Loads created .uproject - EVALUATE_Ayon_ACTION_RESULT(TryLoadProjectDescriptor()); - - //Adds needed plugin to .uproject - AttachPluginsToProjectDescriptor(); - - //Saves .uproject - EVALUATE_Ayon_ACTION_RESULT(TrySave()); - - //When we are here, there should not be problems in generating Unreal Project for Ayon - return 0; -} - - -FAyonGenerateProjectParams::FAyonGenerateProjectParams(): FAyonGenerateProjectParams("") -{ -} - -FAyonGenerateProjectParams::FAyonGenerateProjectParams(const FString& CommandLineParams): CommandLineParams( - CommandLineParams) -{ - UCommandlet::ParseCommandLine(*CommandLineParams, Tokens, Switches); -} - -FProjectInformation FAyonGenerateProjectParams::GenerateUEProjectInformation() const -{ - FProjectInformation ProjectInformation = FProjectInformation(); - ProjectInformation.ProjectFilename = GetProjectFileName(); - - ProjectInformation.bShouldGenerateCode = IsSwitchPresent("GenerateCode"); - - return ProjectInformation; -} - -FString FAyonGenerateProjectParams::TryGetToken(const int32 Index) const -{ - return Tokens.IsValidIndex(Index) ? Tokens[Index] : ""; -} - -FString FAyonGenerateProjectParams::GetProjectFileName() const -{ - return TryGetToken(0); -} - -bool FAyonGenerateProjectParams::IsSwitchPresent(const FString& Switch) const -{ - return INDEX_NONE != Switches.IndexOfByPredicate([&Switch](const FString& Item) -> bool - { - return Item.Equals(Switch); - } - ); -} - - -UAyonGenerateProjectCommandlet::UAyonGenerateProjectCommandlet() -{ - LogToConsole = true; -} - -FAyon_ActionResult UAyonGenerateProjectCommandlet::TryCreateProject() const -{ - FText FailReason; - FText FailLog; - TArray OutCreatedFiles; - - if (!GameProjectUtils::CreateProject(ProjectInformation, FailReason, FailLog, &OutCreatedFiles)) - return FAyon_ActionResult(EAyon_ActionResult::ProjectNotCreated, FailReason); - return FAyon_ActionResult(); -} - -FAyon_ActionResult UAyonGenerateProjectCommandlet::TryLoadProjectDescriptor() -{ - FText FailReason; - const bool bLoaded = ProjectDescriptor.Load(ProjectInformation.ProjectFilename, FailReason); - - return FAyon_ActionResult(bLoaded ? EAyon_ActionResult::Ok : EAyon_ActionResult::ProjectNotLoaded, FailReason); -} - -void UAyonGenerateProjectCommandlet::AttachPluginsToProjectDescriptor() -{ - FPluginReferenceDescriptor AyonPluginDescriptor; - AyonPluginDescriptor.bEnabled = true; - AyonPluginDescriptor.Name = AyonConstants::Ayon_PluginName; - ProjectDescriptor.Plugins.Add(AyonPluginDescriptor); - - FPluginReferenceDescriptor PythonPluginDescriptor; - PythonPluginDescriptor.bEnabled = true; - PythonPluginDescriptor.Name = AyonConstants::PythonScript_PluginName; - ProjectDescriptor.Plugins.Add(PythonPluginDescriptor); - - FPluginReferenceDescriptor SequencerScriptingPluginDescriptor; - SequencerScriptingPluginDescriptor.bEnabled = true; - SequencerScriptingPluginDescriptor.Name = AyonConstants::SequencerScripting_PluginName; - ProjectDescriptor.Plugins.Add(SequencerScriptingPluginDescriptor); - - FPluginReferenceDescriptor MovieRenderPipelinePluginDescriptor; - MovieRenderPipelinePluginDescriptor.bEnabled = true; - MovieRenderPipelinePluginDescriptor.Name = AyonConstants::MovieRenderPipeline_PluginName; - ProjectDescriptor.Plugins.Add(MovieRenderPipelinePluginDescriptor); - - FPluginReferenceDescriptor EditorScriptingPluginDescriptor; - EditorScriptingPluginDescriptor.bEnabled = true; - EditorScriptingPluginDescriptor.Name = AyonConstants::EditorScriptingUtils_PluginName; - ProjectDescriptor.Plugins.Add(EditorScriptingPluginDescriptor); -} - -FAyon_ActionResult UAyonGenerateProjectCommandlet::TrySave() -{ - FText FailReason; - const bool bSaved = ProjectDescriptor.Save(ProjectInformation.ProjectFilename, FailReason); - - return FAyon_ActionResult(bSaved ? EAyon_ActionResult::Ok : EAyon_ActionResult::ProjectNotSaved, FailReason); -} - -FAyonGenerateProjectParams UAyonGenerateProjectCommandlet::ParseParameters(const FString& Params) const -{ - FAyonGenerateProjectParams ParamsResult; - - TArray Tokens, Switches; - ParseCommandLine(*Params, Tokens, Switches); - - return ParamsResult; -} diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp deleted file mode 100644 index 7a65fd0c98..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "OpenPypePublishInstance.h" -#include "AssetRegistry/AssetRegistryModule.h" -#include "AssetToolsModule.h" -#include "Framework/Notifications/NotificationManager.h" -#include "AyonLib.h" -#include "AyonSettings.h" -#include "Widgets/Notifications/SNotificationList.h" - - -//Moves all the invalid pointers to the end to prepare them for the shrinking -#define REMOVE_INVALID_ENTRIES(VAR) VAR.CompactStable(); \ - VAR.Shrink(); - -UOpenPypePublishInstance::UOpenPypePublishInstance(const FObjectInitializer& ObjectInitializer) - : UPrimaryDataAsset(ObjectInitializer) -{ - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked< - FAssetRegistryModule>("AssetRegistry"); - - const FPropertyEditorModule& PropertyEditorModule = FModuleManager::LoadModuleChecked( - "PropertyEditor"); - - FString Left, Right; - GetPathName().Split("/" + GetName(), &Left, &Right); - - FARFilter Filter; - Filter.PackagePaths.Emplace(FName(Left)); - - TArray FoundAssets; - AssetRegistryModule.GetRegistry().GetAssets(Filter, FoundAssets); - - for (const FAssetData& AssetData : FoundAssets) - OnAssetCreated(AssetData); - - REMOVE_INVALID_ENTRIES(AssetDataInternal) - REMOVE_INVALID_ENTRIES(AssetDataExternal) - - AssetRegistryModule.Get().OnAssetAdded().AddUObject(this, &UOpenPypePublishInstance::OnAssetCreated); - AssetRegistryModule.Get().OnAssetRemoved().AddUObject(this, &UOpenPypePublishInstance::OnAssetRemoved); - AssetRegistryModule.Get().OnAssetUpdated().AddUObject(this, &UOpenPypePublishInstance::OnAssetUpdated); - -#ifdef WITH_EDITOR - ColorOpenPypeDirs(); -#endif -} - -void UOpenPypePublishInstance::OnAssetCreated(const FAssetData& InAssetData) -{ - TArray split; - - UObject* Asset = InAssetData.GetAsset(); - - if (!IsValid(Asset)) - { - UE_LOG(LogAssetData, Warning, TEXT("Asset \"%s\" is not valid! Skipping the addition."), - *InAssetData.ObjectPath.ToString()); - return; - } - - const bool result = IsUnderSameDir(Asset) && Cast(Asset) == nullptr; - - if (result) - { - if (AssetDataInternal.Emplace(Asset).IsValidId()) - { - UE_LOG(LogTemp, Log, TEXT("Added an Asset to PublishInstance - Publish Instance: %s, Asset %s"), - *this->GetName(), *Asset->GetName()); - } - } -} - -void UOpenPypePublishInstance::OnAssetRemoved(const FAssetData& InAssetData) -{ - if (Cast(InAssetData.GetAsset()) == nullptr) - { - if (AssetDataInternal.Contains(nullptr)) - { - AssetDataInternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataInternal) - } - else - { - AssetDataExternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataExternal) - } - } -} - -void UOpenPypePublishInstance::OnAssetUpdated(const FAssetData& InAssetData) -{ - REMOVE_INVALID_ENTRIES(AssetDataInternal); - REMOVE_INVALID_ENTRIES(AssetDataExternal); -} - -bool UOpenPypePublishInstance::IsUnderSameDir(const UObject* InAsset) const -{ - FString ThisLeft, ThisRight; - this->GetPathName().Split(this->GetName(), &ThisLeft, &ThisRight); - - return InAsset->GetPathName().StartsWith(ThisLeft); -} - -#ifdef WITH_EDITOR - -void UOpenPypePublishInstance::ColorOpenPypeDirs() -{ - FString PathName = this->GetPathName(); - - //Check whether the path contains the defined OpenPype folder - if (!PathName.Contains(TEXT("OpenPype"))) return; - - //Get the base path for open pype - FString PathLeft, PathRight; - PathName.Split(FString("OpenPype"), &PathLeft, &PathRight); - - if (PathLeft.IsEmpty() || PathRight.IsEmpty()) - { - UE_LOG(LogAssetData, Error, TEXT("Failed to retrieve the base OpenPype directory!")) - return; - } - - PathName.RemoveFromEnd(PathRight, ESearchCase::CaseSensitive); - - //Get the current settings - const UAyonSettings* Settings = GetMutableDefault(); - - //Color the base folder - UAyonLib::SetFolderColor(PathName, Settings->GetFolderFColor(), false); - - //Get Sub paths, iterate through them and color them according to the folder color in UOpenPypeSettings - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked( - "AssetRegistry"); - - TArray PathList; - - AssetRegistryModule.Get().GetSubPaths(PathName, PathList, true); - - if (PathList.Num() > 0) - { - for (const FString& Path : PathList) - { - UAyonLib::SetFolderColor(Path, Settings->GetFolderFColor(), false); - } - } -} - -void UOpenPypePublishInstance::SendNotification(const FString& Text) const -{ - FNotificationInfo Info{FText::FromString(Text)}; - - Info.bFireAndForget = true; - Info.bUseLargeFont = false; - Info.bUseThrobber = false; - Info.bUseSuccessFailIcons = false; - Info.ExpireDuration = 4.f; - Info.FadeOutDuration = 2.f; - - FSlateNotificationManager::Get().AddNotification(Info); - - UE_LOG(LogAssetData, Warning, - TEXT( - "Removed duplicated asset from the AssetsDataExternal in Container \"%s\", Asset is already included in the AssetDataInternal!" - ), *GetName() - ) -} - - -void UOpenPypePublishInstance::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - - if (PropertyChangedEvent.ChangeType == EPropertyChangeType::ValueSet && - PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED( - UOpenPypePublishInstance, AssetDataExternal)) - { - // Check for duplicated assets - for (const auto& Asset : AssetDataInternal) - { - if (AssetDataExternal.Contains(Asset)) - { - AssetDataExternal.Remove(Asset); - return SendNotification( - "You are not allowed to add assets into AssetDataExternal which are already included in AssetDataInternal!"); - } - } - - // Check if no UOpenPypePublishInstance type assets are included - for (const auto& Asset : AssetDataExternal) - { - if (Cast(Asset.Get()) != nullptr) - { - AssetDataExternal.Remove(Asset); - return SendNotification("You are not allowed to add publish instances!"); - } - } - } -} - -#endif diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Ayon.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Ayon.h deleted file mode 100644 index bb25430411..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Ayon.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#pragma once - -#include "CoreMinimal.h" - - -class FAyonModule : public IModuleInterface -{ -public: - virtual void StartupModule() override; - virtual void ShutdownModule() override; - -private: - void RegisterMenus(); - void RegisterSettings(); - bool HandleSettingsSaved(); - - void MenuPopup(); - void MenuDialog(); - -private: - TSharedPtr PluginCommands; -}; diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonAssetContainer.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonAssetContainer.h deleted file mode 100644 index d40642b149..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonAssetContainer.h +++ /dev/null @@ -1,34 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "UObject/NoExportTypes.h" -#include "Engine/AssetUserData.h" -#include "AssetRegistry/AssetData.h" -#include "AyonAssetContainer.generated.h" - -UCLASS(Blueprintable) -class AYON_API UAyonAssetContainer : public UAssetUserData -{ - GENERATED_BODY() - -public: - - UAyonAssetContainer(const FObjectInitializer& ObjectInitalizer); - // ~UAyonAssetContainer(); - - UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Assets") - TArray assets; - - // There seems to be no reflection option to expose array of FAssetData - /* - UPROPERTY(Transient, BlueprintReadOnly, Category = "Python", meta=(DisplayName="Assets Data")) - TArray assetsData; - */ -private: - TArray assetsData; - void OnAssetAdded(const FAssetData& AssetData); - void OnAssetRemoved(const FAssetData& AssetData); - void OnAssetRenamed(const FAssetData& AssetData, const FString& str); -}; diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h deleted file mode 100644 index da424cde2e..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h +++ /dev/null @@ -1,18 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "Factories/Factory.h" -#include "AyonAssetContainerFactory.generated.h" - -UCLASS() -class AYON_API UAyonAssetContainerFactory : public UFactory -{ - GENERATED_BODY() - -public: - UAyonAssetContainerFactory(const FObjectInitializer& ObjectInitializer); - virtual UObject* FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override; - virtual bool ShouldShowInNewMenu() const override; -}; diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonCommands.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonCommands.h deleted file mode 100644 index 9c40dc8241..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonCommands.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Framework/Commands/Commands.h" -#include "AyonStyle.h" - -class FAyonCommands : public TCommands -{ -public: - - FAyonCommands() - : TCommands(TEXT("Ayon"), NSLOCTEXT("Contexts", "Ayon", "Ayon Tools"), NAME_None, FAyonStyle::GetStyleSetName()) - { - } - - // TCommands<> interface - virtual void RegisterCommands() override; - -public: - TSharedPtr< FUICommandInfo > AyonTools; - TSharedPtr< FUICommandInfo > AyonToolsDialog; -}; diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonConstants.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonConstants.h deleted file mode 100644 index 5fe7c14360..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonConstants.h +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - -namespace AyonConstants -{ - const FString Ayon_PluginName = "Ayon"; - const FString PythonScript_PluginName = "PythonScriptPlugin"; - const FString SequencerScripting_PluginName = "SequencerScripting"; - const FString MovieRenderPipeline_PluginName = "MovieRenderPipeline"; - const FString EditorScriptingUtils_PluginName = "EditorScriptingUtilities"; -} - - diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonLib.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonLib.h deleted file mode 100644 index da83b448fb..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonLib.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - -#include "AyonLib.generated.h" - - -UCLASS(Blueprintable) -class AYON_API UAyonLib : public UBlueprintFunctionLibrary -{ - - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, Category = Python) - static bool SetFolderColor(const FString& FolderPath, const FLinearColor& FolderColor,const bool& bForceAdd); - - UFUNCTION(BlueprintCallable, Category = Python) - static TArray GetAllProperties(UClass* cls); -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPublishInstance.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPublishInstance.h deleted file mode 100644 index c89388036f..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPublishInstance.h +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "AyonPublishInstance.generated.h" - - -UCLASS(Blueprintable) -class AYON_API UAyonPublishInstance : public UPrimaryDataAsset -{ - GENERATED_UCLASS_BODY() - -public: - /** - /** - * Retrieves all the assets which are monitored by the Publish Instance (Monitors assets in the directory which is - * placed in) - * - * @return - Set of UObjects. Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetInternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataInternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Retrieves all the assets which have been added manually by the Publish Instance - * - * @return - TSet of assets (UObjects). Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetExternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataExternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Function for returning all the assets in the container combined. - * - * @return Returns all the internal and externally added assets into one set (TSet of UObjects). Careful! They are - * returning raw pointers. Seems like an issue in UE5 - * - * @attention If the bAddExternalAssets variable is false, external assets won't be included! - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetAllAssets() const - { - const TSet>& IteratedSet = bAddExternalAssets - ? AssetDataInternal.Union(AssetDataExternal) - : AssetDataInternal; - - //Create a new TSet only with raw pointers. - TSet ResultSet; - - for (auto& Asset : IteratedSet) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - -private: - UPROPERTY(VisibleAnywhere, Category="Assets") - TSet> AssetDataInternal; - - /** - * This property allows exposing the array to include other assets from any other directory than what it's currently - * monitoring. NOTE: that these assets have to be added manually! They are not automatically registered or added! - */ - UPROPERTY(EditAnywhere, Category = "Assets") - bool bAddExternalAssets = false; - - UPROPERTY(EditAnywhere, meta=(EditCondition="bAddExternalAssets"), Category="Assets") - TSet> AssetDataExternal; - - - void OnAssetCreated(const FAssetData& InAssetData); - void OnAssetRemoved(const FAssetData& InAssetData); - void OnAssetUpdated(const FAssetData& InAssetData); - - bool IsUnderSameDir(const UObject* InAsset) const; - -#ifdef WITH_EDITOR - - void ColorAyonDirs(); - - void SendNotification(const FString& Text) const; - virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; - -#endif -}; diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h deleted file mode 100644 index 3cef8e76b2..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "CoreMinimal.h" -#include "Factories/Factory.h" -#include "AyonPublishInstanceFactory.generated.h" - -/** - * - */ -UCLASS() -class AYON_API UAyonPublishInstanceFactory : public UFactory -{ - GENERATED_BODY() - -public: - UAyonPublishInstanceFactory(const FObjectInitializer& ObjectInitializer); - virtual UObject* FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override; - virtual bool ShouldShowInNewMenu() const override; -}; diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPythonBridge.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPythonBridge.h deleted file mode 100644 index 3c429fd7d3..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonPythonBridge.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once -#include "AyonPythonBridge.generated.h" - -UCLASS(Blueprintable) -class UAyonPythonBridge : public UObject -{ - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, Category = Python) - static UAyonPythonBridge* Get(); - - UFUNCTION(BlueprintImplementableEvent, Category = Python) - void RunInPython_Popup() const; - - UFUNCTION(BlueprintImplementableEvent, Category = Python) - void RunInPython_Dialog() const; - -}; diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonSettings.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonSettings.h deleted file mode 100644 index 4f12d1a5f2..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonSettings.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UObject/Object.h" -#include "AyonSettings.generated.h" - -#define AYON_SETTINGS_FILEPATH IPluginManager::Get().FindPlugin("Ayon")->GetBaseDir() / TEXT("Config") / TEXT("DefaultAyonSettings.ini") - -UCLASS(Config=AyonSettings, DefaultConfig) -class AYON_API UAyonSettings : public UObject -{ - GENERATED_UCLASS_BODY() - - UFUNCTION(BlueprintCallable, BlueprintPure, Category = Settings) - FColor GetFolderFColor() const - { - return FolderColor; - } - - UFUNCTION(BlueprintCallable, BlueprintPure, Category = Settings) - FLinearColor GetFolderFLinearColor() const - { - return FLinearColor(FolderColor); - } - -protected: - - UPROPERTY(config, EditAnywhere, Category = Folders) - FColor FolderColor = FColor(25,45,223); -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonStyle.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonStyle.h deleted file mode 100644 index 58f6af656e..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/AyonStyle.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once -#include "CoreMinimal.h" -#include "Styling/SlateStyle.h" - -class FAyonStyle -{ -public: - static void Initialize(); - static void Shutdown(); - static void ReloadTextures(); - static const ISlateStyle& Get(); - static FName GetStyleSetName(); - - -private: - static TSharedRef< class FSlateStyleSet > Create(); - static TSharedPtr< class FSlateStyleSet > AyonStyleInstance; -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h deleted file mode 100644 index bb995ec452..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "AyonActionResult.generated.h" - -/** - * @brief This macro returns error code when is problem or does nothing when there is no problem. - * @param ActionResult FAyon_ActionResult structure - */ -#define EVALUATE_Ayon_ACTION_RESULT(ActionResult) \ - if(ActionResult.IsProblem()) \ - return ActionResult.GetStatus(); - -/** -* @brief This enum values are humanly readable mapping of error codes. -* Here should be all error codes to be possible find what went wrong. -* TODO: In the future should exists an web document where is mapped error code & what problem occured & how to repair it... -*/ -UENUM() -namespace EAyon_ActionResult -{ - enum Type - { - Ok, - ProjectNotCreated, - ProjectNotLoaded, - ProjectNotSaved, - //....Here insert another values - - //Do not remove! - //Usable for looping through enum values - __Last UMETA(Hidden) - }; -} - - -/** - * @brief This struct holds action result enum and optionally reason of fail - */ -USTRUCT() -struct FAyon_ActionResult -{ - GENERATED_BODY() - -public: - /** @brief Default constructor usable when there is no problem */ - FAyon_ActionResult(); - - /** - * @brief This constructor initializes variables & attempts to log when is error - * @param InEnum Status - */ - FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum); - - /** - * @brief This constructor initializes variables & attempts to log when is error - * @param InEnum Status - * @param InReason Reason of potential fail - */ - FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum, const FText& InReason); - -private: - /** @brief Action status */ - EAyon_ActionResult::Type Status; - - /** @brief Optional reason of fail */ - FText Reason; - -public: - /** - * @brief Checks if there is problematic state - * @return true when status is not equal to EAyon_ActionResult::Ok - */ - bool IsProblem() const; - EAyon_ActionResult::Type& GetStatus(); - FText& GetReason(); - -private: - void TryLog() const; -}; - diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h deleted file mode 100644 index da8e9af661..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - - -#include "GameProjectUtils.h" -#include "Commandlets/AyonActionResult.h" -#include "ProjectDescriptor.h" -#include "Commandlets/Commandlet.h" -#include "AyonGenerateProjectCommandlet.generated.h" - -struct FProjectDescriptor; -struct FProjectInformation; - -/** -* @brief Structure which parses command line parameters and generates FProjectInformation -*/ -USTRUCT() -struct FAyonGenerateProjectParams -{ - GENERATED_BODY() - -private: - FString CommandLineParams; - TArray Tokens; - TArray Switches; - -public: - FAyonGenerateProjectParams(); - FAyonGenerateProjectParams(const FString& CommandLineParams); - - FProjectInformation GenerateUEProjectInformation() const; - -private: - FString TryGetToken(const int32 Index) const; - FString GetProjectFileName() const; - - bool IsSwitchPresent(const FString& Switch) const; -}; - -UCLASS() -class AYON_API UAyonGenerateProjectCommandlet : public UCommandlet -{ - GENERATED_BODY() - -private: - FProjectInformation ProjectInformation; - FProjectDescriptor ProjectDescriptor; - -public: - UAyonGenerateProjectCommandlet(); - - virtual int32 Main(const FString& CommandLineParams) override; - -private: - FAyonGenerateProjectParams ParseParameters(const FString& Params) const; - FAyon_ActionResult TryCreateProject() const; - FAyon_ActionResult TryLoadProjectDescriptor(); - void AttachPluginsToProjectDescriptor(); - FAyon_ActionResult TrySave(); -}; - diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h deleted file mode 100644 index 25b33a63e8..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - -DEFINE_LOG_CATEGORY_STATIC(LogCommandletAyonGenerateProject, Log, All); \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h b/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h deleted file mode 100644 index 9c0c4a69e5..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "OpenPypePublishInstance.generated.h" - - -UCLASS(Blueprintable) -class AYON_API UOpenPypePublishInstance : public UPrimaryDataAsset -{ - GENERATED_UCLASS_BODY() - -public: - /** - /** - * Retrieves all the assets which are monitored by the Publish Instance (Monitors assets in the directory which is - * placed in) - * - * @return - Set of UObjects. Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetInternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataInternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Retrieves all the assets which have been added manually by the Publish Instance - * - * @return - TSet of assets (UObjects). Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetExternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataExternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Function for returning all the assets in the container combined. - * - * @return Returns all the internal and externally added assets into one set (TSet of UObjects). Careful! They are - * returning raw pointers. Seems like an issue in UE5 - * - * @attention If the bAddExternalAssets variable is false, external assets won't be included! - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetAllAssets() const - { - const TSet>& IteratedSet = bAddExternalAssets - ? AssetDataInternal.Union(AssetDataExternal) - : AssetDataInternal; - - //Create a new TSet only with raw pointers. - TSet ResultSet; - - for (auto& Asset : IteratedSet) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - -private: - UPROPERTY(VisibleAnywhere, Category="Assets") - TSet> AssetDataInternal; - - /** - * This property allows exposing the array to include other assets from any other directory than what it's currently - * monitoring. NOTE: that these assets have to be added manually! They are not automatically registered or added! - */ - UPROPERTY(EditAnywhere, Category = "Assets") - bool bAddExternalAssets = false; - - UPROPERTY(EditAnywhere, meta=(EditCondition="bAddExternalAssets"), Category="Assets") - TSet> AssetDataExternal; - - - void OnAssetCreated(const FAssetData& InAssetData); - void OnAssetRemoved(const FAssetData& InAssetData); - void OnAssetUpdated(const FAssetData& InAssetData); - - bool IsUnderSameDir(const UObject* InAsset) const; - -#ifdef WITH_EDITOR - - void ColorOpenPypeDirs(); - - void SendNotification(const FString& Text) const; - virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; - -#endif -}; diff --git a/openpype/hosts/unreal/integration/UE_5.0/BuildPlugin_5-0.bat b/openpype/hosts/unreal/integration/UE_5.0/BuildPlugin_5-0.bat deleted file mode 100644 index 473c248cbe..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/BuildPlugin_5-0.bat +++ /dev/null @@ -1 +0,0 @@ -"C:\Program Files\Epic Games\UE_5.0\Engine\Build\BatchFiles\RunUAT.bat" BuildPlugin -plugin="D:\OpenPype\openpype\hosts\unreal\integration\UE_5.0\Ayon\Ayon.uplugin" -Package="D:\BuiltPlugins\5.0" \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.0/BuildPlugin_5-0_Window.bat b/openpype/hosts/unreal/integration/UE_5.0/BuildPlugin_5-0_Window.bat deleted file mode 100644 index b96de6d6c9..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/BuildPlugin_5-0_Window.bat +++ /dev/null @@ -1 +0,0 @@ -cmd /k "BuildPlugin_5-0.bat" \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.0/CommandletProject/.gitignore b/openpype/hosts/unreal/integration/UE_5.0/CommandletProject/.gitignore deleted file mode 100644 index 80814ef0a6..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/CommandletProject/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -/Saved -/DerivedDataCache -/Intermediate -/Binaries -/Content -/Config -/.idea -/.vs \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.0/CommandletProject/CommandletProject.uproject b/openpype/hosts/unreal/integration/UE_5.0/CommandletProject/CommandletProject.uproject deleted file mode 100644 index 9cf75ebaf2..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.0/CommandletProject/CommandletProject.uproject +++ /dev/null @@ -1,20 +0,0 @@ -{ - "FileVersion": 3, - "EngineAssociation": "5.0", - "Category": "", - "Description": "", - "Plugins": [ - { - "Name": "ModelingToolsEditorMode", - "Enabled": true, - "TargetAllowList": [ - "Editor" - ] - }, - { - "Name": "Ayon", - "Enabled": true, - "Type": "Editor" - } - ] -} \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/.gitignore b/openpype/hosts/unreal/integration/UE_5.1/Ayon/.gitignore deleted file mode 100644 index b32a6f55e5..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -/Binaries -/Intermediate diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Ayon.uplugin b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Ayon.uplugin deleted file mode 100644 index 70ed8f6b9a..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Ayon.uplugin +++ /dev/null @@ -1,24 +0,0 @@ -{ - "FileVersion": 3, - "Version": 1, - "VersionName": "1.0", - "FriendlyName": "Ayon", - "Description": "Ayon Integration", - "Category": "Ayon.Integration", - "CreatedBy": "Ondrej Samohel", - "CreatedByURL": "https://ayon.ynput.io", - "DocsURL": "https://ayon.ynput.io/docs/artist_hosts_unreal", - "MarketplaceURL": "", - "SupportURL": "https://ynput.io/", - "CanContainContent": true, - "EngineVersion": "5.0", - "IsExperimentalVersion": false, - "Installed": true, - "Modules": [ - { - "Name": "Ayon", - "Type": "Editor", - "LoadingPhase": "Default" - } - ] -} diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Config/DefaultAyonSettings.ini b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Config/DefaultAyonSettings.ini deleted file mode 100644 index 9ad7f55201..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Config/DefaultAyonSettings.ini +++ /dev/null @@ -1,2 +0,0 @@ -[/Script/Ayon.AyonSettings] -FolderColor=(R=91,G=197,B=220,A=255) \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Config/FilterPlugin.ini b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Config/FilterPlugin.ini deleted file mode 100644 index ccebca2f32..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Config/FilterPlugin.ini +++ /dev/null @@ -1,8 +0,0 @@ -[FilterPlugin] -; This section lists additional files which will be packaged along with your plugin. Paths should be listed relative to the root plugin directory, and -; may include "...", "*", and "?" wildcards to match directories, files, and individual characters respectively. -; -; Examples: -; /README.txt -; /Extras/... -; /Binaries/ThirdParty/*.dll diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Content/Python/init_unreal.py b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Content/Python/init_unreal.py deleted file mode 100644 index c0b1d0ce5d..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Content/Python/init_unreal.py +++ /dev/null @@ -1,30 +0,0 @@ -import unreal - -ayon_detected = True -try: - from openpype.pipeline import install_host - from openpype.hosts.unreal.api import UnrealHost - - ayon_host = UnrealHost() -except ImportError as exc: - ayon_host = None - ayon_detected = False - unreal.log_error(f"Ayon: cannot load Ayon integration [ {exc} ]") - -if ayon_detected: - install_host(ayon_host) - - -@unreal.uclass() -class AyonIntegration(unreal.AyonPythonBridge): - @unreal.ufunction(override=True) - def RunInPython_Popup(self): - unreal.log_warning("Ayon: showing tools popup") - if ayon_detected: - ayon_host.show_tools_popup() - - @unreal.ufunction(override=True) - def RunInPython_Dialog(self): - unreal.log_warning("Ayon: showing tools dialog") - if ayon_detected: - ayon_host.show_tools_dialog() diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/README.md b/openpype/hosts/unreal/integration/UE_5.1/Ayon/README.md deleted file mode 100644 index 417d490548..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Ayon Unreal Integration plugin - UE 5.1 - -This is plugin for Unreal Editor, creating menu for [Ayon](https://github.com/ynput/OpenPype) tools to run. diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Resources/ayon128.png b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Resources/ayon128.png deleted file mode 100644 index 799d849aa3163ecb16be39c641a6ac30324906b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2358 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 D;gw7~ diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Resources/ayon512.png b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Resources/ayon512.png deleted file mode 100644 index 990d5917e232a0644820428fb2790943de5ffaa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16705 zcmdt~tJv<)UH<2ka%^dAz ztmXfVz)uVo=Yp^36MM|lbKKqh%)+^wz+aFcauWEkNki2Cn8Tx z%h{+@=X3jOfRwK7k0i_xCw2X+s&hmPW{Q*waIr)xalQ(ziYa(IF|utway6+?_U>_? z1K$ay#BD&8ZeFtjDaBRa9PfORqZ_0r$4mxH-&Cnf0EEHq?2xWe+WB2Wn1 zIw62~x0zh`dh9)npYu#*yZma(`0SbjsPlQQus^3E3HWes1s8;4FH5#J1YvYsrpVLO zjoT68P=GDF;~@@FK2v;n{Y@A0|P9!#9 zCqB42ikOX;5O^B~07P-<%)r9$sD)O{9?Q1#r(RxlU%SQ3f>^G=`&<06#G$jnX@pE1 z)i(IRqh|mj)!yA1_oIM%|E$Wz8O8slSZw)qaGZdT;#dwBX5!B+YDx(?i`V}L`ccx6 z3w(1e2YHG{lIaRgMMjP;!r8VKI5Drs#ItD^BR~CP2O{X9z%L!}t>n{&g8XdsLBv*L zly6ddGZJe$b|51K{38B{0LHZ={V_bV7va0uyt4W$*YTy!}7zRuKAsCl<8ehO_A`K{nPy)aZWt)G7%mR)a86$Bi+~>wJch6(3V{Mq^N3WJ* z?h$w>x=A{(t5l>owgh4RrfuSaPXU*~!cPQD_&3p*TZr!a0KmY1`oSD|YL1yoYG=n? zZlWLeKo0aDuH1iG`&-_Fjs8C%yg!cMGdtJjFxwUL_>(6O{Q4F{%ZZTGfG7X~MkN?! zS8@C>=?iSqTA<*(7sbOZs}BIf;ToQ%IsN1bd`J~T)>B<$E?a+@t|LZI%mL9aWgr}< zg8-WFH*MFtFkBZAToj8M-?w+4oFT>;jbTcdIpa7%W?>vps&PA&VJTWkWEhbh#xsAz zcmH%Ykp*ZUvEVC^Pus=FBltAq)g6}#bDQ?bZGH`cOiL?3ll8yN9{$n`=8cE1`iGip zj{MAPA2PeV8Vjj2m&|2ZZuw0}VfChOL45>sfHv|T)JUnCDsKzBRmrI75ANNwY9X1o z6@S-ivT|$Zq+WW@KJ8z{K=6C;lXg`T^n1>Y=d!fc{<@{BdX?;&#{cbbJPN}4x3-W* zY8x_02-u2DQj`cnf!qeMrf!TJ59Fy5K8NP<9-m7s{r;-b+r_dA)ScS!-)h z<}JY=zpV`@IDYjkUFiIJSrsW{KJ$>qMRBYZKbvDzGYSAyC-*))3C}F)PCuI_ne<2~ zhMKYeq%x3#0v5J>suMAq``_gr%g2_8`EXj0s|o}cf)plm4`OoSJdnRoVFv5=Lua>> zBLKi4{T0gFJhWN@A823p z__4wI7#IE{jFhhO(w>EAQ)Q|V?};J+2n;h20O3=6RlI&#KE4sl3hm1j06_A6Om<|B z^UITo+yliQbo^QY%!n5tI<(vyTsF>4`||1b83$b~ZV<%B|5o3(?_gs^(5ysx(3SG} zM{!g?+o2$olgX{@bx3mViu4S1O=-*ppgJ@oobPhR75I%63yPv=4e|-DTp zyR~HW!YuY+!fZhr7-_!?96Df-F@8h1mzCNMUr%M5xoyY)K!EIaLhuQ{$-DK`kYF9& zOX_EMZPq*wDDTKHLV!aLQ>2&QJY072ftT3D{N8CR{vkdTSWGdJJ%IOdzte zeYvq+WMUUA`y9U17hL~6_iLHh<#oP}^fA(|4@kgQUnBy>GqPs7YyGdY=Sc;heyy1& zv}uEMblG2Gm+I#(Eujv`f*_>pGuK(&wdo&X-{|(22HJ{e2s02lAdlsFeJ~fs4txm@ zW&$+OTKDf=5P{ewyj=IOdC=4-^y&AWfB$E)Tw)0D&^mfDCOqm$v9j;!i#EIV#|tx- zoL*4(5`4nJ(%myu#=CFNiP0Xh1sU_4n?}>ZgdqJ7_1B!gr$kn)`w1usBy)W|mz~e* z?vH6tAOzyPWapor=N9DEnMd8dcibxX+z}{Xh5%ziyZ5}ONuMfD3o8+ONB}-rbI^D% zd_bl4Z`qS&>C|hDkC~Bpx^}YTb)(c2Jm7=!4~!U1E+>&&Z?(8)cLdwe(j}yby0R8kNQ@>E zq3sI*QAdPXidM&;N!wIAG;q8(p7`|X()_`3ZFTTBssd7NKqW)S`X=F)ob#t_)qBUa z6h+W|m>*NHC6wU<2z1B|eG#K|EdDZG%;ekPS}^(L6rdFX0JdWXq;Jk&pIWoOeUegr z?^zJ{xi&k6?Nji3z0LRz53XvHnqznz&UD(Hij?AMLCPYlxppC_Rq-KoCI_mA+0H5< zCmJ(M4WWt!p^YwohWncWVGhnRrCLljRXH@D@z_B}5qJAd`GUwiS%WA0M#jaIvyT0V zh+Fr_oj4m1V$%nIkE+IV={?D8t`+Mw&zJZdq~I10M%gMxWV2M`%xmgKfk<_E{_C4v z;M0o+exyV1*?eb_aNw-%pmt798VOQ~%XFoK{S&zB9ivR9fBQ*uM5fAcZ{1~Dqu>@J z6yT%*8B|82zB#>Njz{vX#%?=egW%J10KvKK+PF~tXNF<_A+2q6PTtaUXNHgCZ;1hz z&eRT0_hs{2qASduxl^5X4k2!2C?&x8syxMw`OwHI+f_i%$E(2~e{t>O-#Fk)ObQ3G zpet!sUGso7^7vHuld%j{bbp(R(Ce8LQ2qmsC?+3 z#W9lMBmDmDT05{d0xHmC$bBL`Np0!D-(+seInG5o;|8{R358R~@X7SPQjP>|xo7aj zTgi<=?I}pPL=UbpWs(-qxh^}6s$$P23`y3M+6umnMJYv!Fz^rCd=WLqhAzb3Ek64P zr>(Pc+a6w@ND?d&$q>fL1xVFg9v?_Q_FWT+@|m%V6(jY}K{Urp@L5n20u=4g*&m9sFO%5AT^UASm?(@Q1#Q?CDoH;I zIofXh{rmL07;RHsEaY)zbA33Rv%~8<^AOV&UZv8sLWywK5WIiq`91Iyac{f|;$y74JLW|o{3?3$yXEBB&To4^@0;Wx zQ1)*n^W~){|5Ww4wMF55;wwbHEToqeP~SQl{J}D;mQ>8@G#Is`)??>rw^jBN#mN7L zY?Vtsl8!Tw-&V|#4srwjp^h&WEX}lv}2E2JRee!-~$mE z^<=qqg?6fb(b_RR63To;>F9a?QLZs4kA-E)u_ zd!Xq05;t0JCT--W8=?I=ufH9$Ec7NNr;8COcOOv51a((kPvQjboz90HDl4ceX4x`V zuH4RH4J;nv-cQ!Q;m@!)gI%#wlRT?gOq^$KF8sFqwI)wXL0?JQ*gr{CV+f&0_l0<5 z9j#7`e;>4}uD{o`P{o|2gP6opT*GHRDyH$RiY&1__pcbO%MsecD zA#&+0#ZwPAa-#oDHe~vgxU~kmL}558jMD7?q{Zm25r5$Q*3lJQ`9p#N0{jo5(Je0h z>((1#8q0w^hXd&q@6(Z3p`Fg7nRLNnF{euSqsM8-kFuFj73asdpZQ_}Cp8;eT!=#% zYbUO?T2^cU&?$^*nM*Ur>l-=;_6z^h5yi3#?{$nv%+sR^y}O-LR4=ij2Q07G;t^_> z2Az+>Em0C@60ZhU_!ZlEa z`zC`^DV)Tepg}>^J3Tj3zwj_Yr|&OKvJ8piwM(Xsmk98n7CAB~%zuCT zZ{+xxkcs?IWE`S!*D>zYk3ppL83(-{Fq_I8YtV)I*gweZRa&xByVCSn)`-kWt7xbX z@g@hMnnu87xteCs|8elm&(Ydd20A1|-HB*Ot45;i z`GzG)Nm7nP0)BZy{Fc3-Dq>LJIjq0m5l@}|X34h_!pwEqUpkxFk@i}v#gyo#7>}mSGnw31}x{LP}ulh&0*{_emIs!Sy7lQ@% z3<^QX-hO-*{9GR>X}~QXS|)E;z0T^^b#LsEUtX@69UHhR)fTRLezJba6-{d`$}(Kl zG{8E^)br8)s5Y>-9-`8&^yi4;KCxfsDcxh7e&JC}s1m$RRNINuno5G3WtcZ}#>Q4G z9x^ObaV!$_haYdhYq=!eAPQh3{`VXPp)*v6GC>GMv(p)%+m+7U{tLFd0qq>Q)}3EU4n@nj{x-3&qo}=_aF))XZ|Xp0`W#! z>(cQ9@5Zx-%4HMuj(lJ=?wU5AXq-WG6Hh-DqS~ zwwCzXn!Bpf!R+#Q@-Z*T>c%ifPG9nfV1QfHE&LtK?g8wN-ed$V6cAN4I7b&vDi>oV z@3bz*IH+e4?Xhnpz1DBgBy)313!U5V>avqeAqY|(i)mt_JA{_PkG}9qnI7O03mj)Z zj555Npl9fH$eT4**Yj=BYW#iByFS3G1O(L$Ed=X7pp1IY1}NmOnG#x|;94|-iJu4F zJ&CiQu&8`d@diIPF_#yiRT`kaG<)SKat}YTzb9Kz!_mXWGS9fx@OD79WurHVOg9=Y8Vv504EHdj zv18Zp2CPY>SHroTy{bl|P0X^1*moT*W3ehhLD}iw)8%a@+hV>Z5&dBX#bai7Nut5h zm(u15#fF)g(};Mg{RFlF(mFO>9HX}1BXITah%d~AY{{epp3gx9o0^{%U*j;2C`D%NMFa4r_2zfO+SU8*Z&F1V(HESd7Y&yENnPv=h>#sGp(PosK7`Z`0yBw_8<&fp=(gGJjH3PMUtp(rJXoqrkEe>yHjQ{U68Pm? z))%S1c$NIw55C;+KC2y=NBib5&| zPT^h^f2yRy`+Gj86RBF0!>$a*ijht(wy*iYV^SC-e$%OQQ{FmSjkQGI796NAv*)Zr z#Vm|vrS&y-|IiYwp4Wy>=n{$e3J!eV_PHj;XiqA&&VMUwSz)zvihjIypwmlm5m|6; z@^%~wlF7S!jt)ymnf_5zPm_LLZF*SM^ta?mhM;hjzw>T`khrfD-i@aMF+-^UZxy=WY1WOLSndjrd8{BlOeFk9WH-b?WB z_jIua&%svbr{*iW<2EO?Sev3vwp=Zd#h!EAi(mxfH4+aXpuTiaFF$4mb>4jVlw244 zv~hVz&{P!bshf3@GPN6kI6=xK+}(SU7a`NuSn~0V4%Q z!0GhxG25H}mzdRyN*z%wHG7(j32NYFYG7!7A}IiiQet-bAuCn1uP8uzmtna=aBdA@ zp{!a}sUEw%J(wyqB=fgxi_$ck<@Zn;5tzyReeP;hIJT?(0TJ~$?dx>St+Q2PqcrC~ z-A_}*=$h(y7b@y6V~&S|c1W^};+^@c)D$>wcBQ^wNqhB_Lxoh+m&7c-5dzgZ74!8D zaos52ry)$|BBf} zeKB)vD6Vx$7F%-QKQ1$gG4=0tsx&D371a8Yi}?K$mCcV|&!%x9EMI1~6cBWGX~ThB zqu-?PUM%kUSUA?i>WPBoJ1VIw(2o@MU;SAsvwHKSogP-q>3CL&0BEnsGOizGr|lf! zUXM9vVOWts>yvkvAyTS#09aj2E<2|3TOE-_>$M$~wDX&F4sHV$*beV4W0<+hRj)KO z`vgr=LZk#}3I}Er`wXe#drQ84*wZd_sIyc^LnX4`w1kT;koVcdK~lc@rb5B~2SR1j zE2v#P<+1Fhd6g?0U@`o4;3lja`_&&~?nltxW0Jpq|Gz#7LWL+Ab9<85XD(RbB9QLW z2bIQ$fnxW!q{VMgDW}%BAhA6<9=`weUfA4-=UIGOi}B2oJaopC#K@k${CEeeikv?Y zg1`BP`&=-CEb@KuB?Mr5PYB$19My(aH8))9X^>D5vXOGj%);mU0#PT&ZOyY7oB#WE zFUbI2c$pW4%w9Z1kAy8aNWkH+R~A!UaKLPR9&TZg+00`4zZMY%>cWA-s@p#5py5a1#d1>wx7Z*|A(ZW8yUWsujpbF-UqPmcu!OTQ%;6myp0;$ zL2ZWR+?RW#2vCUN1K-A%=W*&)cO}@itTqTVUsIgD&H*fDNpX|&jR#*-&OUOYc=zA6 zPyoN~KolITWbRjwCE+g|e-0L0C1B%b@%51x*tjOI+Cptv1-7KVjrbqYRP0}A|5a*9 z3R@V^Gar2pt^^TyK4xisj@lUV!>%L$y+ijfK@;5V*x=R9_FM?(m7Et{#wZJSH(o%Db8 zTRdFC^(o>WL>Ms~xt}McoVIQpw~GJhkKk7VC;~^!iPH2&!(|KVMEjavGe)M;O{Lbi!Z$xf62V^`5~`!cB=o4*;Uj@ z^`$53X84Nh_YFzoDZqv=7FbDFJ@d1j-C63FU2tm2pQ1pH%0+Zr&b4q$8&2`5ABH|Q zl=;*h)qh4Dv`0xcxN#qe9}&vugSn}ieK3F6(88Z}dDB{+HPn4^Y8^nfbW&lC(3c%y z)Fb&h1U)=~)|G?sEztg}1Pt5zY`v(onoBT5+NQjsCE z8rda_-aR8qRI4&Wy1a4qlZt_;k&5Fi+%$yZl9cxa5a(2W^FiX~SNdhY$r9g4PL;dX z`1k!MUA_qk+g2g^S*NTeNU_iy@2iXIIAAab@#- zt?cRN`NK%}kYZ&D_#dZD+;Y~H+%e&3C%)j$j$6=xZLE#1*WjHIm-A1!hPj1HV-_M% zZ+M}IQ=^qtl<5d>VuEMUjZrM&slUz9S92yh(-`q#*%Bmm8;c|bVLoJo>CW!qs4ZCM zp(YVuw?5?;zdDd!5*7{U!Z#Vo#5;YZt7_Wmf>S*y`9R-xQgwks?Z(R%+$jgfN+(s9 zv9HHw)M?XWM@M6?3$Lt&Q>1oMl(mqb9`8%;xjJuq=sx+$2jU$9%YHDvKEPG8cw|iRjgQp!S(s&{E?*0g>&EJ4>tdBL3e% zmM-IFL>TIAT5)q_<02(Qp`QXM&?w$GMf*#@AMqJ>?_i*QU9IuxablG|-~ zh}hO!yE}3V?ES>b!=W2z@~+P3=r(Iu>5RFHVC0$lqW?@Q?uqIh74a+6>OUO5FhinX zP(@TyXh$wv*VlqnlPdbj4G#GH52UBIRh?%Ty{XMG54YW?H_ZM(2%wzAVv}`@*w~xd zz-1cdNviRS?>~ZrCZcgdllvtTPAM5T>OXek6F38$ACcn&TVs1>o%T*Y>s8R3){Xm5S$&+u_Fp<( z;Qk2r>(BE0&rP296(*L%x|-t_q(^Tu`1QIQ<+>7X%l5$gxdNWW!gJL}3?h|j$fP3t z;&P`6eL%B)`ft12PMMjpEGlKtQ-UY=cxq8#_as|C_L^eFQdqEg39(pao-Hj?Gp6z4 zXF9(wO~qxuqLo!5FK@$OU~T3 z_M{`4!py+fVW0j(cKbGmOB75iEeD&Gk{h%W z#>Z>rU@YV2HP}^hF5Od54vB_$shVl|OpS=<14POow$6WVi-J!5fg%)iUMkS zILNP=s?8lb9_0oT0!ZiRjTN-8%MiSRRO+(&@uY!andh+X#WD+Fl)uf@2gWjv{a4JM zfKpIm8cpb>vQ;`!gg(0KxDza zQyY`QfCD*sMpH@&)Q1I{BpR>_2S!$L4w!virehTa9gpiD4VPB6UBX=>Hyvqe?X&xy zaJe(zz=QZyM>&0Ha88B?a8Z$PjqRKiUf&;EiTu#h zhK9S2;8YiIN1>VKKV@$)>c=w&x!%6`jJVJBL3$(pS6nbvfj9U-UwyaxemKYcXq|sd zKx;9+*u_8osWUXyLk7)0@{3_22mRInmlXfdR^A(-;UDKWp6JK8RfR2+4^%hDEPGSi z7B`8?!Fn$i|CtpG9K`Ifw7xa8fP&39ZB^Z~>a0gb32hyU1FCZ8^4BNPsz=>(srrN_ zXE*27j2|s4yOX&mWyf*K8we8*g}B7yR#TRF`K`4)=~m7L)I83m@Xj(7>eQF6scFwb zhDg=>2p?nu?++f?-8bD5GzEQ4J))bpU9-aPk4W)fA`^C&9mZ5=oFrj~VYPE;{XMbN zaT>f8AyQ0qvG2U+iW?WSM~{Eb>@T_ooYk3&6LY(Ctax`rM(^c_5T>r%^WOdhu*KiL z8Izn?wSucotVs4o@3ZSChXf+yYC4WZ+wsK1np^MgCgS}l*b_5IyG`^AgF36mWrarV z>Iir{^%w`e2eXxbqiBa{4y+`dvP*sIJMo4i<|sirP`~a zUOck%83lG4iJk&+O!O#^Fxgdu@`|VVxpTe{M%k}dl>@}MiBF!eRB@IwlJm?I^DH;^ zyg8PMPj(F#wQ9b%er>QcUV=3(R<4o&=W@LLmCAb8@r9oSf=9dV9oyA-hy&`HmABiV z1eL=XdnWB$CY%%NqzG+JB={dU1KL=R}Bw~!qvvJNatc-TI$0z(dP%b;*0!-uH!+*ejLSf|$2L994)DB1JH zf7_0Y3xY{nlOP{JJ9YOtiR_GU}?(!#c zhu?T!pp@UJU!?i>b>d*@cK-4GB{M-9Yntp2!7;jJ;T=hwh?!DyL*S;rj7HnU25MNb zosQ*mP#l6XSZqV_*Bkwxw5;}2dXL`8;##}i7kM%%QG$gT(pF3tnMcGi-c&V@wCyN? zU*;+K$C?V(?w_lk`RiJ>Vpybb3DmdX5$#8UfB!ay71vn`jc^+is=Yi7c) zXA$i@W@g?Z@6XmwhFveD3B(&gK#{95_fJNHC)ZM~Fy24jnp?$UsmZD*yWZg!&DXF% zru6GMQ7w6HZr_uKr_k5n z*w$@-$ni*K|1p6Ys}$Rh(AU#4 zLW=XIBn8}b*ZfC*Y@mjGpWH#qo2MwNoJ%g9zfB~k)ldc~G|FYfeM=~tBe|aE*)_h) zVf+`{@@t=(PU6#N2+D-KJHXJ|O5>7zR=b5R*s{!EYq4x>WnnKjJq(V$9RL^hFCJiY zm2?>dhXISv_ABo2)w&#`Bw?IRKN|W$VTbKC~|<5UG9mKmipJTwSmwE6jLP z^r;b2o;B$zT4dY{wh=bmI-jg&&;ajRw7BnTOYO4YywGnqj;-zL;)D8ilIQkaAtlnb zC^pxp0EKYU{L*Xm+iFq64FV?g>;boU`+?NAtv1zcF}{1fjqy^unAL@TxGpV=}9ny z=LU(*?;608U0C(kpr-r%f`0Uz{IxfQdSw+8w3WLDDWH_^t8;pY6w}Ck-ywrKO>Qle z4xTt4KE%B?pUiq>`ihc3Qlt1z^Bwe)&v;#U5CxgLH;<*a*xxeXe2vF{ITdy+$AwpR zz6@TF$iQ4nRrs3iblXYf4M<4`I_YQHzm5gijO&jVNqI_i#dhllAw= z8smQ$<-;Et*UO%QwM~M+kx>bIQ|80;9cZ<&#V=6*JC#tP=t2*=8m!q9OR0jLTqEDo9&%6sz-2q`@D4$!1cc15t z1K5@cfiKPp31i@>NmZ%QoPxK%okfa0LBRHt(a1R($29-)o>>>JIpUlhUjl7?THiKV zmiVcSmQ*}ls~p&deYOy)JVw%2Oz2vnfC{2eMU0fzaee|ZcGdt(H3;o45I0}bz_VHAnZrOE5?Qo?C_ZRp2 z^1auX;D*hZMuc_C8zo<6oi(E9>if?WqA7vrlL-HGe`Z29zb2W-wNo6>ojH}j)iN9M z91(`mHQP|?>~&bitL*Q%{)|2u`#qn(99$VPgYbSFiuBHz@-$!U@f~Rm?w8jJ;2hZ( z{!^!UFF+ydn2+-7zjV)__Nv*Ea9t?;G(v$8pF8K`z*ts8YWF&`taUvQ=a$x(xBO<~ zb-;1r&bVF@o_jxs;4>D_yrWp8c@Qs2kaz1|=!o~9pif`G%1nCGoB|Wf_TXX6F-xi8 zRy@KJdzm*tY+l;$v#^S+^Ve=m(=M+1$-4o~JjwZfJ*^83P1t``BM)zJIF{c1s_d&Y z7Nqzk3}Ew?!EMbQzL#}$nU>MHOwIy0zU# zo3LDD;v8}kdetTLEw~1*?(a{H>~f<9hJ7b`w2}kAbb~}&_qKL+X7eb?)Hl)1Y`lHC zBU9$SFfr!!Ey>+5ysFFAyfz5UK<;O_@P&kfovO*SbCtlEF(7+}iWw~9)ON|{%nf3A zp2jMBH28=vhA}o`%`;8>tm_Gw0G);(W*dts$jKvp!~TF7Z3sR<3ECUxqza4hR)MJL zwZ7L=Ha5+*leOwDota+bXLPc}3X2&66>X?ap*tRJ>esdwVEF#UvR(Gq%GXPcuh8fj zZL2ggSc{de@$H4G6{k1@Ane~4%Vj3+uLo2OF#XV!3Tzx2!GU>^X=ts zk|PpJcOx2ewno<30h^dt^AJa2dn`2~My&dttZuVn&5C=x#1!-vV54#L-d^?zIr&ACXy!veU{nglfxgQ6BxOmQ`>3PkFAT<00w;Zr zkN5Dk$foz|E0{iKV9q&-mU9#^ZeF;%_C^Duc}f5Tm39q4$(yy<*p0F%fpPtNZ+xdt zu)>X3G{EAP5vEdR+1om1M@L=_GOn-kUUJ(H_Y5ZY`nd)dD%$Dp+xNW(gJ5ghbPUhQ zBJd$p)7-vgZ!PF07TVr&>SMU5_!)144x)g$<9p9OHo+JX_BN0Gt;6WSFh^AOUvh{- z;N6?Unh9Y*K;3F!Q8uXfKPA|v0T@Kre>WY=FgqEcq6G|ETI}&!w!Hc6BEZpYsoBFEzw^$Q5I4X8u@_X_ z_Vm-@^nIWt>jQ}a(;=Sf0V|L!bl|-cgewSo745=q4-R5pH%(S~$z3~Jz0q^mq$P;> zCNz2LLVfHREagXBx_)y@QcD(qYCB>3*ePs!&lkR}n{U|76%9*w8bz5OBK4Es<~{6&9VeG=aL!e&xP@<{zAp@X6N@)^E&Wy7 zFpe|`4fYGOLo5U+z>OaT`N^gEJ#|eqpx@}Gqe+n1A^AwTJR^+*U0kd2&Hg_X|Bu{; zd*06XAQztj3s*vbmS=-S(;(&Q@g(J|yHJEZaz6g_6XUiPGx6)8rf(xnV%Lg~sqG?F z>=Zksy^D7$Z(fY;m9f#BJnyV`F_iaVC$eIkq@aArYx^tOqsxJrtb7&a{R_uEs+L3? z%p;3Aqfu<{s3x{pnx4axT3MD?sHI`ZjGG+B?nXqs3Ze`5cHxCtY~^8WhlBL`rR%3g(D*yBO~i1lr>^d;fIH@Yyu;?2{J1!FUKe?1;z zec&qVCVAm^Di6cAOXH9spEO#p3?`!M*ioy6G87Tl%>Em9>Rd|V0&erb0@5T^@pQI z4`KU><7voU;#YMqE)^hv)n1S_D_WXq1pJBzeM%~m*Bmb90ShOvSSnR6M)G#D-`awB zajQcQrOeg3@5loIj;QA6s$fmLTiFH5v#1wJYfQK1j|b5q+3fFvsn`nT+@TZvBiEcf2(C}h zI_ek!DAd$7KDIEJs*m=U4hJmMf7&Z`&VsZsX=0LYAP60w#%<=DE3U))z{T(PBjkH7 z82JD8NT=_ zBEJ>9n4#(q#GUgZlGN`IQ7+YhLsvjw-Z)a&f{I^icVygON`$)g4Y@xC?of#ri3TkCI;7>t z@gz1Ia%H1aM57@JV52#p`Es>t!3#4CtGbFD17?>tZNe{a7q*lT)NYD5{A4CL0Zo|5_D07UV> zMX|T;Mt)khM1Yu7(@eM7e~W~UonGH*7{^?K$EW~@qsOroloGUnf~cdX@i#6~G!H36 zVb~bEAG6W~Qq%d>%lO-0N98Zz4U>BwVH=t&SXlB3L_w{>GviU}DP!s>klW=hX`gyc z01Q6Mn2CyeXr^*}OVtgCJ7K{|GvkXMD%F7Oe_OUFW?4KF_e=d2rzG$|=N7=2z|sd! z1bhM4!@>0iW*8Z8jJ(R4kW5^zh=l+rDV{6}24ZrH4V>{*{%=_twvJ8Ix4nGrz^F=@ z`zfGP-opA=7xg)pH>i=^V|0TQ77!@OAqkP%$c~h0<-gi4Zwp-rWXQ? zD_ikOY6FkP5lo1}x9?ej`+OPzg?Z~)4io@5b*zYU#Y=foSC@|NMF9_M$pK2;H0b{z zQzC@uT)^fWP_3Dy3z))M-5lcZ00m+Y2_FGloiPXem|G{$jW`hzsh*6-5~bpteUNrj z7&+(A^F;#yGyu~v*G{TbynQeP*fRaU7rhvf{{Xf=4gk$53*Jcr1UkOX#QDQoePB7z z9~ywB^xz1dO8l=_px_O$g%q@hN-`-dlieF|)t`G*x+GnJ#B<>(C09Y>Aqa-&-_a;U zQwRVm@$?!H8MSR*9$#XMU*gUJ&>kq5cDjD&$cME$!&o4M&v4W*v(Co5r|S^T7g_Vx zu}t`!UJQ~T8ZQU{G=>_y-gD3U92Yu+eE!l6c(}8a!3Z{Ervr<_)7 zcz}0!vR%K^=QNYT95A(_4g>*nzh{#OnMmU9kH)TR0u53*8e z(FcTecRC_=?mefRvjF(W#c=EzDfD8|0Fl_M>H4+5ak91U2Dd22RzLCP zPb$8F;OvDk7iPLsp)>;zinvRE)-2a@f>QIhy%3EBbV8SM7GOr)wyg!N_+WuvqE_fO zIwxqOxJ^I?(w=J_w>EA;bz)B0JHT?q z>Z_oq-8kH7v)tKp;7}xC{`O;&1R|KT%Jh;hRDoKjjG8hW8hP6ODF~cmSh$JFS$;eG zpF=#fXyM;#`0tuTc>&%q=pBCbFjt-7^wC&hmxG`f@TS(&?>jZDss6~IIB+0B5B9Ny zSpX<7^W;5H^ZkVO^gj|Dx_ zOVkcpJo^K%c*){Bw22psf5XZ`Y7>2|$g!S!ML_$0zxnafZQO#%>V`1`Zi557xmGQ^ zs!Rq|;*5q(kANnTf+%kiK52Y~6(+wnf9W5ea|!y!9D1I(P(CevuB>iF<&Kay9a5%8S-OT46apu##TKuf!Ep45rXtHRRsXe9Q5Hc z^hKxi#pi+%)7cG?{zldVvg16c-rmNB4*L^pNi{6X1jM1qlW0vA0hf%N8Hw(mS4(d{m=`0v~|! zeh*!z31-|?vU{aa<0QNbt`v(3BLwW62VZYnDOd29Q{B>+yl1dyPVPga_%k0GMKM|_ zqdzgx=kseToB9hkqtCqrU6=vhetgpU5$;)&t{*xn8=JV0g3fG&&qZUS%kWVdWE7eN z;G9G9%XnW_D-(&5nViZpjb=t1E$$A^Gy|@2pWTd8hJPjdgVYX-7RT2^(McisPEPZs z7w_j5HLiTq+&bmf7GiY*S*}IsliD9Az}{=azyxqY_S$5k_;};8tQ&RQ_lLQgWEDfz zx-zewpRC~Nch^1*Pk;UGkqnnS2eobv3}MapAction( - FAyonCommands::Get().AyonTools, - FExecuteAction::CreateRaw(this, &FAyonModule::MenuPopup), - FCanExecuteAction()); - PluginCommands->MapAction( - FAyonCommands::Get().AyonToolsDialog, - FExecuteAction::CreateRaw(this, &FAyonModule::MenuDialog), - FCanExecuteAction()); - - UToolMenus::RegisterStartupCallback( - FSimpleMulticastDelegate::FDelegate::CreateRaw(this, &FAyonModule::RegisterMenus)); - - RegisterSettings(); -} - -void FAyonModule::ShutdownModule() -{ - UToolMenus::UnRegisterStartupCallback(this); - - UToolMenus::UnregisterOwner(this); - - FAyonStyle::Shutdown(); - - FAyonCommands::Unregister(); -} - - -void FAyonModule::RegisterSettings() -{ - ISettingsModule& SettingsModule = FModuleManager::LoadModuleChecked("Settings"); - - // Create the new category - // TODO: After the movement of the plugin from the game to editor, it might be necessary to move this! - ISettingsContainerPtr SettingsContainer = SettingsModule.GetContainer("Project"); - - UAyonSettings* Settings = GetMutableDefault(); - - // Register the settings - ISettingsSectionPtr SettingsSection = SettingsModule.RegisterSettings("Project", "Ayon", "General", - LOCTEXT("RuntimeGeneralSettingsName", - "General"), - LOCTEXT("RuntimeGeneralSettingsDescription", - "Base configuration for Open Pype Module"), - Settings - ); - - // Register the save handler to your settings, you might want to use it to - // validate those or just act to settings changes. - if (SettingsSection.IsValid()) - { - SettingsSection->OnModified().BindRaw(this, &FAyonModule::HandleSettingsSaved); - } -} - -bool FAyonModule::HandleSettingsSaved() -{ - UAyonSettings* Settings = GetMutableDefault(); - bool ResaveSettings = false; - - // You can put any validation code in here and resave the settings in case an invalid - // value has been entered - - if (ResaveSettings) - { - Settings->SaveConfig(); - } - - return true; -} - -void FAyonModule::RegisterMenus() -{ - // Owner will be used for cleanup in call to UToolMenus::UnregisterOwner - FToolMenuOwnerScoped OwnerScoped(this); - - { - UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("LevelEditor.MainMenu.Tools"); - { - // FToolMenuSection& Section = Menu->FindOrAddSection("Ayon"); - FToolMenuSection& Section = Menu->AddSection( - "Ayon", - TAttribute(FText::FromString("Ayon")), - FToolMenuInsert("Programming", EToolMenuInsertType::Before) - ); - Section.AddMenuEntryWithCommandList(FAyonCommands::Get().AyonTools, PluginCommands); - Section.AddMenuEntryWithCommandList(FAyonCommands::Get().AyonToolsDialog, PluginCommands); - } - UToolMenu* ToolbarMenu = UToolMenus::Get()->ExtendMenu("LevelEditor.LevelEditorToolBar.PlayToolBar"); - { - FToolMenuSection& Section = ToolbarMenu->FindOrAddSection("PluginTools"); - { - FToolMenuEntry& Entry = Section.AddEntry( - FToolMenuEntry::InitToolBarButton(FAyonCommands::Get().AyonTools)); - Entry.SetCommandList(PluginCommands); - } - } - } -} - - -void FAyonModule::MenuPopup() -{ - UAyonPythonBridge* bridge = UAyonPythonBridge::Get(); - bridge->RunInPython_Popup(); -} - -void FAyonModule::MenuDialog() -{ - UAyonPythonBridge* bridge = UAyonPythonBridge::Get(); - bridge->RunInPython_Dialog(); -} - -IMPLEMENT_MODULE(FAyonModule, Ayon) diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp deleted file mode 100644 index 3022757dc8..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonAssetContainer.cpp +++ /dev/null @@ -1,113 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#include "AyonAssetContainer.h" -#include "AssetRegistry/AssetRegistryModule.h" -#include "Misc/PackageName.h" -#include "Containers/UnrealString.h" - -UAyonAssetContainer::UAyonAssetContainer(const FObjectInitializer& ObjectInitializer) -: UAssetUserData(ObjectInitializer) -{ - FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); - FString path = UAyonAssetContainer::GetPathName(); - UE_LOG(LogTemp, Warning, TEXT("UAyonAssetContainer %s"), *path); - FARFilter Filter; - Filter.PackagePaths.Add(FName(*path)); - - AssetRegistryModule.Get().OnAssetAdded().AddUObject(this, &UAyonAssetContainer::OnAssetAdded); - AssetRegistryModule.Get().OnAssetRemoved().AddUObject(this, &UAyonAssetContainer::OnAssetRemoved); - AssetRegistryModule.Get().OnAssetRenamed().AddUObject(this, &UAyonAssetContainer::OnAssetRenamed); -} - -void UAyonAssetContainer::OnAssetAdded(const FAssetData& AssetData) -{ - TArray split; - - // get directory of current container - FString selfFullPath = UAyonAssetContainer::GetPathName(); - FString selfDir = FPackageName::GetLongPackagePath(*selfFullPath); - - // get asset path and class - FString assetPath = AssetData.GetFullName(); - FString assetFName = AssetData.GetObjectPathString(); - UE_LOG(LogTemp, Log, TEXT("asset name %s"), *assetFName); - // split path - assetPath.ParseIntoArray(split, TEXT(" "), true); - - FString assetDir = FPackageName::GetLongPackagePath(*split[1]); - - // take interest only in paths starting with path of current container - if (assetDir.StartsWith(*selfDir)) - { - // exclude self - if (assetFName != "AssetContainer") - { - assets.Add(assetPath); - assetsData.Add(AssetData); - UE_LOG(LogTemp, Log, TEXT("%s: asset added to %s"), *selfFullPath, *selfDir); - } - } -} - -void UAyonAssetContainer::OnAssetRemoved(const FAssetData& AssetData) -{ - TArray split; - - // get directory of current container - FString selfFullPath = UAyonAssetContainer::GetPathName(); - FString selfDir = FPackageName::GetLongPackagePath(*selfFullPath); - - // get asset path and class - FString assetPath = AssetData.GetFullName(); - FString assetFName = AssetData.GetObjectPathString(); - - // split path - assetPath.ParseIntoArray(split, TEXT(" "), true); - - FString assetDir = FPackageName::GetLongPackagePath(*split[1]); - - // take interest only in paths starting with path of current container - FString path = UAyonAssetContainer::GetPathName(); - FString lpp = FPackageName::GetLongPackagePath(*path); - - if (assetDir.StartsWith(*selfDir)) - { - // exclude self - if (assetFName != "AssetContainer") - { - // UE_LOG(LogTemp, Warning, TEXT("%s: asset removed"), *lpp); - assets.Remove(assetPath); - assetsData.Remove(AssetData); - } - } -} - -void UAyonAssetContainer::OnAssetRenamed(const FAssetData& AssetData, const FString& str) -{ - TArray split; - - // get directory of current container - FString selfFullPath = UAyonAssetContainer::GetPathName(); - FString selfDir = FPackageName::GetLongPackagePath(*selfFullPath); - - // get asset path and class - FString assetPath = AssetData.GetFullName(); - FString assetFName = AssetData.GetObjectPathString(); - - // split path - assetPath.ParseIntoArray(split, TEXT(" "), true); - - FString assetDir = FPackageName::GetLongPackagePath(*split[1]); - if (assetDir.StartsWith(*selfDir)) - { - // exclude self - if (assetFName != "AssetContainer") - { - - assets.Remove(str); - assets.Add(assetPath); - assetsData.Remove(AssetData); - // UE_LOG(LogTemp, Warning, TEXT("%s: asset renamed %s"), *lpp, *str); - } - } -} diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp deleted file mode 100644 index 086fc1036e..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonAssetContainerFactory.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "AyonAssetContainerFactory.h" -#include "AyonAssetContainer.h" - -UAyonAssetContainerFactory::UAyonAssetContainerFactory(const FObjectInitializer& ObjectInitializer) - : UFactory(ObjectInitializer) -{ - SupportedClass = UAyonAssetContainer::StaticClass(); - bCreateNew = false; - bEditorImport = true; -} - -UObject* UAyonAssetContainerFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) -{ - UAyonAssetContainer* AssetContainer = NewObject(InParent, Class, Name, Flags); - return AssetContainer; -} - -bool UAyonAssetContainerFactory::ShouldShowInNewMenu() const { - return false; -} diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonCommands.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonCommands.cpp deleted file mode 100644 index 566ee1dcd1..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonCommands.cpp +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#include "AyonCommands.h" - -#define LOCTEXT_NAMESPACE "FAyonModule" - -void FAyonCommands::RegisterCommands() -{ - UI_COMMAND(AyonTools, "Ayon Tools", "Pipeline tools", EUserInterfaceActionType::Button, FInputChord()); - UI_COMMAND(AyonToolsDialog, "Ayon Tools Dialog", "Pipeline tools dialog", EUserInterfaceActionType::Button, FInputChord()); -} - -#undef LOCTEXT_NAMESPACE diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonLib.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonLib.cpp deleted file mode 100644 index 7cfa0c9c30..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonLib.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#include "AyonLib.h" - -#include "AssetViewUtils.h" -#include "UObject/UnrealType.h" - -/** - * Sets color on folder icon on given path - * @param InPath - path to folder - * @param InFolderColor - color of the folder - * @warning This color will appear only after Editor restart. Is there a better way? - */ - -bool UAyonLib::SetFolderColor(const FString& FolderPath, const FLinearColor& FolderColor, const bool& bForceAdd) -{ - if (AssetViewUtils::DoesFolderExist(FolderPath)) - { - const TSharedPtr LinearColor = MakeShared(FolderColor); - - AssetViewUtils::SaveColor(FolderPath, LinearColor, true); - UE_LOG(LogAssetData, Display, TEXT("A color {%s} has been set to folder \"%s\""), *LinearColor->ToString(), - *FolderPath) - return true; - } - - UE_LOG(LogAssetData, Display, TEXT("Setting a color {%s} to folder \"%s\" has failed! Directory doesn't exist!"), - *FolderColor.ToString(), *FolderPath) - return false; -} - -/** - * Returns all poperties on given object - * @param cls - class - * @return TArray of properties - */ -TArray UAyonLib::GetAllProperties(UClass* cls) -{ - TArray Ret; - if (cls != nullptr) - { - for (TFieldIterator It(cls); It; ++It) - { - FProperty* Property = *It; - if (Property->HasAnyPropertyFlags(EPropertyFlags::CPF_Edit)) - { - Ret.Add(Property->GetName()); - } - } - } - return Ret; -} diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp deleted file mode 100644 index d1b47a19d4..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPublishInstance.cpp +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "AyonPublishInstance.h" -#include "AssetRegistry/AssetRegistryModule.h" -#include "AssetToolsModule.h" -#include "Framework/Notifications/NotificationManager.h" -#include "AyonLib.h" -#include "AyonSettings.h" -#include "Widgets/Notifications/SNotificationList.h" - - -//Moves all the invalid pointers to the end to prepare them for the shrinking -#define REMOVE_INVALID_ENTRIES(VAR) VAR.CompactStable(); \ - VAR.Shrink(); - -UAyonPublishInstance::UAyonPublishInstance(const FObjectInitializer& ObjectInitializer) - : UPrimaryDataAsset(ObjectInitializer) -{ - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked< - FAssetRegistryModule>("AssetRegistry"); - - const FPropertyEditorModule& PropertyEditorModule = FModuleManager::LoadModuleChecked( - "PropertyEditor"); - - FString Left, Right; - GetPathName().Split("/" + GetName(), &Left, &Right); - - FARFilter Filter; - Filter.PackagePaths.Emplace(FName(Left)); - - TArray FoundAssets; - AssetRegistryModule.GetRegistry().GetAssets(Filter, FoundAssets); - - for (const FAssetData& AssetData : FoundAssets) - OnAssetCreated(AssetData); - - REMOVE_INVALID_ENTRIES(AssetDataInternal) - REMOVE_INVALID_ENTRIES(AssetDataExternal) - - AssetRegistryModule.Get().OnAssetAdded().AddUObject(this, &UAyonPublishInstance::OnAssetCreated); - AssetRegistryModule.Get().OnAssetRemoved().AddUObject(this, &UAyonPublishInstance::OnAssetRemoved); - AssetRegistryModule.Get().OnAssetUpdated().AddUObject(this, &UAyonPublishInstance::OnAssetUpdated); - -#ifdef WITH_EDITOR - ColorAyonDirs(); -#endif -} - -void UAyonPublishInstance::OnAssetCreated(const FAssetData& InAssetData) -{ - TArray split; - - UObject* Asset = InAssetData.GetAsset(); - - if (!IsValid(Asset)) - { - UE_LOG(LogAssetData, Warning, TEXT("Asset \"%s\" is not valid! Skipping the addition."), - *InAssetData.GetSoftObjectPath().ToString()); - return; - } - - const bool result = IsUnderSameDir(Asset) && Cast(Asset) == nullptr; - - if (result) - { - if (AssetDataInternal.Emplace(Asset).IsValidId()) - { - UE_LOG(LogTemp, Log, TEXT("Added an Asset to PublishInstance - Publish Instance: %s, Asset %s"), - *this->GetName(), *Asset->GetName()); - } - } -} - -void UAyonPublishInstance::OnAssetRemoved(const FAssetData& InAssetData) -{ - if (Cast(InAssetData.GetAsset()) == nullptr) - { - if (AssetDataInternal.Contains(nullptr)) - { - AssetDataInternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataInternal) - } - else - { - AssetDataExternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataExternal) - } - } -} - -void UAyonPublishInstance::OnAssetUpdated(const FAssetData& InAssetData) -{ - REMOVE_INVALID_ENTRIES(AssetDataInternal); - REMOVE_INVALID_ENTRIES(AssetDataExternal); -} - -bool UAyonPublishInstance::IsUnderSameDir(const UObject* InAsset) const -{ - FString ThisLeft, ThisRight; - this->GetPathName().Split(this->GetName(), &ThisLeft, &ThisRight); - - return InAsset->GetPathName().StartsWith(ThisLeft); -} - -#ifdef WITH_EDITOR - -void UAyonPublishInstance::ColorAyonDirs() -{ - FString PathName = this->GetPathName(); - - //Check whether the path contains the defined Ayon folder - if (!PathName.Contains(TEXT("Ayon"))) return; - - //Get the base path for open pype - FString PathLeft, PathRight; - PathName.Split(FString("Ayon"), &PathLeft, &PathRight); - - if (PathLeft.IsEmpty() || PathRight.IsEmpty()) - { - UE_LOG(LogAssetData, Error, TEXT("Failed to retrieve the base Ayon directory!")) - return; - } - - PathName.RemoveFromEnd(PathRight, ESearchCase::CaseSensitive); - - //Get the current settings - const UAyonSettings* Settings = GetMutableDefault(); - - //Color the base folder - UAyonLib::SetFolderColor(PathName, Settings->GetFolderFColor(), false); - - //Get Sub paths, iterate through them and color them according to the folder color in UAyonSettings - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked( - "AssetRegistry"); - - TArray PathList; - - AssetRegistryModule.Get().GetSubPaths(PathName, PathList, true); - - if (PathList.Num() > 0) - { - for (const FString& Path : PathList) - { - UAyonLib::SetFolderColor(Path, Settings->GetFolderFColor(), false); - } - } -} - -void UAyonPublishInstance::SendNotification(const FString& Text) const -{ - FNotificationInfo Info{FText::FromString(Text)}; - - Info.bFireAndForget = true; - Info.bUseLargeFont = false; - Info.bUseThrobber = false; - Info.bUseSuccessFailIcons = false; - Info.ExpireDuration = 4.f; - Info.FadeOutDuration = 2.f; - - FSlateNotificationManager::Get().AddNotification(Info); - - UE_LOG(LogAssetData, Warning, - TEXT( - "Removed duplicated asset from the AssetsDataExternal in Container \"%s\", Asset is already included in the AssetDataInternal!" - ), *GetName() - ) -} - - -void UAyonPublishInstance::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - - if (PropertyChangedEvent.ChangeType == EPropertyChangeType::ValueSet && - PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED( - UAyonPublishInstance, AssetDataExternal)) - { - // Check for duplicated assets - for (const auto& Asset : AssetDataInternal) - { - if (AssetDataExternal.Contains(Asset)) - { - AssetDataExternal.Remove(Asset); - return SendNotification( - "You are not allowed to add assets into AssetDataExternal which are already included in AssetDataInternal!"); - } - } - - // Check if no UAyonPublishInstance type assets are included - for (const auto& Asset : AssetDataExternal) - { - if (Cast(Asset.Get()) != nullptr) - { - AssetDataExternal.Remove(Asset); - return SendNotification("You are not allowed to add publish instances!"); - } - } - } -} - -#endif diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp deleted file mode 100644 index f79c428a6d..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPublishInstanceFactory.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#include "AyonPublishInstanceFactory.h" -#include "AyonPublishInstance.h" - -UAyonPublishInstanceFactory::UAyonPublishInstanceFactory(const FObjectInitializer& ObjectInitializer) - : UFactory(ObjectInitializer) -{ - SupportedClass = UAyonPublishInstance::StaticClass(); - bCreateNew = false; - bEditorImport = true; -} - -UObject* UAyonPublishInstanceFactory::FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) -{ - check(InClass->IsChildOf(UAyonPublishInstance::StaticClass())); - return NewObject(InParent, InClass, InName, Flags); -} - -bool UAyonPublishInstanceFactory::ShouldShowInNewMenu() const { - return false; -} diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp deleted file mode 100644 index 0ed4b2f704..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonPythonBridge.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#include "AyonPythonBridge.h" - -UAyonPythonBridge* UAyonPythonBridge::Get() -{ - TArray AyonPythonBridgeClasses; - GetDerivedClasses(UAyonPythonBridge::StaticClass(), AyonPythonBridgeClasses); - int32 NumClasses = AyonPythonBridgeClasses.Num(); - if (NumClasses > 0) - { - return Cast(AyonPythonBridgeClasses[NumClasses - 1]->GetDefaultObject()); - } - return nullptr; -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonSettings.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonSettings.cpp deleted file mode 100644 index da388fbc8f..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonSettings.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#include "AyonSettings.h" - -#include "Interfaces/IPluginManager.h" -#include "UObject/UObjectGlobals.h" - -/** - * Mainly is used for initializing default values if the DefaultAyonSettings.ini file does not exist in the saved config - */ -UAyonSettings::UAyonSettings(const FObjectInitializer& ObjectInitializer) -{ - - const FString ConfigFilePath = AYON_SETTINGS_FILEPATH; - - // This has to be probably in the future set using the UE Reflection system - FColor Color; - GConfig->GetColor(TEXT("/Script/Ayon.AyonSettings"), TEXT("FolderColor"), Color, ConfigFilePath); - - FolderColor = Color; -} \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonStyle.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonStyle.cpp deleted file mode 100644 index d88df78735..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/AyonStyle.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#include "AyonStyle.h" -#include "Framework/Application/SlateApplication.h" -#include "Styling/SlateStyleRegistry.h" -#include "Slate/SlateGameResources.h" -#include "Interfaces/IPluginManager.h" -#include "Styling/SlateStyleMacros.h" - -#define RootToContentDir Style->RootToContentDir - -TSharedPtr FAyonStyle::AyonStyleInstance = nullptr; - -void FAyonStyle::Initialize() -{ - if (!AyonStyleInstance.IsValid()) - { - AyonStyleInstance = Create(); - FSlateStyleRegistry::RegisterSlateStyle(*AyonStyleInstance); - } -} - -void FAyonStyle::Shutdown() -{ - FSlateStyleRegistry::UnRegisterSlateStyle(*AyonStyleInstance); - ensure(AyonStyleInstance.IsUnique()); - AyonStyleInstance.Reset(); -} - -FName FAyonStyle::GetStyleSetName() -{ - static FName StyleSetName(TEXT("AyonStyle")); - return StyleSetName; -} - -const FVector2D Icon16x16(16.0f, 16.0f); -const FVector2D Icon20x20(20.0f, 20.0f); -const FVector2D Icon40x40(40.0f, 40.0f); - -TSharedRef< FSlateStyleSet > FAyonStyle::Create() -{ - TSharedRef< FSlateStyleSet > Style = MakeShareable(new FSlateStyleSet("AyonStyle")); - Style->SetContentRoot(IPluginManager::Get().FindPlugin("Ayon")->GetBaseDir() / TEXT("Resources")); - - Style->Set("Ayon.AyonTools", new IMAGE_BRUSH(TEXT("ayon40"), Icon40x40)); - Style->Set("Ayon.AyonToolsDialog", new IMAGE_BRUSH(TEXT("ayon40"), Icon40x40)); - - return Style; -} - -void FAyonStyle::ReloadTextures() -{ - if (FSlateApplication::IsInitialized()) - { - FSlateApplication::Get().GetRenderer()->ReloadTextureResources(); - } -} - -const ISlateStyle& FAyonStyle::Get() -{ - return *AyonStyleInstance; -} diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp deleted file mode 100644 index 2a137e3ed7..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/Commandlets/AyonActionResult.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#include "Commandlets/AyonActionResult.h" -#include "Logging/Ayon_Log.h" - -EAyon_ActionResult::Type& FAyon_ActionResult::GetStatus() -{ - return Status; -} - -FText& FAyon_ActionResult::GetReason() -{ - return Reason; -} - -FAyon_ActionResult::FAyon_ActionResult():Status(EAyon_ActionResult::Type::Ok) -{ - -} - -FAyon_ActionResult::FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum):Status(InEnum) -{ - TryLog(); -} - -FAyon_ActionResult::FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum, const FText& InReason):Status(InEnum), Reason(InReason) -{ - TryLog(); -}; - -bool FAyon_ActionResult::IsProblem() const -{ - return Status != EAyon_ActionResult::Ok; -} - -void FAyon_ActionResult::TryLog() const -{ - if(IsProblem()) - UE_LOG(LogCommandletAyonGenerateProject, Error, TEXT("%s"), *Reason.ToString()); -} diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp deleted file mode 100644 index ed876c8128..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/Commandlets/Implementations/AyonGenerateProjectCommandlet.cpp +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#include "Commandlets/Implementations/AyonGenerateProjectCommandlet.h" - -#include "GameProjectUtils.h" -#include "AyonConstants.h" -#include "Commandlets/AyonActionResult.h" -#include "ProjectDescriptor.h" - -int32 UAyonGenerateProjectCommandlet::Main(const FString& CommandLineParams) -{ - //Parses command line parameters & creates structure FProjectInformation - const FAyonGenerateProjectParams ParsedParams = FAyonGenerateProjectParams(CommandLineParams); - ProjectInformation = ParsedParams.GenerateUEProjectInformation(); - - //Creates .uproject & other UE files - EVALUATE_Ayon_ACTION_RESULT(TryCreateProject()); - - //Loads created .uproject - EVALUATE_Ayon_ACTION_RESULT(TryLoadProjectDescriptor()); - - //Adds needed plugin to .uproject - AttachPluginsToProjectDescriptor(); - - //Saves .uproject - EVALUATE_Ayon_ACTION_RESULT(TrySave()); - - //When we are here, there should not be problems in generating Unreal Project for Ayon - return 0; -} - - -FAyonGenerateProjectParams::FAyonGenerateProjectParams(): FAyonGenerateProjectParams("") -{ -} - -FAyonGenerateProjectParams::FAyonGenerateProjectParams(const FString& CommandLineParams): CommandLineParams( - CommandLineParams) -{ - UCommandlet::ParseCommandLine(*CommandLineParams, Tokens, Switches); -} - -FProjectInformation FAyonGenerateProjectParams::GenerateUEProjectInformation() const -{ - FProjectInformation ProjectInformation = FProjectInformation(); - ProjectInformation.ProjectFilename = GetProjectFileName(); - - ProjectInformation.bShouldGenerateCode = IsSwitchPresent("GenerateCode"); - - return ProjectInformation; -} - -FString FAyonGenerateProjectParams::TryGetToken(const int32 Index) const -{ - return Tokens.IsValidIndex(Index) ? Tokens[Index] : ""; -} - -FString FAyonGenerateProjectParams::GetProjectFileName() const -{ - return TryGetToken(0); -} - -bool FAyonGenerateProjectParams::IsSwitchPresent(const FString& Switch) const -{ - return INDEX_NONE != Switches.IndexOfByPredicate([&Switch](const FString& Item) -> bool - { - return Item.Equals(Switch); - } - ); -} - - -UAyonGenerateProjectCommandlet::UAyonGenerateProjectCommandlet() -{ - LogToConsole = true; -} - -FAyon_ActionResult UAyonGenerateProjectCommandlet::TryCreateProject() const -{ - FText FailReason; - FText FailLog; - TArray OutCreatedFiles; - - if (!GameProjectUtils::CreateProject(ProjectInformation, FailReason, FailLog, &OutCreatedFiles)) - return FAyon_ActionResult(EAyon_ActionResult::ProjectNotCreated, FailReason); - return FAyon_ActionResult(); -} - -FAyon_ActionResult UAyonGenerateProjectCommandlet::TryLoadProjectDescriptor() -{ - FText FailReason; - const bool bLoaded = ProjectDescriptor.Load(ProjectInformation.ProjectFilename, FailReason); - - return FAyon_ActionResult(bLoaded ? EAyon_ActionResult::Ok : EAyon_ActionResult::ProjectNotLoaded, FailReason); -} - -void UAyonGenerateProjectCommandlet::AttachPluginsToProjectDescriptor() -{ - FPluginReferenceDescriptor AyonPluginDescriptor; - AyonPluginDescriptor.bEnabled = true; - AyonPluginDescriptor.Name = AyonConstants::Ayon_PluginName; - ProjectDescriptor.Plugins.Add(AyonPluginDescriptor); - - FPluginReferenceDescriptor PythonPluginDescriptor; - PythonPluginDescriptor.bEnabled = true; - PythonPluginDescriptor.Name = AyonConstants::PythonScript_PluginName; - ProjectDescriptor.Plugins.Add(PythonPluginDescriptor); - - FPluginReferenceDescriptor SequencerScriptingPluginDescriptor; - SequencerScriptingPluginDescriptor.bEnabled = true; - SequencerScriptingPluginDescriptor.Name = AyonConstants::SequencerScripting_PluginName; - ProjectDescriptor.Plugins.Add(SequencerScriptingPluginDescriptor); - - FPluginReferenceDescriptor MovieRenderPipelinePluginDescriptor; - MovieRenderPipelinePluginDescriptor.bEnabled = true; - MovieRenderPipelinePluginDescriptor.Name = AyonConstants::MovieRenderPipeline_PluginName; - ProjectDescriptor.Plugins.Add(MovieRenderPipelinePluginDescriptor); - - FPluginReferenceDescriptor EditorScriptingPluginDescriptor; - EditorScriptingPluginDescriptor.bEnabled = true; - EditorScriptingPluginDescriptor.Name = AyonConstants::EditorScriptingUtils_PluginName; - ProjectDescriptor.Plugins.Add(EditorScriptingPluginDescriptor); -} - -FAyon_ActionResult UAyonGenerateProjectCommandlet::TrySave() -{ - FText FailReason; - const bool bSaved = ProjectDescriptor.Save(ProjectInformation.ProjectFilename, FailReason); - - return FAyon_ActionResult(bSaved ? EAyon_ActionResult::Ok : EAyon_ActionResult::ProjectNotSaved, FailReason); -} - -FAyonGenerateProjectParams UAyonGenerateProjectCommandlet::ParseParameters(const FString& Params) const -{ - FAyonGenerateProjectParams ParamsResult; - - TArray Tokens, Switches; - ParseCommandLine(*Params, Tokens, Switches); - - return ParamsResult; -} diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp deleted file mode 100644 index 02a8ac800a..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Private/OpenPypePublishInstance.cpp +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "OpenPypePublishInstance.h" -#include "AssetRegistry/AssetRegistryModule.h" -#include "AssetToolsModule.h" -#include "Framework/Notifications/NotificationManager.h" -#include "AyonLib.h" -#include "AyonSettings.h" -#include "Widgets/Notifications/SNotificationList.h" - - -//Moves all the invalid pointers to the end to prepare them for the shrinking -#define REMOVE_INVALID_ENTRIES(VAR) VAR.CompactStable(); \ - VAR.Shrink(); - -UOpenPypePublishInstance::UOpenPypePublishInstance(const FObjectInitializer& ObjectInitializer) - : UPrimaryDataAsset(ObjectInitializer) -{ - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked< - FAssetRegistryModule>("AssetRegistry"); - - const FPropertyEditorModule& PropertyEditorModule = FModuleManager::LoadModuleChecked( - "PropertyEditor"); - - FString Left, Right; - GetPathName().Split("/" + GetName(), &Left, &Right); - - FARFilter Filter; - Filter.PackagePaths.Emplace(FName(Left)); - - TArray FoundAssets; - AssetRegistryModule.GetRegistry().GetAssets(Filter, FoundAssets); - - for (const FAssetData& AssetData : FoundAssets) - OnAssetCreated(AssetData); - - REMOVE_INVALID_ENTRIES(AssetDataInternal) - REMOVE_INVALID_ENTRIES(AssetDataExternal) - - AssetRegistryModule.Get().OnAssetAdded().AddUObject(this, &UOpenPypePublishInstance::OnAssetCreated); - AssetRegistryModule.Get().OnAssetRemoved().AddUObject(this, &UOpenPypePublishInstance::OnAssetRemoved); - AssetRegistryModule.Get().OnAssetUpdated().AddUObject(this, &UOpenPypePublishInstance::OnAssetUpdated); - -#ifdef WITH_EDITOR - ColorOpenPypeDirs(); -#endif -} - -void UOpenPypePublishInstance::OnAssetCreated(const FAssetData& InAssetData) -{ - TArray split; - - UObject* Asset = InAssetData.GetAsset(); - - if (!IsValid(Asset)) - { - UE_LOG(LogAssetData, Warning, TEXT("Asset \"%s\" is not valid! Skipping the addition."), - *InAssetData.GetSoftObjectPath().ToString()); - return; - } - - const bool result = IsUnderSameDir(Asset) && Cast(Asset) == nullptr; - - if (result) - { - if (AssetDataInternal.Emplace(Asset).IsValidId()) - { - UE_LOG(LogTemp, Log, TEXT("Added an Asset to PublishInstance - Publish Instance: %s, Asset %s"), - *this->GetName(), *Asset->GetName()); - } - } -} - -void UOpenPypePublishInstance::OnAssetRemoved(const FAssetData& InAssetData) -{ - if (Cast(InAssetData.GetAsset()) == nullptr) - { - if (AssetDataInternal.Contains(nullptr)) - { - AssetDataInternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataInternal) - } - else - { - AssetDataExternal.Remove(nullptr); - REMOVE_INVALID_ENTRIES(AssetDataExternal) - } - } -} - -void UOpenPypePublishInstance::OnAssetUpdated(const FAssetData& InAssetData) -{ - REMOVE_INVALID_ENTRIES(AssetDataInternal); - REMOVE_INVALID_ENTRIES(AssetDataExternal); -} - -bool UOpenPypePublishInstance::IsUnderSameDir(const UObject* InAsset) const -{ - FString ThisLeft, ThisRight; - this->GetPathName().Split(this->GetName(), &ThisLeft, &ThisRight); - - return InAsset->GetPathName().StartsWith(ThisLeft); -} - -#ifdef WITH_EDITOR - -void UOpenPypePublishInstance::ColorOpenPypeDirs() -{ - FString PathName = this->GetPathName(); - - //Check whether the path contains the defined OpenPype folder - if (!PathName.Contains(TEXT("OpenPype"))) return; - - //Get the base path for open pype - FString PathLeft, PathRight; - PathName.Split(FString("OpenPype"), &PathLeft, &PathRight); - - if (PathLeft.IsEmpty() || PathRight.IsEmpty()) - { - UE_LOG(LogAssetData, Error, TEXT("Failed to retrieve the base OpenPype directory!")) - return; - } - - PathName.RemoveFromEnd(PathRight, ESearchCase::CaseSensitive); - - //Get the current settings - const UAyonSettings* Settings = GetMutableDefault(); - - //Color the base folder - UAyonLib::SetFolderColor(PathName, Settings->GetFolderFColor(), false); - - //Get Sub paths, iterate through them and color them according to the folder color in UOpenPypeSettings - const FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked( - "AssetRegistry"); - - TArray PathList; - - AssetRegistryModule.Get().GetSubPaths(PathName, PathList, true); - - if (PathList.Num() > 0) - { - for (const FString& Path : PathList) - { - UAyonLib::SetFolderColor(Path, Settings->GetFolderFColor(), false); - } - } -} - -void UOpenPypePublishInstance::SendNotification(const FString& Text) const -{ - FNotificationInfo Info{FText::FromString(Text)}; - - Info.bFireAndForget = true; - Info.bUseLargeFont = false; - Info.bUseThrobber = false; - Info.bUseSuccessFailIcons = false; - Info.ExpireDuration = 4.f; - Info.FadeOutDuration = 2.f; - - FSlateNotificationManager::Get().AddNotification(Info); - - UE_LOG(LogAssetData, Warning, - TEXT( - "Removed duplicated asset from the AssetsDataExternal in Container \"%s\", Asset is already included in the AssetDataInternal!" - ), *GetName() - ) -} - - -void UOpenPypePublishInstance::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) -{ - Super::PostEditChangeProperty(PropertyChangedEvent); - - if (PropertyChangedEvent.ChangeType == EPropertyChangeType::ValueSet && - PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED( - UOpenPypePublishInstance, AssetDataExternal)) - { - // Check for duplicated assets - for (const auto& Asset : AssetDataInternal) - { - if (AssetDataExternal.Contains(Asset)) - { - AssetDataExternal.Remove(Asset); - return SendNotification( - "You are not allowed to add assets into AssetDataExternal which are already included in AssetDataInternal!"); - } - } - - // Check if no UOpenPypePublishInstance type assets are included - for (const auto& Asset : AssetDataExternal) - { - if (Cast(Asset.Get()) != nullptr) - { - AssetDataExternal.Remove(Asset); - return SendNotification("You are not allowed to add publish instances!"); - } - } - } -} - -#endif diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Ayon.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Ayon.h deleted file mode 100644 index bb25430411..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Ayon.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#pragma once - -#include "CoreMinimal.h" - - -class FAyonModule : public IModuleInterface -{ -public: - virtual void StartupModule() override; - virtual void ShutdownModule() override; - -private: - void RegisterMenus(); - void RegisterSettings(); - bool HandleSettingsSaved(); - - void MenuPopup(); - void MenuDialog(); - -private: - TSharedPtr PluginCommands; -}; diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonAssetContainer.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonAssetContainer.h deleted file mode 100644 index d40642b149..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonAssetContainer.h +++ /dev/null @@ -1,34 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "UObject/NoExportTypes.h" -#include "Engine/AssetUserData.h" -#include "AssetRegistry/AssetData.h" -#include "AyonAssetContainer.generated.h" - -UCLASS(Blueprintable) -class AYON_API UAyonAssetContainer : public UAssetUserData -{ - GENERATED_BODY() - -public: - - UAyonAssetContainer(const FObjectInitializer& ObjectInitalizer); - // ~UAyonAssetContainer(); - - UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Assets") - TArray assets; - - // There seems to be no reflection option to expose array of FAssetData - /* - UPROPERTY(Transient, BlueprintReadOnly, Category = "Python", meta=(DisplayName="Assets Data")) - TArray assetsData; - */ -private: - TArray assetsData; - void OnAssetAdded(const FAssetData& AssetData); - void OnAssetRemoved(const FAssetData& AssetData); - void OnAssetRenamed(const FAssetData& AssetData, const FString& str); -}; diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h deleted file mode 100644 index da424cde2e..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonAssetContainerFactory.h +++ /dev/null @@ -1,18 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "Factories/Factory.h" -#include "AyonAssetContainerFactory.generated.h" - -UCLASS() -class AYON_API UAyonAssetContainerFactory : public UFactory -{ - GENERATED_BODY() - -public: - UAyonAssetContainerFactory(const FObjectInitializer& ObjectInitializer); - virtual UObject* FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override; - virtual bool ShouldShowInNewMenu() const override; -}; diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonCommands.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonCommands.h deleted file mode 100644 index 9c40dc8241..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonCommands.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "Framework/Commands/Commands.h" -#include "AyonStyle.h" - -class FAyonCommands : public TCommands -{ -public: - - FAyonCommands() - : TCommands(TEXT("Ayon"), NSLOCTEXT("Contexts", "Ayon", "Ayon Tools"), NAME_None, FAyonStyle::GetStyleSetName()) - { - } - - // TCommands<> interface - virtual void RegisterCommands() override; - -public: - TSharedPtr< FUICommandInfo > AyonTools; - TSharedPtr< FUICommandInfo > AyonToolsDialog; -}; diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonConstants.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonConstants.h deleted file mode 100644 index 5fe7c14360..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonConstants.h +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - -namespace AyonConstants -{ - const FString Ayon_PluginName = "Ayon"; - const FString PythonScript_PluginName = "PythonScriptPlugin"; - const FString SequencerScripting_PluginName = "SequencerScripting"; - const FString MovieRenderPipeline_PluginName = "MovieRenderPipeline"; - const FString EditorScriptingUtils_PluginName = "EditorScriptingUtilities"; -} - - diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonLib.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonLib.h deleted file mode 100644 index da83b448fb..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonLib.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - -#include "AyonLib.generated.h" - - -UCLASS(Blueprintable) -class AYON_API UAyonLib : public UBlueprintFunctionLibrary -{ - - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, Category = Python) - static bool SetFolderColor(const FString& FolderPath, const FLinearColor& FolderColor,const bool& bForceAdd); - - UFUNCTION(BlueprintCallable, Category = Python) - static TArray GetAllProperties(UClass* cls); -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPublishInstance.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPublishInstance.h deleted file mode 100644 index c89388036f..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPublishInstance.h +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "AyonPublishInstance.generated.h" - - -UCLASS(Blueprintable) -class AYON_API UAyonPublishInstance : public UPrimaryDataAsset -{ - GENERATED_UCLASS_BODY() - -public: - /** - /** - * Retrieves all the assets which are monitored by the Publish Instance (Monitors assets in the directory which is - * placed in) - * - * @return - Set of UObjects. Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetInternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataInternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Retrieves all the assets which have been added manually by the Publish Instance - * - * @return - TSet of assets (UObjects). Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetExternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataExternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Function for returning all the assets in the container combined. - * - * @return Returns all the internal and externally added assets into one set (TSet of UObjects). Careful! They are - * returning raw pointers. Seems like an issue in UE5 - * - * @attention If the bAddExternalAssets variable is false, external assets won't be included! - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetAllAssets() const - { - const TSet>& IteratedSet = bAddExternalAssets - ? AssetDataInternal.Union(AssetDataExternal) - : AssetDataInternal; - - //Create a new TSet only with raw pointers. - TSet ResultSet; - - for (auto& Asset : IteratedSet) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - -private: - UPROPERTY(VisibleAnywhere, Category="Assets") - TSet> AssetDataInternal; - - /** - * This property allows exposing the array to include other assets from any other directory than what it's currently - * monitoring. NOTE: that these assets have to be added manually! They are not automatically registered or added! - */ - UPROPERTY(EditAnywhere, Category = "Assets") - bool bAddExternalAssets = false; - - UPROPERTY(EditAnywhere, meta=(EditCondition="bAddExternalAssets"), Category="Assets") - TSet> AssetDataExternal; - - - void OnAssetCreated(const FAssetData& InAssetData); - void OnAssetRemoved(const FAssetData& InAssetData); - void OnAssetUpdated(const FAssetData& InAssetData); - - bool IsUnderSameDir(const UObject* InAsset) const; - -#ifdef WITH_EDITOR - - void ColorAyonDirs(); - - void SendNotification(const FString& Text) const; - virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; - -#endif -}; diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h deleted file mode 100644 index 3cef8e76b2..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPublishInstanceFactory.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "CoreMinimal.h" -#include "Factories/Factory.h" -#include "AyonPublishInstanceFactory.generated.h" - -/** - * - */ -UCLASS() -class AYON_API UAyonPublishInstanceFactory : public UFactory -{ - GENERATED_BODY() - -public: - UAyonPublishInstanceFactory(const FObjectInitializer& ObjectInitializer); - virtual UObject* FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override; - virtual bool ShouldShowInNewMenu() const override; -}; diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPythonBridge.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPythonBridge.h deleted file mode 100644 index 3c429fd7d3..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonPythonBridge.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once -#include "AyonPythonBridge.generated.h" - -UCLASS(Blueprintable) -class UAyonPythonBridge : public UObject -{ - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, Category = Python) - static UAyonPythonBridge* Get(); - - UFUNCTION(BlueprintImplementableEvent, Category = Python) - void RunInPython_Popup() const; - - UFUNCTION(BlueprintImplementableEvent, Category = Python) - void RunInPython_Dialog() const; - -}; diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonSettings.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonSettings.h deleted file mode 100644 index 4f12d1a5f2..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonSettings.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "UObject/Object.h" -#include "AyonSettings.generated.h" - -#define AYON_SETTINGS_FILEPATH IPluginManager::Get().FindPlugin("Ayon")->GetBaseDir() / TEXT("Config") / TEXT("DefaultAyonSettings.ini") - -UCLASS(Config=AyonSettings, DefaultConfig) -class AYON_API UAyonSettings : public UObject -{ - GENERATED_UCLASS_BODY() - - UFUNCTION(BlueprintCallable, BlueprintPure, Category = Settings) - FColor GetFolderFColor() const - { - return FolderColor; - } - - UFUNCTION(BlueprintCallable, BlueprintPure, Category = Settings) - FLinearColor GetFolderFLinearColor() const - { - return FLinearColor(FolderColor); - } - -protected: - - UPROPERTY(config, EditAnywhere, Category = Folders) - FColor FolderColor = FColor(25,45,223); -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonStyle.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonStyle.h deleted file mode 100644 index 58f6af656e..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/AyonStyle.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once -#include "CoreMinimal.h" -#include "Styling/SlateStyle.h" - -class FAyonStyle -{ -public: - static void Initialize(); - static void Shutdown(); - static void ReloadTextures(); - static const ISlateStyle& Get(); - static FName GetStyleSetName(); - - -private: - static TSharedRef< class FSlateStyleSet > Create(); - static TSharedPtr< class FSlateStyleSet > AyonStyleInstance; -}; \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h deleted file mode 100644 index bb995ec452..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Commandlets/AyonActionResult.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. - -#pragma once - -#include "CoreMinimal.h" -#include "AyonActionResult.generated.h" - -/** - * @brief This macro returns error code when is problem or does nothing when there is no problem. - * @param ActionResult FAyon_ActionResult structure - */ -#define EVALUATE_Ayon_ACTION_RESULT(ActionResult) \ - if(ActionResult.IsProblem()) \ - return ActionResult.GetStatus(); - -/** -* @brief This enum values are humanly readable mapping of error codes. -* Here should be all error codes to be possible find what went wrong. -* TODO: In the future should exists an web document where is mapped error code & what problem occured & how to repair it... -*/ -UENUM() -namespace EAyon_ActionResult -{ - enum Type - { - Ok, - ProjectNotCreated, - ProjectNotLoaded, - ProjectNotSaved, - //....Here insert another values - - //Do not remove! - //Usable for looping through enum values - __Last UMETA(Hidden) - }; -} - - -/** - * @brief This struct holds action result enum and optionally reason of fail - */ -USTRUCT() -struct FAyon_ActionResult -{ - GENERATED_BODY() - -public: - /** @brief Default constructor usable when there is no problem */ - FAyon_ActionResult(); - - /** - * @brief This constructor initializes variables & attempts to log when is error - * @param InEnum Status - */ - FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum); - - /** - * @brief This constructor initializes variables & attempts to log when is error - * @param InEnum Status - * @param InReason Reason of potential fail - */ - FAyon_ActionResult(const EAyon_ActionResult::Type& InEnum, const FText& InReason); - -private: - /** @brief Action status */ - EAyon_ActionResult::Type Status; - - /** @brief Optional reason of fail */ - FText Reason; - -public: - /** - * @brief Checks if there is problematic state - * @return true when status is not equal to EAyon_ActionResult::Ok - */ - bool IsProblem() const; - EAyon_ActionResult::Type& GetStatus(); - FText& GetReason(); - -private: - void TryLog() const; -}; - diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h deleted file mode 100644 index da8e9af661..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Commandlets/Implementations/AyonGenerateProjectCommandlet.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - - -#include "GameProjectUtils.h" -#include "Commandlets/AyonActionResult.h" -#include "ProjectDescriptor.h" -#include "Commandlets/Commandlet.h" -#include "AyonGenerateProjectCommandlet.generated.h" - -struct FProjectDescriptor; -struct FProjectInformation; - -/** -* @brief Structure which parses command line parameters and generates FProjectInformation -*/ -USTRUCT() -struct FAyonGenerateProjectParams -{ - GENERATED_BODY() - -private: - FString CommandLineParams; - TArray Tokens; - TArray Switches; - -public: - FAyonGenerateProjectParams(); - FAyonGenerateProjectParams(const FString& CommandLineParams); - - FProjectInformation GenerateUEProjectInformation() const; - -private: - FString TryGetToken(const int32 Index) const; - FString GetProjectFileName() const; - - bool IsSwitchPresent(const FString& Switch) const; -}; - -UCLASS() -class AYON_API UAyonGenerateProjectCommandlet : public UCommandlet -{ - GENERATED_BODY() - -private: - FProjectInformation ProjectInformation; - FProjectDescriptor ProjectDescriptor; - -public: - UAyonGenerateProjectCommandlet(); - - virtual int32 Main(const FString& CommandLineParams) override; - -private: - FAyonGenerateProjectParams ParseParameters(const FString& Params) const; - FAyon_ActionResult TryCreateProject() const; - FAyon_ActionResult TryLoadProjectDescriptor(); - void AttachPluginsToProjectDescriptor(); - FAyon_ActionResult TrySave(); -}; - diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h deleted file mode 100644 index 25b33a63e8..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/Logging/Ayon_Log.h +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -#pragma once - -DEFINE_LOG_CATEGORY_STATIC(LogCommandletAyonGenerateProject, Log, All); \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h b/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h deleted file mode 100644 index 9c0c4a69e5..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/Ayon/Source/Ayon/Public/OpenPypePublishInstance.h +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2023, Ayon, All rights reserved. -// Deprecation warning: this is left here just for backwards compatibility -// and will be removed in next versions of Ayon. -#pragma once - -#include "OpenPypePublishInstance.generated.h" - - -UCLASS(Blueprintable) -class AYON_API UOpenPypePublishInstance : public UPrimaryDataAsset -{ - GENERATED_UCLASS_BODY() - -public: - /** - /** - * Retrieves all the assets which are monitored by the Publish Instance (Monitors assets in the directory which is - * placed in) - * - * @return - Set of UObjects. Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetInternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataInternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Retrieves all the assets which have been added manually by the Publish Instance - * - * @return - TSet of assets (UObjects). Careful! They are returning raw pointers. Seems like an issue in UE5 - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetExternalAssets() const - { - //For some reason it can only return Raw Pointers? Seems like an issue which they haven't fixed. - TSet ResultSet; - - for (const auto& Asset : AssetDataExternal) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - - /** - * Function for returning all the assets in the container combined. - * - * @return Returns all the internal and externally added assets into one set (TSet of UObjects). Careful! They are - * returning raw pointers. Seems like an issue in UE5 - * - * @attention If the bAddExternalAssets variable is false, external assets won't be included! - */ - UFUNCTION(BlueprintCallable, BlueprintPure, Category="Python") - TSet GetAllAssets() const - { - const TSet>& IteratedSet = bAddExternalAssets - ? AssetDataInternal.Union(AssetDataExternal) - : AssetDataInternal; - - //Create a new TSet only with raw pointers. - TSet ResultSet; - - for (auto& Asset : IteratedSet) - ResultSet.Add(Asset.LoadSynchronous()); - - return ResultSet; - } - -private: - UPROPERTY(VisibleAnywhere, Category="Assets") - TSet> AssetDataInternal; - - /** - * This property allows exposing the array to include other assets from any other directory than what it's currently - * monitoring. NOTE: that these assets have to be added manually! They are not automatically registered or added! - */ - UPROPERTY(EditAnywhere, Category = "Assets") - bool bAddExternalAssets = false; - - UPROPERTY(EditAnywhere, meta=(EditCondition="bAddExternalAssets"), Category="Assets") - TSet> AssetDataExternal; - - - void OnAssetCreated(const FAssetData& InAssetData); - void OnAssetRemoved(const FAssetData& InAssetData); - void OnAssetUpdated(const FAssetData& InAssetData); - - bool IsUnderSameDir(const UObject* InAsset) const; - -#ifdef WITH_EDITOR - - void ColorOpenPypeDirs(); - - void SendNotification(const FString& Text) const; - virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; - -#endif -}; diff --git a/openpype/hosts/unreal/integration/UE_5.1/BuildPlugin_5-1.bat b/openpype/hosts/unreal/integration/UE_5.1/BuildPlugin_5-1.bat deleted file mode 100644 index 3cc82d54af..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/BuildPlugin_5-1.bat +++ /dev/null @@ -1 +0,0 @@ -"D:\UE_5.1\Engine\Build\BatchFiles\RunUAT.bat" BuildPlugin -plugin="D:\OpenPype\openpype\hosts\unreal\integration\UE_5.1\Ayon\Ayon.uplugin" -Package="D:\BuiltPlugins\5.1" \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.1/BuildPlugin_5-1_Window.bat b/openpype/hosts/unreal/integration/UE_5.1/BuildPlugin_5-1_Window.bat deleted file mode 100644 index e10f2c7add..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/BuildPlugin_5-1_Window.bat +++ /dev/null @@ -1 +0,0 @@ -cmd /k "BuildPlugin_5-1.bat" \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.1/CommandletProject/.gitignore b/openpype/hosts/unreal/integration/UE_5.1/CommandletProject/.gitignore deleted file mode 100644 index 80814ef0a6..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/CommandletProject/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app - -/Saved -/DerivedDataCache -/Intermediate -/Binaries -/Content -/Config -/.idea -/.vs \ No newline at end of file diff --git a/openpype/hosts/unreal/integration/UE_5.1/CommandletProject/CommandletProject.uproject b/openpype/hosts/unreal/integration/UE_5.1/CommandletProject/CommandletProject.uproject deleted file mode 100644 index fe83346624..0000000000 --- a/openpype/hosts/unreal/integration/UE_5.1/CommandletProject/CommandletProject.uproject +++ /dev/null @@ -1,20 +0,0 @@ -{ - "FileVersion": 3, - "EngineAssociation": "5.1", - "Category": "", - "Description": "", - "Plugins": [ - { - "Name": "ModelingToolsEditorMode", - "Enabled": true, - "TargetAllowList": [ - "Editor" - ] - }, - { - "Name": "Ayon", - "Enabled": true, - "Type": "Editor" - } - ] -} \ No newline at end of file