Magic_Game/Easy2D/elisteners.h

414 lines
6.2 KiB
C++

#pragma once
#include "ebase.h"
#include "egeometry.h"
namespace e2d
{
class ENode;
class EMsgManager;
class EPhysicsManager;
// 监听器
class EListener :
public EObject
{
friend EMsgManager;
public:
EListener();
EListener(
const EString &name
);
// 获取监听器状态
bool isRunning() const;
// 启动监听
void start();
// 停止监听
void stop();
// 获取监听器名称
EString getName() const;
// 获取监听器所在节点
ENode * getParentNode() const;
// 设置监听器名称
void setName(
const EString &name
);
// 设置监听器吞噬消息
void setSwallow(
bool bSwallow
);
// 设置监听器在游戏暂停时继续工作
void setAlwaysWorking(
bool bAlways
);
// 绑定监听器到场景
virtual void bindWith(
EScene * pParentScene
) = 0;
// 绑定监听器到节点
virtual void bindWith(
ENode * pParentNode
) = 0;
protected:
// 执行监听器回调函数
virtual void _callOn() = 0;
// 获取监听器状态是否就绪
virtual bool _isReady() const;
protected:
EString m_sName;
bool m_bRunning;
bool m_bAlways;
bool m_bSwallow;
ENode * m_pParentNode;
};
// 鼠标消息监听器
class EListenerMouse :
public EListener
{
friend EMsgManager;
public:
EListenerMouse();
EListenerMouse(
const EString &name
);
EListenerMouse(
const MOUSE_LISTENER_CALLBACK &callback
);
EListenerMouse(
const EString &name,
const MOUSE_LISTENER_CALLBACK &callback
);
// 设置监听器回调函数
void setCallback(
const MOUSE_LISTENER_CALLBACK &callback
);
// 绑定监听器到场景
virtual void bindWith(
EScene * pParentScene
) override;
// 绑定监听器到节点
virtual void bindWith(
ENode * pParentNode
) override;
protected:
// 执行监听器回调函数
virtual void _callOn() override;
protected:
MOUSE_LISTENER_CALLBACK m_Callback;
};
// 鼠标按下消息监听器
class EListenerMousePress :
public EListenerMouse
{
public:
EListenerMousePress();
EListenerMousePress(
const EString &name
);
EListenerMousePress(
const MOUSE_PRESS_LISTENER_CALLBACK &callback
);
EListenerMousePress(
const EString &name,
const MOUSE_PRESS_LISTENER_CALLBACK &callback
);
// 设置监听器回调函数
void setCallback(
const MOUSE_PRESS_LISTENER_CALLBACK &callback
);
protected:
// 执行监听器回调函数
virtual void _callOn() override;
protected:
MOUSE_PRESS_LISTENER_CALLBACK m_Callback;
};
// 鼠标点击消息监听器
class EListenerMouseClick :
public EListenerMouse
{
public:
EListenerMouseClick();
EListenerMouseClick(
const EString &name
);
EListenerMouseClick(
const MOUSE_CLICK_LISTENER_CALLBACK &callback
);
EListenerMouseClick(
const EString &name,
const MOUSE_CLICK_LISTENER_CALLBACK &callback
);
// 设置监听器回调函数
void setCallback(
const MOUSE_CLICK_LISTENER_CALLBACK &callback
);
protected:
// 执行监听器回调函数
virtual void _callOn() override;
protected:
bool m_bPressed;
MOUSE_CLICK_LISTENER_CALLBACK m_Callback;
};
// 鼠标点击消息监听器
class EListenerMouseDoubleClick :
public EListenerMouse
{
public:
EListenerMouseDoubleClick();
EListenerMouseDoubleClick(
const EString &name
);
EListenerMouseDoubleClick(
const MOUSE_DBLCLK_LISTENER_CALLBACK &callback
);
EListenerMouseDoubleClick(
const EString &name,
const MOUSE_DBLCLK_LISTENER_CALLBACK &callback
);
// 设置监听器回调函数
void setCallback(
const MOUSE_DBLCLK_LISTENER_CALLBACK &callback
);
protected:
// 执行监听器回调函数
virtual void _callOn() override;
protected:
bool m_bPressed;
MOUSE_DBLCLK_LISTENER_CALLBACK m_Callback;
};
// 鼠标拖动消息监听器
class EListenerMouseDrag :
public EListenerMouse
{
public:
EListenerMouseDrag();
EListenerMouseDrag(
const EString &name
);
EListenerMouseDrag(
const MOUSE_DRAG_LISTENER_CALLBACK &callback
);
EListenerMouseDrag(
const EString &name,
const MOUSE_DRAG_LISTENER_CALLBACK &callback
);
// 设置监听器回调函数
void setCallback(
const MOUSE_DRAG_LISTENER_CALLBACK &callback
);
protected:
// 执行监听器回调函数
virtual void _callOn() override;
protected:
EPoint m_Begin;
MOUSE_DRAG_LISTENER_CALLBACK m_Callback;
};
// 按键消息监听器
class EListenerKeyboard :
public EListener
{
friend EMsgManager;
public:
EListenerKeyboard();
EListenerKeyboard(
const EString &name
);
EListenerKeyboard(
const KEY_LISTENER_CALLBACK &callback
);
EListenerKeyboard(
const EString &name,
const KEY_LISTENER_CALLBACK &callback
);
// 设置监听器回调函数
void setCallback(
const KEY_LISTENER_CALLBACK &callback
);
// 绑定监听器到场景
virtual void bindWith(
EScene * pParentScene
) override;
// 绑定监听器到节点
virtual void bindWith(
ENode * pParentNode
) override;
protected:
// 执行监听器回调函数
virtual void _callOn() override;
protected:
KEY_LISTENER_CALLBACK m_Callback;
};
// 按键按下消息监听
class EListenerKeyboardPress :
public EListenerKeyboard
{
friend EMsgManager;
public:
EListenerKeyboardPress();
EListenerKeyboardPress(
const EString &name
);
EListenerKeyboardPress(
const KEY_LISTENER_CALLBACK &callback
);
EListenerKeyboardPress(
const EString &name,
const KEY_LISTENER_CALLBACK &callback
);
protected:
// 执行监听器回调函数
virtual void _callOn() override;
};
// 物理世界消息监听器
class EListenerPhysics :
public EListener
{
friend EPhysicsManager;
public:
EListenerPhysics();
EListenerPhysics(
const EString &name
);
EListenerPhysics(
const PHYSICS_LISTENER_CALLBACK &callback
);
EListenerPhysics(
const EString &name,
const PHYSICS_LISTENER_CALLBACK &callback
);
// 设置监听器回调函数
void setCallback(
const PHYSICS_LISTENER_CALLBACK &callback
);
// 将监听器与场景绑定
virtual void bindWith(
EScene * pParentScene
) override;
// 将监听器与节点绑定
virtual void bindWith(
ENode * pParentNode
) override;
protected:
// 执行监听器回调函数
virtual void _callOn() override;
protected:
PHYSICS_LISTENER_CALLBACK m_Callback;
};
// 几何体冲突消息监听器
class EListenerPhysicsCollision :
public EListenerPhysics
{
public:
EListenerPhysicsCollision();
EListenerPhysicsCollision(
const EString &name
);
EListenerPhysicsCollision(
const COLLISION_LISTENER_CALLBACK &callback
);
EListenerPhysicsCollision(
const EString &name,
const COLLISION_LISTENER_CALLBACK &callback
);
protected:
// 执行监听器回调函数
virtual void _callOn() override;
protected:
COLLISION_LISTENER_CALLBACK m_Callback;
};
}