ScriptProcessorRuleBehavior.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <SceneAPI/SceneData/SceneDataConfiguration.h>
  10. #include <AzCore/std/string/string.h>
  11. #include <SceneAPI/SceneCore/Components/BehaviorComponent.h>
  12. #include <SceneAPI/SceneCore/Events/AssetImportRequest.h>
  13. #include <SceneAPI/SceneCore/Components/ExportingComponent.h>
  14. #include <SceneAPI/SceneCore/Events/ExportEventContext.h>
  15. #include <SceneAPI/SceneCore/Events/ScriptConfigEventBus.h>
  16. namespace AzToolsFramework
  17. {
  18. class EditorPythonEventsInterface;
  19. }
  20. namespace AZ::SceneAPI::Events
  21. {
  22. class PreExportEventContext;
  23. }
  24. namespace AZ::SceneAPI::Containers
  25. {
  26. class Scene;
  27. }
  28. namespace AZ::SceneAPI::Behaviors
  29. {
  30. class SCENE_DATA_CLASS ScriptProcessorRuleBehavior
  31. : public SceneCore::BehaviorComponent
  32. , public Events::AssetImportRequestBus::Handler
  33. {
  34. public:
  35. AZ_COMPONENT(ScriptProcessorRuleBehavior, "{24054E73-1B92-43B0-AC13-174B2F0E3F66}", SceneCore::BehaviorComponent);
  36. ~ScriptProcessorRuleBehavior() override = default;
  37. SCENE_DATA_API void Activate() override;
  38. SCENE_DATA_API void Deactivate() override;
  39. SCENE_DATA_API static void Reflect(ReflectContext* context);
  40. // AssetImportRequestBus::Handler
  41. SCENE_DATA_API Events::ProcessingResult UpdateManifest(
  42. Containers::Scene& scene,
  43. ManifestAction action,
  44. RequestingApplication requester) override;
  45. SCENE_DATA_API void GetManifestDependencyPaths(AZStd::vector<AZStd::string>& paths) override;
  46. SCENE_DATA_API void GetPolicyName(AZStd::string& result) const override
  47. {
  48. result = "ScriptProcessorRuleBehavior";
  49. }
  50. protected:
  51. bool LoadPython();
  52. void UnloadPython();
  53. bool DoPrepareForExport(Events::PreExportEventContext& context);
  54. AZStd::optional<AZStd::string> FindMatchingDefaultScript(const AZ::SceneAPI::Containers::Scene& scene);
  55. AZStd::optional<AZStd::string> FindManifestScript(const AZ::SceneAPI::Containers::Scene& scene, Events::ProcessingResult& fallbackResult);
  56. bool SignalScriptForUpdateManifest(Containers::Scene& scene, AZStd::string& manifestUpdate, AZStd::string& scriptPath);
  57. void SignalScriptForExportEvent(Events::PreExportEventContext& context, AZStd::string& scriptPath);
  58. static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
  59. static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible);
  60. private:
  61. bool m_pythonLoaded = false;
  62. struct EventHandler;
  63. AZStd::shared_ptr<EventHandler> m_eventHandler;
  64. };
  65. } // namespace AZ::SceneAPI::Behaviors