mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-18 17:35:43 +00:00
CSceneNode: Make NodeType() const
These don't modify member state.
This commit is contained in:
@@ -10,7 +10,7 @@ CCharacterNode::CCharacterNode(CScene *pScene, uint32 NodeID, CAnimSet *pChar /*
|
|||||||
SetCharSet(pChar);
|
SetCharSet(pChar);
|
||||||
}
|
}
|
||||||
|
|
||||||
ENodeType CCharacterNode::NodeType()
|
ENodeType CCharacterNode::NodeType() const
|
||||||
{
|
{
|
||||||
return ENodeType::Character;
|
return ENodeType::Character;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class CCharacterNode : public CSceneNode
|
|||||||
public:
|
public:
|
||||||
explicit CCharacterNode(CScene *pScene, uint32 NodeID, CAnimSet *pChar = nullptr, CSceneNode *pParent = nullptr);
|
explicit CCharacterNode(CScene *pScene, uint32 NodeID, CAnimSet *pChar = nullptr, CSceneNode *pParent = nullptr);
|
||||||
|
|
||||||
ENodeType NodeType() override;
|
ENodeType NodeType() const override;
|
||||||
void PostLoad() override;
|
void PostLoad() override;
|
||||||
void AddToRenderer(CRenderer *pRenderer, const SViewInfo& rkViewInfo) override;
|
void AddToRenderer(CRenderer *pRenderer, const SViewInfo& rkViewInfo) override;
|
||||||
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo) override;
|
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo) override;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ CCollisionNode::CCollisionNode(CScene *pScene, uint32 NodeID, CSceneNode *pParen
|
|||||||
SetName("Collision");
|
SetName("Collision");
|
||||||
}
|
}
|
||||||
|
|
||||||
ENodeType CCollisionNode::NodeType()
|
ENodeType CCollisionNode::NodeType() const
|
||||||
{
|
{
|
||||||
return ENodeType::Collision;
|
return ENodeType::Collision;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CCollisionNode : public CSceneNode
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
CCollisionNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr, CCollisionMeshGroup *pCollision = nullptr);
|
CCollisionNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr, CCollisionMeshGroup *pCollision = nullptr);
|
||||||
ENodeType NodeType() override;
|
ENodeType NodeType() const override;
|
||||||
void AddToRenderer(CRenderer *pRenderer, const SViewInfo& rkViewInfo) override;
|
void AddToRenderer(CRenderer *pRenderer, const SViewInfo& rkViewInfo) override;
|
||||||
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo) override;
|
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo) override;
|
||||||
void RayAABoxIntersectTest(CRayCollisionTester& rTester, const SViewInfo& rkViewInfo) override;
|
void RayAABoxIntersectTest(CRayCollisionTester& rTester, const SViewInfo& rkViewInfo) override;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ CLightNode::CLightNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent, CLigh
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ENodeType CLightNode::NodeType()
|
ENodeType CLightNode::NodeType() const
|
||||||
{
|
{
|
||||||
return ENodeType::Light;
|
return ENodeType::Light;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class CLightNode : public CSceneNode
|
|||||||
CLight *mpLight;
|
CLight *mpLight;
|
||||||
public:
|
public:
|
||||||
CLightNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr, CLight *Light = nullptr);
|
CLightNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr, CLight *Light = nullptr);
|
||||||
ENodeType NodeType() override;
|
ENodeType NodeType() const override;
|
||||||
void AddToRenderer(CRenderer* pRenderer, const SViewInfo& ViewInfo) override;
|
void AddToRenderer(CRenderer* pRenderer, const SViewInfo& ViewInfo) override;
|
||||||
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& ViewInfo) override;
|
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& ViewInfo) override;
|
||||||
void DrawSelection() override;
|
void DrawSelection() override;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ CModelNode::CModelNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent, CMode
|
|||||||
SetModel(pModel);
|
SetModel(pModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
ENodeType CModelNode::NodeType()
|
ENodeType CModelNode::NodeType() const
|
||||||
{
|
{
|
||||||
return ENodeType::Model;
|
return ENodeType::Model;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class CModelNode : public CSceneNode
|
|||||||
public:
|
public:
|
||||||
explicit CModelNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr, CModel *pModel = nullptr);
|
explicit CModelNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr, CModel *pModel = nullptr);
|
||||||
|
|
||||||
ENodeType NodeType() override;
|
ENodeType NodeType() const override;
|
||||||
void PostLoad() override;
|
void PostLoad() override;
|
||||||
void AddToRenderer(CRenderer* pRenderer, const SViewInfo& rkViewInfo) override;
|
void AddToRenderer(CRenderer* pRenderer, const SViewInfo& rkViewInfo) override;
|
||||||
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo) override;
|
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo) override;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public:
|
|||||||
: CSceneNode(pScene, NodeID, pParent) {}
|
: CSceneNode(pScene, NodeID, pParent) {}
|
||||||
~CRootNode() override = default;
|
~CRootNode() override = default;
|
||||||
|
|
||||||
ENodeType NodeType() override
|
ENodeType NodeType() const override
|
||||||
{
|
{
|
||||||
return ENodeType::Root;
|
return ENodeType::Root;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ protected:
|
|||||||
public:
|
public:
|
||||||
explicit CSceneNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr);
|
explicit CSceneNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr);
|
||||||
~CSceneNode() override;
|
~CSceneNode() override;
|
||||||
virtual ENodeType NodeType() = 0;
|
virtual ENodeType NodeType() const = 0;
|
||||||
virtual void PostLoad() {}
|
virtual void PostLoad() {}
|
||||||
virtual void OnTransformed() {}
|
virtual void OnTransformed() {}
|
||||||
void AddToRenderer(CRenderer* /*pRenderer*/, const SViewInfo& /*rkViewInfo*/) override {}
|
void AddToRenderer(CRenderer* /*pRenderer*/, const SViewInfo& /*rkViewInfo*/) override {}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public:
|
|||||||
void ParentDisplayAssetChanged(CResource *pNewDisplayAsset);
|
void ParentDisplayAssetChanged(CResource *pNewDisplayAsset);
|
||||||
CModel* Model() const;
|
CModel* Model() const;
|
||||||
|
|
||||||
ENodeType NodeType() override { return ENodeType::ScriptAttach; }
|
ENodeType NodeType() const override { return ENodeType::ScriptAttach; }
|
||||||
void AddToRenderer(CRenderer* pRenderer, const SViewInfo& rkViewInfo) override;
|
void AddToRenderer(CRenderer* pRenderer, const SViewInfo& rkViewInfo) override;
|
||||||
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo) override;
|
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo) override;
|
||||||
void DrawSelection() override;
|
void DrawSelection() override;
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ CScriptNode::CScriptNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent, CSc
|
|||||||
mpExtra = CScriptExtra::CreateExtra(this);
|
mpExtra = CScriptExtra::CreateExtra(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
ENodeType CScriptNode::NodeType()
|
ENodeType CScriptNode::NodeType() const
|
||||||
{
|
{
|
||||||
return ENodeType::Script;
|
return ENodeType::Script;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public:
|
|||||||
EGameModeVisibility mGameModeVisibility{EGameModeVisibility::Untested};
|
EGameModeVisibility mGameModeVisibility{EGameModeVisibility::Untested};
|
||||||
|
|
||||||
CScriptNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr, CScriptObject *pObject = nullptr);
|
CScriptNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr, CScriptObject *pObject = nullptr);
|
||||||
ENodeType NodeType() override;
|
ENodeType NodeType() const override;
|
||||||
void PostLoad() override;
|
void PostLoad() override;
|
||||||
void OnTransformed() override;
|
void OnTransformed() override;
|
||||||
void AddToRenderer(CRenderer* pRenderer, const SViewInfo& rkViewInfo) override;
|
void AddToRenderer(CRenderer* pRenderer, const SViewInfo& rkViewInfo) override;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ CStaticNode::CStaticNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent, CSt
|
|||||||
SetName("Static Node");
|
SetName("Static Node");
|
||||||
}
|
}
|
||||||
|
|
||||||
ENodeType CStaticNode::NodeType()
|
ENodeType CStaticNode::NodeType() const
|
||||||
{
|
{
|
||||||
return ENodeType::Static;
|
return ENodeType::Static;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CStaticNode : public CSceneNode
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
CStaticNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr, CStaticModel *pModel = nullptr);
|
CStaticNode(CScene *pScene, uint32 NodeID, CSceneNode *pParent = nullptr, CStaticModel *pModel = nullptr);
|
||||||
ENodeType NodeType() override;
|
ENodeType NodeType() const override;
|
||||||
void PostLoad() override;
|
void PostLoad() override;
|
||||||
void AddToRenderer(CRenderer* pRenderer, const SViewInfo& rkViewInfo) override;
|
void AddToRenderer(CRenderer* pRenderer, const SViewInfo& rkViewInfo) override;
|
||||||
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo) override;
|
void Draw(FRenderOptions Options, int ComponentIndex, ERenderCommand Command, const SViewInfo& rkViewInfo) override;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public:
|
|||||||
EGame Game() const { return mGame; }
|
EGame Game() const { return mGame; }
|
||||||
|
|
||||||
// Default implementations for CSceneNode
|
// Default implementations for CSceneNode
|
||||||
ENodeType NodeType() override { return ENodeType::ScriptExtra; }
|
ENodeType NodeType() const override { return ENodeType::ScriptExtra; }
|
||||||
void RayAABoxIntersectTest(CRayCollisionTester& /*rTester*/, const SViewInfo& /*rkViewInfo*/) override {}
|
void RayAABoxIntersectTest(CRayCollisionTester& /*rTester*/, const SViewInfo& /*rkViewInfo*/) override {}
|
||||||
SRayIntersection RayNodeIntersectTest(const CRay& /*rkRay*/, uint32 /*AssetID*/, const SViewInfo& /*rkViewInfo*/) override
|
SRayIntersection RayNodeIntersectTest(const CRay& /*rkRay*/, uint32 /*AssetID*/, const SViewInfo& /*rkViewInfo*/) override
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ public:
|
|||||||
void UpdateBounds() { mBoundsDirty = true; }
|
void UpdateBounds() { mBoundsDirty = true; }
|
||||||
void SetAllowedNodeTypes(FNodeFlags Types) { mAllowedNodes = Types; }
|
void SetAllowedNodeTypes(FNodeFlags Types) { mAllowedNodes = Types; }
|
||||||
bool IsAllowedType(ENodeType Type) const { return (mAllowedNodes & Type) != 0; }
|
bool IsAllowedType(ENodeType Type) const { return (mAllowedNodes & Type) != 0; }
|
||||||
bool IsAllowedType(CSceneNode *pNode) const { return (mAllowedNodes & pNode->NodeType()) != 0; }
|
bool IsAllowedType(const CSceneNode *pNode) const { return (mAllowedNodes & pNode->NodeType()) != 0; }
|
||||||
const QList<CSceneNode*>& SelectedNodeList() const { return mSelectedNodes; }
|
const QList<CSceneNode*>& SelectedNodeList() const { return mSelectedNodes; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|||||||
@@ -86,15 +86,17 @@ void CSceneViewport::CheckGizmoInput(const CRay& rkRay)
|
|||||||
else
|
else
|
||||||
mGizmoHovering = false;
|
mGizmoHovering = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gizmo transforming: Run gizmo input with ray/mouse coords
|
// Gizmo transforming: Run gizmo input with ray/mouse coords
|
||||||
else if (mGizmoTransforming)
|
else if (mGizmoTransforming)
|
||||||
{
|
{
|
||||||
bool transformed = pGizmo->TransformFromInput(rkRay, mCamera);
|
const bool transformed = pGizmo->TransformFromInput(rkRay, mCamera);
|
||||||
if (transformed) emit GizmoMoved();
|
if (transformed)
|
||||||
|
emit GizmoMoved();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mGizmoHovering = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
else mGizmoHovering = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SRayIntersection CSceneViewport::SceneRayCast(const CRay& rkRay)
|
SRayIntersection CSceneViewport::SceneRayCast(const CRay& rkRay)
|
||||||
@@ -105,8 +107,7 @@ SRayIntersection CSceneViewport::SceneRayCast(const CRay& rkRay)
|
|||||||
return SRayIntersection();
|
return SRayIntersection();
|
||||||
}
|
}
|
||||||
|
|
||||||
SRayIntersection Intersect = mpScene->SceneRayCast(rkRay, mViewInfo);
|
const SRayIntersection Intersect = mpScene->SceneRayCast(rkRay, mViewInfo);
|
||||||
|
|
||||||
if (Intersect.Hit)
|
if (Intersect.Hit)
|
||||||
{
|
{
|
||||||
if (mpHoverNode)
|
if (mpHoverNode)
|
||||||
@@ -116,7 +117,6 @@ SRayIntersection CSceneViewport::SceneRayCast(const CRay& rkRay)
|
|||||||
mpHoverNode->SetMouseHovering(true);
|
mpHoverNode->SetMouseHovering(true);
|
||||||
mHoverPoint = rkRay.PointOnRay(Intersect.Distance);
|
mHoverPoint = rkRay.PointOnRay(Intersect.Distance);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mHoverPoint = rkRay.PointOnRay(10.f);
|
mHoverPoint = rkRay.PointOnRay(10.f);
|
||||||
@@ -128,7 +128,9 @@ SRayIntersection CSceneViewport::SceneRayCast(const CRay& rkRay)
|
|||||||
|
|
||||||
void CSceneViewport::ResetHover()
|
void CSceneViewport::ResetHover()
|
||||||
{
|
{
|
||||||
if (mpHoverNode) mpHoverNode->SetMouseHovering(false);
|
if (mpHoverNode)
|
||||||
|
mpHoverNode->SetMouseHovering(false);
|
||||||
|
|
||||||
mpHoverNode = nullptr;
|
mpHoverNode = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,17 +245,18 @@ QMouseEvent CSceneViewport::CreateMouseEvent()
|
|||||||
|
|
||||||
void CSceneViewport::FindConnectedObjects(uint32 InstanceID, bool SearchOutgoing, bool SearchIncoming, QList<uint32>& rIDList)
|
void CSceneViewport::FindConnectedObjects(uint32 InstanceID, bool SearchOutgoing, bool SearchIncoming, QList<uint32>& rIDList)
|
||||||
{
|
{
|
||||||
CScriptNode *pScript = mpScene->NodeForInstanceID(InstanceID);
|
const CScriptNode* pScript = mpScene->NodeForInstanceID(InstanceID);
|
||||||
if (!pScript) return;
|
if (!pScript)
|
||||||
|
return;
|
||||||
|
|
||||||
CScriptObject *pInst = pScript->Instance();
|
const CScriptObject* pInst = pScript->Instance();
|
||||||
rIDList.push_back(InstanceID);
|
rIDList.push_back(InstanceID);
|
||||||
|
|
||||||
if (SearchOutgoing)
|
if (SearchOutgoing)
|
||||||
{
|
{
|
||||||
for (size_t iLink = 0; iLink < pInst->NumLinks(ELinkType::Outgoing); iLink++)
|
for (size_t iLink = 0; iLink < pInst->NumLinks(ELinkType::Outgoing); iLink++)
|
||||||
{
|
{
|
||||||
CLink *pLink = pInst->Link(ELinkType::Outgoing, iLink);
|
const CLink* pLink = pInst->Link(ELinkType::Outgoing, iLink);
|
||||||
|
|
||||||
if (!rIDList.contains(pLink->ReceiverID()))
|
if (!rIDList.contains(pLink->ReceiverID()))
|
||||||
FindConnectedObjects(pLink->ReceiverID(), SearchOutgoing, SearchIncoming, rIDList);
|
FindConnectedObjects(pLink->ReceiverID(), SearchOutgoing, SearchIncoming, rIDList);
|
||||||
@@ -264,7 +267,7 @@ void CSceneViewport::FindConnectedObjects(uint32 InstanceID, bool SearchOutgoing
|
|||||||
{
|
{
|
||||||
for (size_t iLink = 0; iLink < pInst->NumLinks(ELinkType::Incoming); iLink++)
|
for (size_t iLink = 0; iLink < pInst->NumLinks(ELinkType::Incoming); iLink++)
|
||||||
{
|
{
|
||||||
CLink *pLink = pInst->Link(ELinkType::Incoming, iLink);
|
const CLink* pLink = pInst->Link(ELinkType::Incoming, iLink);
|
||||||
|
|
||||||
if (!rIDList.contains(pLink->SenderID()))
|
if (!rIDList.contains(pLink->SenderID()))
|
||||||
FindConnectedObjects(pLink->SenderID(), SearchOutgoing, SearchIncoming, rIDList);
|
FindConnectedObjects(pLink->SenderID(), SearchOutgoing, SearchIncoming, rIDList);
|
||||||
@@ -293,9 +296,10 @@ void CSceneViewport::CheckUserInput()
|
|||||||
if (!mpEditor->Gizmo()->IsTransforming())
|
if (!mpEditor->Gizmo()->IsTransforming())
|
||||||
mRayIntersection = SceneRayCast(Ray);
|
mRayIntersection = SceneRayCast(Ray);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
mRayIntersection = SRayIntersection();
|
mRayIntersection = SRayIntersection();
|
||||||
|
}
|
||||||
|
|
||||||
QMouseEvent Event = CreateMouseEvent();
|
QMouseEvent Event = CreateMouseEvent();
|
||||||
emit InputProcessed(mRayIntersection, &Event);
|
emit InputProcessed(mRayIntersection, &Event);
|
||||||
@@ -309,10 +313,10 @@ void CSceneViewport::Paint()
|
|||||||
mpRenderer->BeginFrame();
|
mpRenderer->BeginFrame();
|
||||||
|
|
||||||
// todo: The sky should really just be a regular node in the background depth group instead of having special rendering code here
|
// todo: The sky should really just be a regular node in the background depth group instead of having special rendering code here
|
||||||
if ((mViewInfo.ShowFlags & EShowFlag::Sky) || mViewInfo.GameMode)
|
if ((mViewInfo.ShowFlags & EShowFlag::Sky) != 0 || mViewInfo.GameMode)
|
||||||
{
|
{
|
||||||
CModel *pSky = mpScene->ActiveSkybox();
|
if (CModel* pSky = mpScene->ActiveSkybox())
|
||||||
if (pSky) mpRenderer->RenderSky(pSky, mViewInfo);
|
mpRenderer->RenderSky(pSky, mViewInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
mCamera.LoadMatrices();
|
mCamera.LoadMatrices();
|
||||||
@@ -331,7 +335,8 @@ void CSceneViewport::Paint()
|
|||||||
mGrid.AddToRenderer(mpRenderer.get(), mViewInfo);
|
mGrid.AddToRenderer(mpRenderer.get(), mViewInfo);
|
||||||
|
|
||||||
// Draw the line for the link the user is editing.
|
// Draw the line for the link the user is editing.
|
||||||
if (mLinkLineEnabled) mLinkLine.AddToRenderer(mpRenderer.get(), mViewInfo);
|
if (mLinkLineEnabled)
|
||||||
|
mLinkLine.AddToRenderer(mpRenderer.get(), mViewInfo);
|
||||||
|
|
||||||
mpRenderer->RenderBuckets(mViewInfo);
|
mpRenderer->RenderBuckets(mViewInfo);
|
||||||
mpRenderer->EndFrame();
|
mpRenderer->EndFrame();
|
||||||
@@ -344,12 +349,12 @@ void CSceneViewport::ContextMenu(QContextMenuEvent *pEvent)
|
|||||||
|
|
||||||
// Set up actions
|
// Set up actions
|
||||||
TString NodeName;
|
TString NodeName;
|
||||||
bool HasHoverNode = (mpHoverNode && (mpHoverNode->NodeType() != ENodeType::Static) && (mpHoverNode->NodeType() != ENodeType::Model));
|
const bool HasHoverNode = (mpHoverNode && (mpHoverNode->NodeType() != ENodeType::Static) && (mpHoverNode->NodeType() != ENodeType::Model));
|
||||||
bool HasSelection = mpEditor->HasSelection();
|
const bool HasSelection = mpEditor->HasSelection();
|
||||||
bool IsScriptNode = (mpHoverNode && mpHoverNode->NodeType() == ENodeType::Script);
|
const bool IsScriptNode = (mpHoverNode && mpHoverNode->NodeType() == ENodeType::Script);
|
||||||
|
|
||||||
CWorldEditor* pOwnerWorldEd = qobject_cast<CWorldEditor*>(mpEditor);
|
const auto* pOwnerWorldEd = qobject_cast<const CWorldEditor*>(mpEditor);
|
||||||
bool QuickplayEnabled = (pOwnerWorldEd && pOwnerWorldEd->IsQuickplayEnabled());
|
const bool QuickplayEnabled = (pOwnerWorldEd && pOwnerWorldEd->IsQuickplayEnabled());
|
||||||
|
|
||||||
mpToggleSelectAction->setVisible(HasHoverNode);
|
mpToggleSelectAction->setVisible(HasHoverNode);
|
||||||
mpSelectConnectedMenu->menuAction()->setVisible(IsScriptNode);
|
mpSelectConnectedMenu->menuAction()->setVisible(IsScriptNode);
|
||||||
@@ -381,10 +386,10 @@ void CSceneViewport::ContextMenu(QContextMenuEvent *pEvent)
|
|||||||
mpHideHoverTypeAction->setText(tr("Hide all %1 objects").arg(TO_QSTRING(pScript->Template()->Name())));
|
mpHideHoverTypeAction->setText(tr("Hide all %1 objects").arg(TO_QSTRING(pScript->Template()->Name())));
|
||||||
mpHideHoverLayerAction->setText(tr("Hide layer %1").arg(TO_QSTRING(pScript->Instance()->Layer()->Name())));
|
mpHideHoverLayerAction->setText(tr("Hide layer %1").arg(TO_QSTRING(pScript->Instance()->Layer()->Name())));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (HasHoverNode)
|
else if (HasHoverNode)
|
||||||
|
{
|
||||||
NodeName = mpHoverNode->Name();
|
NodeName = mpHoverNode->Name();
|
||||||
|
}
|
||||||
mpHideHoverNodeAction->setText(tr("Hide %1").arg(TO_QSTRING(NodeName)));
|
mpHideHoverNodeAction->setText(tr("Hide %1").arg(TO_QSTRING(NodeName)));
|
||||||
|
|
||||||
// Show menu
|
// Show menu
|
||||||
@@ -424,11 +429,11 @@ void CSceneViewport::OnMouseRelease(QMouseEvent *pEvent)
|
|||||||
mpEditor->EndGizmoTransform();
|
mpEditor->EndGizmoTransform();
|
||||||
mGizmoTransforming = false;
|
mGizmoTransforming = false;
|
||||||
}
|
}
|
||||||
|
else // Object selection/deselection
|
||||||
// Object selection/deselection
|
{
|
||||||
else
|
|
||||||
emit ViewportClick(mRayIntersection, pEvent);
|
emit ViewportClick(mRayIntersection, pEvent);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ************ MENU ACTIONS ************
|
// ************ MENU ACTIONS ************
|
||||||
|
|||||||
@@ -86,28 +86,30 @@ void CPasteNodesCommand::redo()
|
|||||||
// 1. If the link receiver has also been copied then redirect to the copied version.
|
// 1. If the link receiver has also been copied then redirect to the copied version.
|
||||||
// 2. If we're pasting into the same area that this data was copied from and the receiver still exists, connect to original receiver.
|
// 2. If we're pasting into the same area that this data was copied from and the receiver still exists, connect to original receiver.
|
||||||
// 3. If neither of those things is true, then delete the link.
|
// 3. If neither of those things is true, then delete the link.
|
||||||
for (CSceneNode *pNode : PastedNodes)
|
for (const CSceneNode* pNode : PastedNodes)
|
||||||
{
|
{
|
||||||
if (pNode && pNode->NodeType() == ENodeType::Script)
|
if (pNode && pNode->NodeType() == ENodeType::Script)
|
||||||
{
|
{
|
||||||
CScriptObject *pInstance = static_cast<CScriptNode*>(pNode)->Instance();
|
const auto* pInstance = static_cast<const CScriptNode*>(pNode)->Instance();
|
||||||
|
|
||||||
for (size_t iLink = 0; iLink < pInstance->NumLinks(ELinkType::Outgoing); iLink++)
|
for (size_t iLink = 0; iLink < pInstance->NumLinks(ELinkType::Outgoing); iLink++)
|
||||||
{
|
{
|
||||||
CLink *pLink = pInstance->Link(ELinkType::Outgoing, iLink);
|
CLink* pLink = pInstance->Link(ELinkType::Outgoing, iLink);
|
||||||
int Index = mpMimeData->IndexOfInstanceID(pLink->ReceiverID());
|
const int Index = mpMimeData->IndexOfInstanceID(pLink->ReceiverID());
|
||||||
|
|
||||||
if (Index != -1)
|
if (Index != -1)
|
||||||
{
|
{
|
||||||
CScriptObject *pNewTarget = static_cast<CScriptNode*>(PastedNodes[Index])->Instance();
|
const auto* pNewTarget = static_cast<CScriptNode*>(PastedNodes[Index])->Instance();
|
||||||
pLink->SetReceiver(pNewTarget->InstanceID());
|
pLink->SetReceiver(pNewTarget->InstanceID());
|
||||||
}
|
}
|
||||||
else if (mpMimeData->AreaID() != pArea->ID() || pArea->InstanceByID(pLink->ReceiverID()) == nullptr)
|
else if (mpMimeData->AreaID() != pArea->ID() || pArea->InstanceByID(pLink->ReceiverID()) == nullptr)
|
||||||
{
|
{
|
||||||
CScriptObject *pSender = pLink->Sender();
|
CScriptObject* pSender = pLink->Sender();
|
||||||
CScriptObject *pReceiver = pLink->Receiver();
|
CScriptObject* pReceiver = pLink->Receiver();
|
||||||
if (pSender) pSender->RemoveLink(ELinkType::Outgoing, pLink);
|
if (pSender)
|
||||||
if (pReceiver) pReceiver->RemoveLink(ELinkType::Incoming, pLink);
|
pSender->RemoveLink(ELinkType::Outgoing, pLink);
|
||||||
|
if (pReceiver)
|
||||||
|
pReceiver->RemoveLink(ELinkType::Incoming, pLink);
|
||||||
|
|
||||||
delete pLink;
|
delete pLink;
|
||||||
iLink--;
|
iLink--;
|
||||||
|
|||||||
@@ -411,7 +411,7 @@ void CInstancesModel::NodeCreated(CSceneNode *pNode)
|
|||||||
{
|
{
|
||||||
if (pNode->NodeType() == ENodeType::Script)
|
if (pNode->NodeType() == ENodeType::Script)
|
||||||
{
|
{
|
||||||
CScriptNode *pScript = static_cast<CScriptNode*>(pNode);
|
const auto* pScript = static_cast<const CScriptNode*>(pNode);
|
||||||
CScriptObject *pObj = pScript->Instance();
|
CScriptObject *pObj = pScript->Instance();
|
||||||
pObj->Template()->SortObjects();
|
pObj->Template()->SortObjects();
|
||||||
|
|
||||||
@@ -441,8 +441,8 @@ void CInstancesModel::NodeAboutToBeDeleted(CSceneNode *pNode)
|
|||||||
|
|
||||||
if (mModelType == EInstanceModelType::Types)
|
if (mModelType == EInstanceModelType::Types)
|
||||||
{
|
{
|
||||||
const auto *pScript = static_cast<CScriptNode*>(pNode);
|
const auto* pScript = static_cast<const CScriptNode*>(pNode);
|
||||||
const CScriptObject *pObj = pScript->Instance();
|
const CScriptObject* pObj = pScript->Instance();
|
||||||
|
|
||||||
if (pObj->Template()->NumObjects() <= 1)
|
if (pObj->Template()->NumObjects() <= 1)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -800,7 +800,7 @@ void CWorldEditor::UpdateStatusBar()
|
|||||||
{
|
{
|
||||||
if (ui->MainViewport->underMouse())
|
if (ui->MainViewport->underMouse())
|
||||||
{
|
{
|
||||||
CSceneNode *pHoverNode = ui->MainViewport->HoverNode();
|
const CSceneNode* pHoverNode = ui->MainViewport->HoverNode();
|
||||||
|
|
||||||
if (pHoverNode && mpSelection->IsAllowedType(pHoverNode))
|
if (pHoverNode && mpSelection->IsAllowedType(pHoverNode))
|
||||||
StatusText = TO_QSTRING(pHoverNode->Name());
|
StatusText = TO_QSTRING(pHoverNode->Name());
|
||||||
@@ -895,11 +895,11 @@ void CWorldEditor::UpdateCursor()
|
|||||||
{
|
{
|
||||||
if (ui->MainViewport->IsCursorVisible() && !mPickMode)
|
if (ui->MainViewport->IsCursorVisible() && !mPickMode)
|
||||||
{
|
{
|
||||||
CSceneNode *pHoverNode = ui->MainViewport->HoverNode();
|
const CSceneNode* pHoverNode = ui->MainViewport->HoverNode();
|
||||||
|
|
||||||
if (ui->MainViewport->IsHoveringGizmo())
|
if (ui->MainViewport->IsHoveringGizmo())
|
||||||
ui->MainViewport->SetCursorState(Qt::SizeAllCursor);
|
ui->MainViewport->SetCursorState(Qt::SizeAllCursor);
|
||||||
else if ((pHoverNode) && mpSelection->IsAllowedType(pHoverNode))
|
else if (pHoverNode && mpSelection->IsAllowedType(pHoverNode))
|
||||||
ui->MainViewport->SetCursorState(Qt::PointingHandCursor);
|
ui->MainViewport->SetCursorState(Qt::PointingHandCursor);
|
||||||
else
|
else
|
||||||
ui->MainViewport->SetCursorState(Qt::ArrowCursor);
|
ui->MainViewport->SetCursorState(Qt::ArrowCursor);
|
||||||
@@ -955,7 +955,7 @@ void CWorldEditor::UpdateNewLinkLine()
|
|||||||
|
|
||||||
if (ui->MainViewport->underMouse() && !ui->MainViewport->IsMouseInputActive() && IsPicking)
|
if (ui->MainViewport->underMouse() && !ui->MainViewport->IsMouseInputActive() && IsPicking)
|
||||||
{
|
{
|
||||||
CSceneNode* pHoverNode = ui->MainViewport->HoverNode();
|
const CSceneNode* pHoverNode = ui->MainViewport->HoverNode();
|
||||||
const CScriptObject* pInst = (pSender ? pSender : pReceiver);
|
const CScriptObject* pInst = (pSender ? pSender : pReceiver);
|
||||||
|
|
||||||
CVector3f Start = mScene.NodeForInstance(pInst)->CenterPoint();
|
CVector3f Start = mScene.NodeForInstance(pInst)->CenterPoint();
|
||||||
|
|||||||
@@ -74,8 +74,8 @@ void WEditorProperties::SetLayerComboBox()
|
|||||||
|
|
||||||
if (mpDisplayNode && mpDisplayNode->NodeType() == ENodeType::Script)
|
if (mpDisplayNode && mpDisplayNode->NodeType() == ENodeType::Script)
|
||||||
{
|
{
|
||||||
CScriptNode *pScript = static_cast<CScriptNode*>(mpDisplayNode);
|
const auto* pScript = static_cast<const CScriptNode*>(mpDisplayNode);
|
||||||
CScriptLayer *pLayer = pScript->Instance()->Layer();
|
const auto* pLayer = pScript->Instance()->Layer();
|
||||||
for (size_t iLyr = 0; iLyr < mpEditor->ActiveArea()->NumScriptLayers(); iLyr++)
|
for (size_t iLyr = 0; iLyr < mpEditor->ActiveArea()->NumScriptLayers(); iLyr++)
|
||||||
{
|
{
|
||||||
if (mpEditor->ActiveArea()->ScriptLayer(iLyr) == pLayer)
|
if (mpEditor->ActiveArea()->ScriptLayer(iLyr) == pLayer)
|
||||||
@@ -98,7 +98,7 @@ void WEditorProperties::SetLayerComboBox()
|
|||||||
// ************ PUBLIC SLOTS ************
|
// ************ PUBLIC SLOTS ************
|
||||||
void WEditorProperties::OnSelectionModified()
|
void WEditorProperties::OnSelectionModified()
|
||||||
{
|
{
|
||||||
CNodeSelection *pSelection = mpEditor->Selection();
|
const CNodeSelection* pSelection = mpEditor->Selection();
|
||||||
mpDisplayNode = (pSelection->Size() == 1 ? pSelection->Front() : nullptr);
|
mpDisplayNode = (pSelection->Size() == 1 ? pSelection->Front() : nullptr);
|
||||||
|
|
||||||
if (pSelection->IsEmpty() || pSelection->Size() != 1 || mpDisplayNode->NodeType() != ENodeType::Script)
|
if (pSelection->IsEmpty() || pSelection->Size() != 1 || mpDisplayNode->NodeType() != ENodeType::Script)
|
||||||
@@ -125,7 +125,6 @@ void WEditorProperties::OnSelectionModified()
|
|||||||
|
|
||||||
mpInstanceInfoLabel->setToolTip({});
|
mpInstanceInfoLabel->setToolTip({});
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CScriptNode *pScript = static_cast<CScriptNode*>(mpDisplayNode);
|
CScriptNode *pScript = static_cast<CScriptNode*>(mpDisplayNode);
|
||||||
|
|||||||
@@ -81,8 +81,8 @@ void WModifyTab::GenerateUI()
|
|||||||
|
|
||||||
if (mpSelectedNode->NodeType() == ENodeType::Script)
|
if (mpSelectedNode->NodeType() == ENodeType::Script)
|
||||||
{
|
{
|
||||||
CScriptNode *pScriptNode = static_cast<CScriptNode*>(mpSelectedNode);
|
const auto* pScriptNode = static_cast<const CScriptNode*>(mpSelectedNode);
|
||||||
CScriptObject *pObj = pScriptNode->Instance();
|
CScriptObject* pObj = pScriptNode->Instance();
|
||||||
|
|
||||||
// Set up UI
|
// Set up UI
|
||||||
ui->ObjectsTabWidget->show();
|
ui->ObjectsTabWidget->show();
|
||||||
@@ -118,7 +118,7 @@ void WModifyTab::OnInstanceLinksModified(const QList<CScriptObject*>& rkInstance
|
|||||||
{
|
{
|
||||||
if (mpSelectedNode && mpSelectedNode->NodeType() == ENodeType::Script)
|
if (mpSelectedNode && mpSelectedNode->NodeType() == ENodeType::Script)
|
||||||
{
|
{
|
||||||
CScriptObject *pInstance = static_cast<CScriptNode*>(mpSelectedNode)->Instance();
|
const auto* pInstance = static_cast<const CScriptNode*>(mpSelectedNode)->Instance();
|
||||||
|
|
||||||
if (pInstance && rkInstances.contains(pInstance))
|
if (pInstance && rkInstances.contains(pInstance))
|
||||||
{
|
{
|
||||||
@@ -247,7 +247,7 @@ void WModifyTab::OnEditLinkClicked()
|
|||||||
|
|
||||||
if (SelectedIndices.size() == 1)
|
if (SelectedIndices.size() == 1)
|
||||||
{
|
{
|
||||||
CScriptObject *pInst = static_cast<CScriptNode*>(mpSelectedNode)->Instance();
|
const auto* pInst = static_cast<const CScriptNode*>(mpSelectedNode)->Instance();
|
||||||
CLinkDialog *pDialog = mpWorldEditor->LinkDialog();
|
CLinkDialog *pDialog = mpWorldEditor->LinkDialog();
|
||||||
pDialog->EditLink(pInst->Link(Type, SelectedIndices.front().row()));
|
pDialog->EditLink(pInst->Link(Type, SelectedIndices.front().row()));
|
||||||
pDialog->show();
|
pDialog->show();
|
||||||
|
|||||||
Reference in New Issue
Block a user