You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.3 KiB
C++
150 lines
4.3 KiB
C++
/*
|
|
* 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 <EMStudio/AtomRenderPlugin.h>
|
|
#include <EMStudio/AnimViewportRenderer.h>
|
|
#include <EMStudio/AnimViewportToolBar.h>
|
|
|
|
#include <Integration/Components/ActorComponent.h>
|
|
#include <EMotionFX/CommandSystem/Source/CommandManager.h>
|
|
#include <EMotionFX/Source/Allocators.h>
|
|
#include <EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h>
|
|
#include <QHBoxLayout>
|
|
|
|
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<uint32>(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<uint32>(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<AtomRenderPlugin*>(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
|