CCScriptSupport

#ifndef __SCRIPT_SUPPORT_H__

#define __SCRIPT_SUPPORT_H__


#include "platform/CCCommon.h"

#include "CCAccelerometer.h"

#include "touch_dispatcher/CCTouch.h"

#include "cocoa/CCSet.h"

#include "CCAccelerometer.h"

#include <map>

#include <string>

#include <list>


typedef struct lua_State lua_State;


NS_CC_BEGIN


class CCTimer;

class CCLayer;

class CCMenuItem;

class CCNotificationCenter;

class CCCallFunc;

class CCAcceleration;


enum ccScriptType {

    kScriptTypeNone = 0,

    kScriptTypeLua,

    kScriptTypeJavascript

};


class CCScriptHandlerEntry : public CCObject

{

public:

    static CCScriptHandlerEntry* create(int nHandler);

    ~CCScriptHandlerEntry(void);

    

    int getHandler(void) {

        return m_nHandler;

    }

    

    int getEntryId(void) {

        return m_nEntryId;

    }

    

protected:

    CCScriptHandlerEntry(int nHandler)

    : m_nHandler(nHandler)

    {

        static int newEntryId = 0;

        newEntryId++;

        m_nEntryId = newEntryId;

    }

    

    int m_nHandler;

    int m_nEntryId;

};


/**

 * @addtogroup script_support

 * @{

 */


class CCSchedulerScriptHandlerEntry : public CCScriptHandlerEntry

{

public:

    // nHandler return by tolua_ref_function(), called from LuaCocos2d.cpp

    static CCSchedulerScriptHandlerEntry* create(int nHandler, float fInterval, bool bPaused);

    ~CCSchedulerScriptHandlerEntry(void);

    

    cocos2d::CCTimer* getTimer(void) {

        return m_pTimer;

    }

    

    bool isPaused(void) {

        return m_bPaused;

    }

    

    void markedForDeletion(void) {

        m_bMarkedForDeletion = true;

    }

    

    bool isMarkedForDeletion(void) {

        return m_bMarkedForDeletion;

    }

    

private:

    CCSchedulerScriptHandlerEntry(int nHandler)

    : CCScriptHandlerEntry(nHandler)

    , m_pTimer(NULL)

    , m_bPaused(false)

    , m_bMarkedForDeletion(false)

    {

    }

    bool init(float fInterval, bool bPaused);

    

    cocos2d::CCTimer*   m_pTimer;

    bool                m_bPaused;

    bool                m_bMarkedForDeletion;

};




class CCTouchScriptHandlerEntry : public CCScriptHandlerEntry

{

public:

    static CCTouchScriptHandlerEntry* create(int nHandler, bool bIsMultiTouches, int nPriority, bool bSwallowsTouches);

    ~CCTouchScriptHandlerEntry(void);

    

    bool isMultiTouches(void) {

        return m_bIsMultiTouches;

    }

    

    int getPriority(void) {

        return m_nPriority;

    }

    

    bool getSwallowsTouches(void) {

        return m_bSwallowsTouches;

    }

    

private:

    CCTouchScriptHandlerEntry(int nHandler)

    : CCScriptHandlerEntry(nHandler)

    , m_bIsMultiTouches(false)

    , m_nPriority(0)

    , m_bSwallowsTouches(false)

    {

    }

    bool init(bool bIsMultiTouches, int nPriority, bool bSwallowsTouches);

    

    bool    m_bIsMultiTouches;

    int     m_nPriority;

    bool    m_bSwallowsTouches;

};



// Don't make CCScriptEngineProtocol inherits from CCObject since setScriptEngine is invoked only once in AppDelegate.cpp,

// It will affect the lifecycle of ScriptCore instance, the autorelease pool will be destroyed before destructing ScriptCore.

// So a crash will appear on Win32 if you click the close button.

class CC_DLL CCScriptEngineProtocol

{

public:

    virtual ~CCScriptEngineProtocol() {};

    

    /** Get script type */

