/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include #include #include #include #include #include #include namespace EMStudio { AZ_CLASS_ALLOCATOR_IMPL(AtomRenderPlugin, EMotionFX::EditorAllocator, 0); AtomRenderPlugin::AtomRenderPlugin() : DockWidgetPlugin() { } AtomRenderPlugin::~AtomRenderPlugin() { } const char* AtomRenderPlugin::GetName() const { return "Atom Render Window (Preview)"; } uint32 AtomRenderPlugin::GetClassID() const { return static_cast(AtomRenderPlugin::CLASS_ID); } const char* AtomRenderPlugin::GetCreatorName() const { return "O3DE"; } float AtomRenderPlugin::GetVersion() const { return 1.0f; } bool AtomRenderPlugin::GetIsClosable() const { return true; } bool AtomRenderPlugin::GetIsFloatable() const { return true; } bool AtomRenderPlugin::GetIsVertical() const { return false; } EMStudioPlugin* AtomRenderPlugin::Clone() { return new AtomRenderPlugin(); } EMStudioPlugin::EPluginType AtomRenderPlugin::GetPluginType() const { return EMStudioPlugin::PLUGINTYPE_RENDERING; } void AtomRenderPlugin::ReinitRenderer() { m_animViewportWidget->Reinit(); } bool AtomRenderPlugin::Init() { m_innerWidget = new QWidget(); m_dock->setWidget(m_innerWidget); QVBoxLayout* verticalLayout = new QVBoxLayout(m_innerWidget); verticalLayout->setSizeConstraint(QLayout::SetNoConstraint); verticalLayout->setSpacing(1); verticalLayout->setMargin(0); // Add the viewport widget m_animViewportWidget = new AnimViewportWidget(m_innerWidget); // Add the tool bar AnimViewportToolBar* toolBar = new AnimViewportToolBar(m_innerWidget); toolBar->SetRenderFlags(m_animViewportWidget->GetRenderFlags()); verticalLayout->addWidget(toolBar); verticalLayout->addWidget(m_animViewportWidget); // Register command callbacks. m_importActorCallback = new ImportActorCallback(false); m_removeActorCallback = new RemoveActorCallback(false); EMStudioManager::GetInstance()->GetCommandManager()->RegisterCommandCallback("ImportActor", m_importActorCallback); EMStudioManager::GetInstance()->GetCommandManager()->RegisterCommandCallback("RemoveActor", m_removeActorCallback); return true; } // Command callbacks bool ReinitAtomRenderPlugin() { EMStudioPlugin* plugin = EMStudio::GetPluginManager()->FindActivePlugin(static_cast(AtomRenderPlugin::CLASS_ID)); if (!plugin) { AZ_Error("AtomRenderPlugin", false, "Cannot execute command callback. Atom render plugin does not exist."); return false; } AtomRenderPlugin* atomRenderPlugin = static_cast(plugin); atomRenderPlugin->ReinitRenderer(); return true; } bool AtomRenderPlugin::ImportActorCallback::Execute( [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) { return ReinitAtomRenderPlugin(); } bool AtomRenderPlugin::ImportActorCallback::Undo( [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) { return ReinitAtomRenderPlugin(); } bool AtomRenderPlugin::RemoveActorCallback::Execute( [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) { return ReinitAtomRenderPlugin(); } bool AtomRenderPlugin::RemoveActorCallback::Undo( [[maybe_unused]] MCore::Command* command, [[maybe_unused]] const MCore::CommandLine& commandLine) { return ReinitAtomRenderPlugin(); } }// namespace EMStudio