Magic_Game/Easy2D/elisteners.h

412 lines
6.3 KiB
C
Raw Normal View History

#pragma once
#include "ebase.h"
2017-10-28 18:48:21 +08:00
#include "egeometry.h"
namespace e2d
{
class ENode;
class EMsgManager;
2017-10-28 18:48:21 +08:00
class EPhysicsManager;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class EListener :
public EObject
{
friend EMsgManager;
public:
EListener();
EListener(
const EString &name
);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
bool isRunning() const;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void start();
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
void stop();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EString getName() const;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽڵ<DABD>
ENode * getParentNode() const;
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setName(
const EString &name
);
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>ͣʱ<CDA3><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setAlwaysWorking(
bool bAlways
);
// <20>󶨼<EFBFBD><F3B6A8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void bindWith(
EScene * pParentScene
) = 0;
// <20>󶨼<EFBFBD><F3B6A8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
virtual void bindWith(
ENode * pParentNode
) = 0;
protected:
// ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void _callOn() = 0;
protected:
EString m_sName;
bool m_bRunning;
bool m_bAlways;
ENode * m_pParentNode;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-11-03 12:51:01 +08:00
class EListenerMouse :
public EListener
{
friend EMsgManager;
public:
2017-11-03 12:51:01 +08:00
EListenerMouse();
2017-11-03 12:51:01 +08:00
EListenerMouse(
const EString &name
);
2017-11-03 12:51:01 +08:00
EListenerMouse(
const MOUSE_LISTENER_CALLBACK &callback
);
2017-11-03 12:51:01 +08:00
EListenerMouse(
const EString &name,
const MOUSE_LISTENER_CALLBACK &callback
);
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
void setCallback(
const MOUSE_LISTENER_CALLBACK &callback
);
// <20>󶨼<EFBFBD><F3B6A8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void bindWith(
EScene * pParentScene
) override;
// <20>󶨼<EFBFBD><F3B6A8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
virtual void bindWith(
ENode * pParentNode
) override;
protected:
// ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void _callOn() override;
protected:
MOUSE_LISTENER_CALLBACK m_Callback;
};
// <20><><EFBFBD><EFBFBD><EAB0B4><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-11-03 12:51:01 +08:00
class EListenerMousePress :
public EListenerMouse
{
public:
2017-11-03 12:51:01 +08:00
EListenerMousePress();
2017-11-03 12:51:01 +08:00
EListenerMousePress(
const EString &name
);
2017-11-03 12:51:01 +08:00
EListenerMousePress(
const MOUSE_PRESS_LISTENER_CALLBACK &callback
);
2017-11-03 12:51:01 +08:00
EListenerMousePress(
const EString &name,
const MOUSE_PRESS_LISTENER_CALLBACK &callback
);
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
void setCallback(
const MOUSE_PRESS_LISTENER_CALLBACK &callback
);
protected:
// ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void _callOn() override;
protected:
MOUSE_PRESS_LISTENER_CALLBACK m_Callback;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-11-03 12:51:01 +08:00
class EListenerMouseClick :
public EListenerMouse
{
public:
2017-11-03 12:51:01 +08:00
EListenerMouseClick();
2017-11-03 12:51:01 +08:00
EListenerMouseClick(
const EString &name
);
2017-11-03 12:51:01 +08:00
EListenerMouseClick(
const MOUSE_CLICK_LISTENER_CALLBACK &callback
);
2017-11-03 12:51:01 +08:00
EListenerMouseClick(
const EString &name,
const MOUSE_CLICK_LISTENER_CALLBACK &callback
);
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
void setCallback(
const MOUSE_CLICK_LISTENER_CALLBACK &callback
);
protected:
// ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void _callOn() override;
protected:
bool m_bPressed;
MOUSE_CLICK_LISTENER_CALLBACK m_Callback;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-11-03 12:51:01 +08:00
class EListenerMouseDoubleClick :
public EListenerMouse
{
public:
2017-11-03 12:51:01 +08:00
EListenerMouseDoubleClick();
2017-11-03 12:51:01 +08:00
EListenerMouseDoubleClick(
const EString &name
);
2017-11-03 12:51:01 +08:00
EListenerMouseDoubleClick(
const MOUSE_DBLCLK_LISTENER_CALLBACK &callback
);
2017-11-03 12:51:01 +08:00
EListenerMouseDoubleClick(
const EString &name,
const MOUSE_DBLCLK_LISTENER_CALLBACK &callback
);
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
void setCallback(
const MOUSE_DBLCLK_LISTENER_CALLBACK &callback
);
protected:
// ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void _callOn() override;
protected:
bool m_bPressed;
MOUSE_DBLCLK_LISTENER_CALLBACK m_Callback;
};
// <20><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-11-03 12:51:01 +08:00
class EListenerMouseDrag :
public EListenerMouse
{
public:
2017-11-03 12:51:01 +08:00
EListenerMouseDrag();
2017-11-03 12:51:01 +08:00
EListenerMouseDrag(
const EString &name
);
2017-11-03 12:51:01 +08:00
EListenerMouseDrag(
const MOUSE_DRAG_LISTENER_CALLBACK &callback
);
2017-11-03 12:51:01 +08:00
EListenerMouseDrag(
const EString &name,
const MOUSE_DRAG_LISTENER_CALLBACK &callback
);
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
void setCallback(
const MOUSE_DRAG_LISTENER_CALLBACK &callback
);
protected:
// ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void _callOn() override;
protected:
EPoint m_Begin;
MOUSE_DRAG_LISTENER_CALLBACK m_Callback;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-11-03 12:51:01 +08:00
class EListenerKeyboard :
public EListener
{
friend EMsgManager;
public:
2017-11-03 12:51:01 +08:00
EListenerKeyboard();
2017-11-03 12:51:01 +08:00
EListenerKeyboard(
const EString &name
);
2017-11-03 12:51:01 +08:00
EListenerKeyboard(
const KEY_LISTENER_CALLBACK &callback
);
2017-11-03 12:51:01 +08:00
EListenerKeyboard(
const EString &name,
const KEY_LISTENER_CALLBACK &callback
);
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
void setCallback(
const KEY_LISTENER_CALLBACK &callback
);
// <20>󶨼<EFBFBD><F3B6A8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void bindWith(
EScene * pParentScene
) override;
// <20>󶨼<EFBFBD><F3B6A8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
virtual void bindWith(
ENode * pParentNode
) override;
protected:
// ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void _callOn() override;
protected:
KEY_LISTENER_CALLBACK m_Callback;
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
2017-11-03 12:51:01 +08:00
class EListenerKeyboardPress :
public EListenerKeyboard
{
friend EMsgManager;
public:
2017-11-03 12:51:01 +08:00
EListenerKeyboardPress();
2017-11-03 12:51:01 +08:00
EListenerKeyboardPress(
const EString &name
);
2017-11-03 12:51:01 +08:00
EListenerKeyboardPress(
const KEY_LISTENER_CALLBACK &callback
);
2017-11-03 12:51:01 +08:00
EListenerKeyboardPress(
const EString &name,
const KEY_LISTENER_CALLBACK &callback
);
protected:
// ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void _callOn() override;
};
2017-10-28 18:48:21 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
typedef std::function<void(ENode *active, ENode *passive, int relation)> PHYSICS_LISTENER_CALLBACK;
// <20><>ײ<EFBFBD><D7B2>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef std::function<void(ENode *active, ENode *passive)> COLLISION_LISTENER_CALLBACK;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-11-03 12:51:01 +08:00
class EListenerPhysics :
2017-10-28 18:48:21 +08:00
public EListener
{
friend EPhysicsManager;
public:
2017-11-03 12:51:01 +08:00
EListenerPhysics();
2017-10-28 18:48:21 +08:00
2017-11-03 12:51:01 +08:00
EListenerPhysics(
2017-10-28 18:48:21 +08:00
const EString &name
);
2017-11-03 12:51:01 +08:00
EListenerPhysics(
2017-10-28 18:48:21 +08:00
const PHYSICS_LISTENER_CALLBACK &callback
);
2017-11-03 12:51:01 +08:00
EListenerPhysics(
2017-10-28 18:48:21 +08:00
const EString &name,
const PHYSICS_LISTENER_CALLBACK &callback
);
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
void setCallback(
const PHYSICS_LISTENER_CALLBACK &callback
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void bindWith(
EScene * pParentScene
) override;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
virtual void bindWith(
ENode * pParentNode
) override;
protected:
// ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void _callOn() override;
protected:
PHYSICS_LISTENER_CALLBACK m_Callback;
};
2017-11-03 12:51:01 +08:00
class EListenerPhysicsContact :
public EListenerPhysics
2017-10-28 18:48:21 +08:00
{
friend EMsgManager;
public:
2017-11-03 12:51:01 +08:00
EListenerPhysicsContact();
2017-10-28 18:48:21 +08:00
2017-11-03 12:51:01 +08:00
EListenerPhysicsContact(
2017-10-28 18:48:21 +08:00
const EString &name
);
2017-11-03 12:51:01 +08:00
EListenerPhysicsContact(
2017-10-28 18:48:21 +08:00
const COLLISION_LISTENER_CALLBACK &callback
);
2017-11-03 12:51:01 +08:00
EListenerPhysicsContact(
2017-10-28 18:48:21 +08:00
const EString &name,
const COLLISION_LISTENER_CALLBACK &callback
);
protected:
// ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void _callOn() override;
protected:
COLLISION_LISTENER_CALLBACK m_Callback;
};
}