CCScriptEventDispatcher(quick扩展类 。用于lua 下的CCNode 事件分发)

来源:互联网 发布:vue安装sass淘宝镜像 编辑:程序博客网 时间:2024/05/16 12:47


#ifndef __CCSCRIPT_EVENT_DISPATCHER_H__

#define __CCSCRIPT_EVENT_DISPATCHER_H__


#include <map>

#include <vector>


#include "CCObject.h"


using namespace std;


NS_CC_BEGIN


class CC_DLL CCScriptHandlePair

{

public:

   int index;

   int listener;

   int tag;

   int priority;

   bool enabled;


    CCScriptHandlePair(int index_,int listener_,int tag_,int priority_)

    : index(index_)

    , listener(listener_)

    , tag(tag_)

    , priority(priority_)

    , enabled(true)

    {

    }

};


#define NODE_EVENT                  0

#define NODE_ENTER_FRAME_EVENT      1

#define NODE_TOUCH_EVENT            2

#define NODE_TOUCH_CAPTURE_EVENT    3

#define MENU_ITEM_CLICKED_EVENT     4

#define ACCELERATE_EVENT            5

#define KEYPAD_EVENT                6


#define NODE_TOUCH_CAPTURING_PHASE  0

#define NODE_TOUCH_TARGETING_PHASE  1



// listener handle -> listener pair

typedef vector<CCScriptHandlePair> CCScriptEventListenersForEvent;

typedef CCScriptEventListenersForEvent::iterator CCScriptEventListenersForEventIterator;


// event -> CCScriptEventListenersForEvent

typedef map<int, CCScriptEventListenersForEvent> CCScriptEventListenersForDispatcher;

typedef CCScriptEventListenersForDispatcher::iterator CCScriptEventListenersForDispatcherIterator;


class CC_DLL CCScriptEventDispatcher :public CCObject

{

public:

    CCScriptEventDispatcher();

   virtual ~CCScriptEventDispatcher();

   int addScriptEventListener(int event,int listener,int tag =0,int priority =0);

   void removeScriptEventListener(int handle);

   void removeScriptEventListenersByEvent(int event);

   void removeScriptEventListenersByTag(int tag);

   void removeAllScriptEventListeners();


   bool hasScriptEventListener(int event);

    CCScriptEventListenersForEvent &getScriptEventListenersByEvent(int event)const;

    CCScriptEventListenersForDispatcher &getAllScriptEventListeners()const;


private:

    CCScriptEventListenersForDispatcher *m_scriptEventListeners;


   staticint s_nextScriptEventHandleIndex;

   static CCScriptEventListenersForEvent s_emptyListenersForEvent;

   static CCScriptEventListenersForDispatcher s_emptyListeners;


   staticbool sortListenerCompare(const CCScriptHandlePair &a,const CCScriptHandlePair &b);

   staticbool removeListenerByTag(CCScriptHandlePair &p);

   staticint s_removeTag;

};


NS_CC_END


#endif // __CCSCRIPT_EVENT_DISPATCHER_H__


0 0
原创粉丝点击