SceneNode增加GetEventDispatcher接口
This commit is contained in:
@@ -27,6 +27,7 @@
|
|||||||
#include<hgl/graph/InlineGeometry.h>
|
#include<hgl/graph/InlineGeometry.h>
|
||||||
#include<hgl/graph/RenderFramework.h>
|
#include<hgl/graph/RenderFramework.h>
|
||||||
#include<hgl/component/MeshComponent.h>
|
#include<hgl/component/MeshComponent.h>
|
||||||
|
#include<hgl/io/event/MouseEvent.h>
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -35,7 +36,7 @@ namespace
|
|||||||
/**
|
/**
|
||||||
* 移动 Gizmo 节点
|
* 移动 Gizmo 节点
|
||||||
*/
|
*/
|
||||||
class GizmoMoveNode:public SceneNode
|
class GizmoMoveNode:public SceneNode,io::MouseEvent
|
||||||
{
|
{
|
||||||
struct GizmoMoveAxis
|
struct GizmoMoveAxis
|
||||||
{
|
{
|
||||||
@@ -51,6 +52,11 @@ namespace
|
|||||||
|
|
||||||
using SceneNode::SceneNode;
|
using SceneNode::SceneNode;
|
||||||
|
|
||||||
|
io::EventDispatcher *GetEventDispatcher() override
|
||||||
|
{
|
||||||
|
return this; // GizmoMoveNode 处理鼠标事件
|
||||||
|
}
|
||||||
|
|
||||||
SceneNode *CreateNode()const override
|
SceneNode *CreateNode()const override
|
||||||
{
|
{
|
||||||
return(new GizmoMoveNode);
|
return(new GizmoMoveNode);
|
||||||
@@ -69,7 +75,7 @@ namespace
|
|||||||
return new_gmn;
|
return new_gmn;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Init(RenderFramework *render_framework)
|
bool CreateGizmoGeometry(RenderFramework *render_framework)
|
||||||
{
|
{
|
||||||
ComponentDataPtr SpherePtr =GetGizmoMeshCDP(GizmoShape::Sphere);
|
ComponentDataPtr SpherePtr =GetGizmoMeshCDP(GizmoShape::Sphere);
|
||||||
ComponentDataPtr CylinderPtr=GetGizmoMeshCDP(GizmoShape::Cylinder);
|
ComponentDataPtr CylinderPtr=GetGizmoMeshCDP(GizmoShape::Cylinder);
|
||||||
@@ -191,7 +197,7 @@ bool InitGizmoMoveNode(RenderFramework *render_framework)
|
|||||||
|
|
||||||
sn_gizmo_move=new GizmoMoveNode;
|
sn_gizmo_move=new GizmoMoveNode;
|
||||||
|
|
||||||
if(!sn_gizmo_move->Init(render_framework))
|
if(!sn_gizmo_move->CreateGizmoGeometry(render_framework))
|
||||||
{
|
{
|
||||||
delete sn_gizmo_move;
|
delete sn_gizmo_move;
|
||||||
sn_gizmo_move=nullptr;
|
sn_gizmo_move=nullptr;
|
||||||
|
@@ -6,7 +6,6 @@
|
|||||||
#include<hgl/graph/mtl/MaterialLibrary.h>
|
#include<hgl/graph/mtl/MaterialLibrary.h>
|
||||||
#include<hgl/graph/Renderer.h>
|
#include<hgl/graph/Renderer.h>
|
||||||
#include<hgl/graph/Scene.h>
|
#include<hgl/graph/Scene.h>
|
||||||
#include<hgl/io/event/WindowEvent.h>
|
|
||||||
#include<hgl/Time.h>
|
#include<hgl/Time.h>
|
||||||
//#include<iostream>
|
//#include<iostream>
|
||||||
|
|
||||||
@@ -22,7 +21,7 @@ namespace hgl
|
|||||||
*
|
*
|
||||||
* WorkObject被定义为工作对象,所有的渲染控制都需要被写在WorkObject的Render函数下。
|
* WorkObject被定义为工作对象,所有的渲染控制都需要被写在WorkObject的Render函数下。
|
||||||
*/
|
*/
|
||||||
class WorkObject:public TickObject,public io::WindowEvent
|
class WorkObject:public TickObject
|
||||||
{
|
{
|
||||||
graph::RenderFramework *render_framework=nullptr;
|
graph::RenderFramework *render_framework=nullptr;
|
||||||
|
|
||||||
|
@@ -6,6 +6,11 @@
|
|||||||
#include<hgl/graph/AABB.h>
|
#include<hgl/graph/AABB.h>
|
||||||
#include<hgl/component/Component.h>
|
#include<hgl/component/Component.h>
|
||||||
|
|
||||||
|
namespace hgl::io
|
||||||
|
{
|
||||||
|
class EventDispatcher; // 前向声明事件分发器
|
||||||
|
}//
|
||||||
|
|
||||||
namespace hgl::graph
|
namespace hgl::graph
|
||||||
{
|
{
|
||||||
using SceneNodeID =int64;
|
using SceneNodeID =int64;
|
||||||
@@ -54,7 +59,7 @@ namespace hgl::graph
|
|||||||
SceneNode(const SceneNode &)=delete;
|
SceneNode(const SceneNode &)=delete;
|
||||||
SceneNode(const SceneNode *)=delete;
|
SceneNode(const SceneNode *)=delete;
|
||||||
|
|
||||||
using SceneOrient::SceneOrient; ///<继承构造函数
|
using SceneOrient::SceneOrient; ///<继承构造函数
|
||||||
virtual ~SceneNode();
|
virtual ~SceneNode();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -122,6 +127,10 @@ namespace hgl::graph
|
|||||||
return sn;
|
return sn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public: //事件相关
|
||||||
|
|
||||||
|
virtual io::EventDispatcher *GetEventDispatcher(){return nullptr;} ///<取得事件分发器(如果返回nullptr,则表示该节点不支持事件分发)
|
||||||
|
|
||||||
public: //坐标相关方法
|
public: //坐标相关方法
|
||||||
|
|
||||||
virtual void SetBoundingBox (const AABB &bb){bounding_box=bb;} ///<设置绑定盒
|
virtual void SetBoundingBox (const AABB &bb){bounding_box=bb;} ///<设置绑定盒
|
||||||
|
@@ -23,11 +23,6 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
if(!rf)
|
if(!rf)
|
||||||
{
|
{
|
||||||
if(render_framework)
|
|
||||||
{
|
|
||||||
render_framework->RemoveChildDispatcher(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
render_framework=nullptr;
|
render_framework=nullptr;
|
||||||
db=nullptr;
|
db=nullptr;
|
||||||
}
|
}
|
||||||
@@ -42,8 +37,6 @@ namespace hgl
|
|||||||
db=rf->GetRenderResource();
|
db=rf->GetRenderResource();
|
||||||
scene=rf->GetDefaultScene();
|
scene=rf->GetDefaultScene();
|
||||||
renderer=rf->GetDefaultRenderer();
|
renderer=rf->GetDefaultRenderer();
|
||||||
|
|
||||||
render_framework->AddChildDispatcher(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorkObject::Render(double delta_time)
|
void WorkObject::Render(double delta_time)
|
||||||
|
Reference in New Issue
Block a user