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


#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;


   static int s_nextScriptEventHandleIndex;

   static CCScriptEventListenersForEvent s_emptyListenersForEvent;

   static CCScriptEventListenersForDispatcher s_emptyListeners;


   static bool sortListenerCompare(const CCScriptHandlePair &a,const CCScriptHandlePair &b);

   static bool removeListenerByTag(CCScriptHandlePair &p);

   static int s_removeTag;

};


NS_CC_END


#endif // __CCSCRIPT_EVENT_DISPATCHER_H__


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值