CCObject

#ifndef __CCOBJECT_H__

#define __CCOBJECT_H__


#include "CCDataVisitor.h"


#ifdef EMSCRIPTEN

#include <GLES2/gl2.h>

#endif // EMSCRIPTEN


NS_CC_BEGIN


/**

 * @addtogroup base_nodes

 * @{

 */


class CCZone;

class CCObject;

class CCNode;

class CCEvent;


class CC_DLL CCCopying

{

public:

    virtual CCObject* copyWithZone(CCZone* pZone);

};


class CC_DLL CCObject : public CCCopying

{

public:

    // object id, CCScriptSupport need public m_uID

    unsigned int        m_uID;

    // Lua reference id

    int                 m_nLuaID;

protected:

    // count of references

    unsigned int        m_uReference;

    // count of autorelease

    unsigned int        m_uAutoReleaseCount;

public:

    CCObject(void);

    virtual ~CCObject(void);

    

    void release(void);

    void retain(void);

    CCObject* autorelease(void);

    CCObject* copy(void);

    bool isSingleReference(void) const;

    unsigned int retainCount(void) const;

    virtual bool isEqual(const CCObject* pObject);


    virtual void acceptVisitor(CCDataVisitor &visitor);


    virtual void update(float dt) {CC_UNUSED_PARAM(dt);};

    

    friend class CCAutoreleasePool;

};



typedef void (CCObject::*SEL_SCHEDULE)(float);

typedef void (CCObject::*SEL_CallFunc)();

typedef void (CCObject::*SEL_CallFuncN)(CCNode*);

typedef void (CCObject::*SEL_CallFuncND)(CCNode*, void*);

typedef void (CCObject::*SEL_CallFuncO)(CCObject*);

typedef void (CCObject::*SEL_MenuHandler)(CCObject*);

typedef void (CCObject::*SEL_EventHandler)(CCEvent*);

typedef int (CCObject::*SEL_Compare)(CCObject*);


#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)

#define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)

#define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR)

#define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR)

#define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)

#define menu_selector(_SELECTOR) (SEL_MenuHandler)(&_SELECTOR)

#define event_selector(_SELECTOR) (SEL_EventHandler)(&_SELECTOR)

#define compare_selector(_SELECTOR) (SEL_Compare)(&_SELECTOR)


// end of base_nodes group

/// @}


NS_CC_END


#endif // __CCOBJECT_H__


posted @ 2014-05-22 21:13  sssssnian  阅读(115)  评论(0编辑  收藏  举报