    virtual ccScriptType getScriptType() { return kScriptTypeNone; };


    /** Remove script object. */

    virtual void removeScriptObjectByCCObject(CCObject* pObj) = 0;

    

    /** Remove script function handler, only CCLuaEngine class need to implement this function. */

    virtual void removeScriptHandler(int nHandler) {};

    

    /** Reallocate script function handler, only CCLuaEngine class need to implement this function. */

    virtual int reallocateScriptHandler(int nHandler) { return -1;}

    

    /**

     @brief Execute script code contained in the given string.

     @param codes holding the valid script code that should be executed.

     @return 0 if the string is executed correctly.

     @return other if the string is executed wrongly.

     */

    virtual int executeString(const char* codes) = 0;

    

    /**

     @brief Execute a script file.

     @param filename String object holding the filename of the script file that is to be executed

     */

    virtual int executeScriptFile(const char* filename) = 0;

    

    /**

     @brief Execute a scripted global function.

     @brief The function should not take any parameters and should return an integer.

     @param functionName String object holding the name of the function, in the global script environment, that is to be executed.

     @return The integer value returned from the script function.

     */

    virtual int executeGlobalFunction(const char* functionName) = 0;

    

    /**

     @brief Execute a node event function

     @param pNode which node produce this event

     @param nAction kCCNodeOnEnter,kCCNodeOnExit,kCCMenuItemActivated,kCCNodeOnEnterTransitionDidFinish,kCCNodeOnExitTransitionDidStart

     @return The integer value returned from the script function.

     */

    virtual int executeNodeEvent(CCNode* pNode, int nAction) = 0;

    

    virtual int executeMenuItemEvent(CCMenuItem* pMenuItem) = 0;

    /** Execute a notification event function */

    virtual int executeNotificationEvent(CCNotificationCenter* pNotificationCenter, const char* pszName) = 0;

    

    /** execute a callfun event */

    virtual int executeCallFuncActionEvent(CCCallFunc* pAction, CCObject* pTarget = NULL) = 0;

    /** execute a schedule function */

    virtual int executeSchedule(int nHandler, float dt, CCNode* pNode = NULL) = 0;

    

    /** functions for executing touch event */

    virtual int executeLayerTouchesEvent(CCLayer* pLayer, int eventType, CCSet *pTouches) = 0;

    virtual int executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch) = 0;


    /** functions for keypad event */

    virtual int executeLayerKeypadEvent(CCLayer* pLayer, int eventType) = 0;


    /** execute a accelerometer event */

    virtual int executeAccelerometerEvent(CCLayer* pLayer, CCAcceleration* pAccelerationValue) = 0;


    /** function for common event */

    virtual int executeEvent(int nHandler, const char* pEventName, CCObject* pEventSource = NULL, const char* pEventSourceClassName = NULL) = 0;


    /** called by CCAssert to allow scripting engine to handle failed assertions

     * @return true if the assert was handled by the script engine, false otherwise.

     */

    virtual bool handleAssert(const char *msg) = 0;

};


/**

 CCScriptEngineManager is a singleton which holds an object instance of CCScriptEngineProtocl

 It helps cocos2d-x and the user code to find back LuaEngine object

 @since v0.99.5-x-0.8.5

 */

class CC_DLL CCScriptEngineManager

{

public:

    ~CCScriptEngineManager(void);

    

    CCScriptEngineProtocol* getScriptEngine(void) {

        return m_pScriptEngine;

    }

    void setScriptEngine(CCScriptEngineProtocol *pScriptEngine);

    void removeScriptEngine(void);

    

    static CCScriptEngineManager* sharedManager(void);

    static void purgeSharedManager(void);

    

private:

    CCScriptEngineManager(void)

    : m_pScriptEngine(NULL)

    {

    }

    

    CCScriptEngineProtocol *m_pScriptEngine;

};


// end of script_support group

/// @}


NS_CC_END


#endif // __SCRIPT_SUPPORT_H__


转载于:https://www.cnblogs.com/sssssnian/p/3748634.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值