From f013d8327d7bf06ee3926b4b671c5d0d09b3cb0a Mon Sep 17 00:00:00 2001 From: hyzboy Date: Fri, 18 Jul 2025 01:12:19 +0800 Subject: [PATCH] =?UTF-8?q?SceneNode=E5=A2=9E=E5=8A=A0GetEventDispatcher?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/Gizmo/Gizmo3DMove.cpp | 12 +++++++++--- inc/hgl/WorkObject.h | 3 +-- inc/hgl/graph/SceneNode.h | 11 ++++++++++- src/Work/WorkObject.cpp | 7 ------- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/example/Gizmo/Gizmo3DMove.cpp b/example/Gizmo/Gizmo3DMove.cpp index ebff5bfc..14f3372d 100644 --- a/example/Gizmo/Gizmo3DMove.cpp +++ b/example/Gizmo/Gizmo3DMove.cpp @@ -27,6 +27,7 @@ #include #include #include +#include VK_NAMESPACE_BEGIN @@ -35,7 +36,7 @@ namespace /** * 移动 Gizmo 节点 */ - class GizmoMoveNode:public SceneNode + class GizmoMoveNode:public SceneNode,io::MouseEvent { struct GizmoMoveAxis { @@ -51,6 +52,11 @@ namespace using SceneNode::SceneNode; + io::EventDispatcher *GetEventDispatcher() override + { + return this; // GizmoMoveNode 处理鼠标事件 + } + SceneNode *CreateNode()const override { return(new GizmoMoveNode); @@ -69,7 +75,7 @@ namespace return new_gmn; } - bool Init(RenderFramework *render_framework) + bool CreateGizmoGeometry(RenderFramework *render_framework) { ComponentDataPtr SpherePtr =GetGizmoMeshCDP(GizmoShape::Sphere); ComponentDataPtr CylinderPtr=GetGizmoMeshCDP(GizmoShape::Cylinder); @@ -191,7 +197,7 @@ bool InitGizmoMoveNode(RenderFramework *render_framework) sn_gizmo_move=new GizmoMoveNode; - if(!sn_gizmo_move->Init(render_framework)) + if(!sn_gizmo_move->CreateGizmoGeometry(render_framework)) { delete sn_gizmo_move; sn_gizmo_move=nullptr; diff --git a/inc/hgl/WorkObject.h b/inc/hgl/WorkObject.h index 53065d44..c870ff32 100644 --- a/inc/hgl/WorkObject.h +++ b/inc/hgl/WorkObject.h @@ -6,7 +6,6 @@ #include #include #include -#include #include //#include @@ -22,7 +21,7 @@ namespace hgl * * WorkObject被定义为工作对象,所有的渲染控制都需要被写在WorkObject的Render函数下。 */ - class WorkObject:public TickObject,public io::WindowEvent + class WorkObject:public TickObject { graph::RenderFramework *render_framework=nullptr; diff --git a/inc/hgl/graph/SceneNode.h b/inc/hgl/graph/SceneNode.h index 0e60068f..b566559f 100644 --- a/inc/hgl/graph/SceneNode.h +++ b/inc/hgl/graph/SceneNode.h @@ -6,6 +6,11 @@ #include #include +namespace hgl::io +{ + class EventDispatcher; // 前向声明事件分发器 +}// + namespace hgl::graph { using SceneNodeID =int64; @@ -54,7 +59,7 @@ namespace hgl::graph SceneNode(const SceneNode &)=delete; SceneNode(const SceneNode *)=delete; - using SceneOrient::SceneOrient; ///<继承构造函数 + using SceneOrient::SceneOrient; ///<继承构造函数 virtual ~SceneNode(); public: @@ -122,6 +127,10 @@ namespace hgl::graph return sn; } + public: //事件相关 + + virtual io::EventDispatcher *GetEventDispatcher(){return nullptr;} ///<取得事件分发器(如果返回nullptr,则表示该节点不支持事件分发) + public: //坐标相关方法 virtual void SetBoundingBox (const AABB &bb){bounding_box=bb;} ///<设置绑定盒 diff --git a/src/Work/WorkObject.cpp b/src/Work/WorkObject.cpp index 93d36d01..40266873 100644 --- a/src/Work/WorkObject.cpp +++ b/src/Work/WorkObject.cpp @@ -23,11 +23,6 @@ namespace hgl { if(!rf) { - if(render_framework) - { - render_framework->RemoveChildDispatcher(this); - } - render_framework=nullptr; db=nullptr; } @@ -42,8 +37,6 @@ namespace hgl db=rf->GetRenderResource(); scene=rf->GetDefaultScene(); renderer=rf->GetDefaultRenderer(); - - render_framework->AddChildDispatcher(this); } void WorkObject::Render(double delta_time)