mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-08-10 22:19:08 +00:00
90 lines
2.8 KiB
C++
90 lines
2.8 KiB
C++
#include "CCollisionEditor.h"
|
|
#include "ui_CCollisionEditor.h"
|
|
#include "Editor/UICommon.h"
|
|
|
|
#include <QLabel>
|
|
#include <QSlider>
|
|
#include <QSpacerItem>
|
|
|
|
CCollisionEditor::CCollisionEditor(CCollisionMeshGroup* pCollisionMesh, QWidget* pParent)
|
|
: IEditor(pParent)
|
|
, mpUI(std::make_unique<Ui::CCollisionEditor>())
|
|
{
|
|
mpUI->setupUi(this);
|
|
|
|
mpCollisionMesh = pCollisionMesh;
|
|
|
|
mpScene = std::make_unique<CScene>();
|
|
mpCollisionNode = std::make_unique<CCollisionNode>(mpScene.get(), -1);
|
|
mpCollisionNode->SetCollision(mpCollisionMesh);
|
|
mpUI->Viewport->SetNode(mpCollisionNode.get());
|
|
|
|
CCamera& rCamera = mpUI->Viewport->Camera();
|
|
rCamera.SetMoveSpeed(0.5f);
|
|
rCamera.SetPitch(-0.3f);
|
|
rCamera.SetMoveMode(ECameraMoveMode::Orbit);
|
|
rCamera.SetOrbit(mpCollisionNode->AABox(), 4.f);
|
|
|
|
// Add depth widgets to the toolbar
|
|
mpUI->ToolBar->addSeparator();
|
|
mpUI->ToolBar->addWidget(new QLabel(tr("OBBTree: "), this));
|
|
|
|
int MaxDepth = 0;
|
|
for (size_t MeshIdx = 0; MeshIdx < pCollisionMesh->NumMeshes(); MeshIdx++)
|
|
{
|
|
const CCollisionMesh* pMesh = pCollisionMesh->MeshByIndex(MeshIdx);
|
|
const int MeshDepth = pMesh->GetRenderData().MaxBoundingHierarchyDepth();
|
|
MaxDepth = std::max(MeshDepth, MaxDepth);
|
|
}
|
|
|
|
QSlider* pOBBTreeSlider = new QSlider(this);
|
|
pOBBTreeSlider->setMinimum(0);
|
|
pOBBTreeSlider->setMaximum(MaxDepth);
|
|
pOBBTreeSlider->setOrientation(Qt::Horizontal);
|
|
pOBBTreeSlider->setMaximumWidth(100);
|
|
|
|
connect(pOBBTreeSlider, &QSlider::valueChanged,
|
|
this, &CCollisionEditor::OnOBBTreeDepthChanged);
|
|
|
|
mpUI->ToolBar->addWidget(pOBBTreeSlider);
|
|
|
|
QWidget* pSpacerWidget = new QWidget(this);
|
|
pSpacerWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
|
|
mpUI->ToolBar->addWidget(pSpacerWidget);
|
|
|
|
// Connections
|
|
connect(mpUI->ActionToggleGrid, &QAction::toggled,
|
|
this, &CCollisionEditor::OnGridToggled);
|
|
|
|
connect(mpUI->ActionToggleOrbit, &QAction::toggled,
|
|
this, &CCollisionEditor::OnOrbitToggled);
|
|
|
|
// Update window title
|
|
const QString WindowTitle = tr("%APP_FULL_NAME% - Collision Editor - %1[*]")
|
|
.arg(TO_QSTRING(mpCollisionMesh->Entry()->CookedAssetPath(true).GetFileName()));
|
|
SET_WINDOWTITLE_APPVARS(WindowTitle);
|
|
}
|
|
|
|
CCollisionEditor::~CCollisionEditor() = default;
|
|
|
|
CCollisionEditorViewport* CCollisionEditor::Viewport() const
|
|
{
|
|
return mpUI->Viewport;
|
|
}
|
|
|
|
void CCollisionEditor::OnGridToggled(bool Enabled)
|
|
{
|
|
mpUI->Viewport->SetGridEnabled(Enabled);
|
|
}
|
|
|
|
void CCollisionEditor::OnOrbitToggled(bool Enabled)
|
|
{
|
|
CCamera& Camera = mpUI->Viewport->Camera();
|
|
Camera.SetMoveMode( Enabled ? ECameraMoveMode::Orbit : ECameraMoveMode::Free );
|
|
}
|
|
|
|
void CCollisionEditor::OnOBBTreeDepthChanged(int NewValue)
|
|
{
|
|
mpUI->Viewport->SetOBBTreeDepth(NewValue);
|
|
}
|