2012-02-09 14:07:11 +08:00
|
|
|
/****************************************************************************
|
2012-09-24 21:22:20 +08:00
|
|
|
Copyright (c) 2010-2012 cocos2d-x.org
|
2012-09-02 00:38:57 +08:00
|
|
|
|
|
|
|
http://www.cocos2d-x.org
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
|
in the Software without restriction, including without limitation the rights
|
|
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
|
|
all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
THE SOFTWARE.
|
|
|
|
****************************************************************************/
|
2012-02-09 14:07:11 +08:00
|
|
|
|
|
|
|
#ifndef __SCRIPT_SUPPORT_H__
|
|
|
|
#define __SCRIPT_SUPPORT_H__
|
|
|
|
|
2012-06-19 13:50:11 +08:00
|
|
|
#include "platform/CCCommon.h"
|
2012-11-14 06:58:11 +08:00
|
|
|
#include "CCAccelerometer.h"
|
2012-06-19 13:50:11 +08:00
|
|
|
#include "touch_dispatcher/CCTouch.h"
|
|
|
|
#include "cocoa/CCSet.h"
|
2012-12-02 15:17:34 +08:00
|
|
|
#include "CCAccelerometer.h"
|
2012-08-25 15:05:59 +08:00
|
|
|
#include <map>
|
|
|
|
#include <string>
|
|
|
|
#include <list>
|
2012-02-09 14:07:11 +08:00
|
|
|
|
|
|
|
typedef struct lua_State lua_State;
|
|
|
|
|
|
|
|
NS_CC_BEGIN
|
|
|
|
|
2012-09-11 14:02:33 +08:00
|
|
|
class CCTimer;
|
|
|
|
class CCLayer;
|
|
|
|
class CCMenuItem;
|
|
|
|
class CCNotificationCenter;
|
|
|
|
class CCCallFunc;
|
2012-11-06 14:18:13 +08:00
|
|
|
class CCAcceleration;
|
2012-09-11 14:02:33 +08:00
|
|
|
|
2012-08-31 21:23:23 +08:00
|
|
|
enum ccScriptType {
|
|
|
|
kScriptTypeNone = 0,
|
|
|
|
kScriptTypeLua,
|
|
|
|
kScriptTypeJavascript
|
|
|
|
};
|
|
|
|
|
2012-08-28 12:08:15 +08:00
|
|
|
class CCScriptHandlerEntry : public CCObject
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
static CCScriptHandlerEntry* create(int nHandler);
|
|
|
|
~CCScriptHandlerEntry(void);
|
|
|
|
|
|
|
|
int getHandler(void) {
|
2013-06-15 14:03:30 +08:00
|
|
|
return _handler;
|
2012-08-28 12:08:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
int getEntryId(void) {
|
2013-06-15 14:03:30 +08:00
|
|
|
return _entryId;
|
2012-08-28 12:08:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
CCScriptHandlerEntry(int nHandler)
|
2013-06-15 14:03:30 +08:00
|
|
|
: _handler(nHandler)
|
2012-08-28 12:08:15 +08:00
|
|
|
{
|
|
|
|
static int newEntryId = 0;
|
|
|
|
newEntryId++;
|
2013-06-15 14:03:30 +08:00
|
|
|
_entryId = newEntryId;
|
2012-08-28 12:08:15 +08:00
|
|
|
}
|
|
|
|
|
2013-06-15 14:03:30 +08:00
|
|
|
int _handler;
|
|
|
|
int _entryId;
|
2012-08-28 12:08:15 +08:00
|
|
|
};
|
2012-02-09 14:07:11 +08:00
|
|
|
|
2012-06-20 18:09:11 +08:00
|
|
|
/**
|
|
|
|
* @addtogroup script_support
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
2012-08-28 12:08:15 +08:00
|
|
|
class CCSchedulerScriptHandlerEntry : public CCScriptHandlerEntry
|
2012-02-09 14:07:11 +08:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
// nHandler return by tolua_ref_function(), called from LuaCocos2d.cpp
|
2012-08-28 12:08:15 +08:00
|
|
|
static CCSchedulerScriptHandlerEntry* create(int nHandler, float fInterval, bool bPaused);
|
2012-02-09 14:07:11 +08:00
|
|
|
~CCSchedulerScriptHandlerEntry(void);
|
|
|
|
|
2012-08-28 12:08:15 +08:00
|
|
|
cocos2d::CCTimer* getTimer(void) {
|
2013-06-15 14:03:30 +08:00
|
|
|
return _timer;
|
2012-02-09 14:07:11 +08:00
|
|
|
}
|
|
|
|
|
2012-08-28 12:08:15 +08:00
|
|
|
bool isPaused(void) {
|
2013-06-15 14:03:30 +08:00
|
|
|
return _paused;
|
2012-02-09 14:07:11 +08:00
|
|
|
}
|
|
|
|
|
2012-08-28 12:08:15 +08:00
|
|
|
void markedForDeletion(void) {
|
2013-06-15 14:03:30 +08:00
|
|
|
_markedForDeletion = true;
|
2012-02-09 14:07:11 +08:00
|
|
|
}
|
|
|
|
|
2012-08-28 12:08:15 +08:00
|
|
|
bool isMarkedForDeletion(void) {
|
2013-06-15 14:03:30 +08:00
|
|
|
return _markedForDeletion;
|
2012-02-09 14:07:11 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
2012-08-28 12:08:15 +08:00
|
|
|
CCSchedulerScriptHandlerEntry(int nHandler)
|
|
|
|
: CCScriptHandlerEntry(nHandler)
|
2013-06-15 14:03:30 +08:00
|
|
|
, _timer(NULL)
|
|
|
|
, _paused(false)
|
|
|
|
, _markedForDeletion(false)
|
2012-08-28 12:08:15 +08:00
|
|
|
{
|
|
|
|
}
|
|
|
|
bool init(float fInterval, bool bPaused);
|
2012-02-09 14:07:11 +08:00
|
|
|
|
2013-06-15 14:03:30 +08:00
|
|
|
cocos2d::CCTimer* _timer;
|
|
|
|
bool _paused;
|
|
|
|
bool _markedForDeletion;
|
2012-02-09 14:07:11 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2012-08-28 12:08:15 +08:00
|
|
|
|
|
|
|
class CCTouchScriptHandlerEntry : public CCScriptHandlerEntry
|
2012-02-09 14:07:11 +08:00
|
|
|
{
|
|
|
|
public:
|
2012-08-28 12:08:15 +08:00
|
|
|
static CCTouchScriptHandlerEntry* create(int nHandler, bool bIsMultiTouches, int nPriority, bool bSwallowsTouches);
|
2012-02-09 14:07:11 +08:00
|
|
|
~CCTouchScriptHandlerEntry(void);
|
|
|
|
|
2012-08-28 12:08:15 +08:00
|
|
|
bool isMultiTouches(void) {
|
2013-06-15 14:03:30 +08:00
|
|
|
return _isMultiTouches;
|
2012-02-09 14:07:11 +08:00
|
|
|
}
|
|
|
|
|
2012-08-28 12:08:15 +08:00
|
|
|
int getPriority(void) {
|
2013-06-15 14:03:30 +08:00
|
|
|
return _priority;
|
2012-02-09 14:07:11 +08:00
|
|
|
}
|
|
|
|
|
2012-08-28 12:08:15 +08:00
|
|
|
bool getSwallowsTouches(void) {
|
2013-06-15 14:03:30 +08:00
|
|
|
return _swallowsTouches;
|
2012-02-09 14:07:11 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
2012-08-28 12:08:15 +08:00
|
|
|
CCTouchScriptHandlerEntry(int nHandler)
|
|
|
|
: CCScriptHandlerEntry(nHandler)
|
2013-06-15 14:03:30 +08:00
|
|
|
, _isMultiTouches(false)
|
|
|
|
, _priority(0)
|
|
|
|
, _swallowsTouches(false)
|
2012-08-28 12:08:15 +08:00
|
|
|
{
|
|
|
|
}
|
|
|
|
bool init(bool bIsMultiTouches, int nPriority, bool bSwallowsTouches);
|
2012-02-09 14:07:11 +08:00
|
|
|
|
2013-06-15 14:03:30 +08:00
|
|
|
bool _isMultiTouches;
|
|
|
|
int _priority;
|
|
|
|
bool _swallowsTouches;
|
2012-02-09 14:07:11 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2012-08-29 14:55:55 +08:00
|
|
|
// 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.
|
2012-09-02 00:38:57 +08:00
|
|
|
class CC_DLL CCScriptEngineProtocol
|
2012-02-09 14:07:11 +08:00
|
|
|
{
|
|
|
|
public:
|
2012-08-29 14:55:55 +08:00
|
|
|
virtual ~CCScriptEngineProtocol() {};
|
2012-09-02 00:38:57 +08:00
|
|
|
|
2012-09-11 14:02:33 +08:00
|
|
|
/** Get script type */
|
2012-08-31 21:23:23 +08:00
|
|
|
virtual ccScriptType getScriptType() { return kScriptTypeNone; };
|
2012-09-10 18:38:18 +08:00
|
|
|
|
2012-09-11 14:02:33 +08:00
|
|
|
/** Remove script object. */
|
|
|
|
virtual void removeScriptObjectByCCObject(CCObject* pObj) = 0;
|
2012-02-09 14:07:11 +08:00
|
|
|
|
2012-09-11 14:02:33 +08:00
|
|
|
/** Remove script function handler, only CCLuaEngine class need to implement this function. */
|
|
|
|
virtual void removeScriptHandler(int nHandler) {};
|
2012-02-09 14:07:11 +08:00
|
|
|
|
2013-06-05 15:17:00 +08:00
|
|
|
/** Reallocate script function handler, only CCLuaEngine class need to implement this function. */
|
2013-06-05 15:51:29 +08:00
|
|
|
virtual int reallocateScriptHandler(int nHandler) { return -1;}
|
2013-06-05 15:17:00 +08:00
|
|
|
|
2012-02-09 14:07:11 +08:00
|
|
|
/**
|
|
|
|
@brief Execute script code contained in the given string.
|
|
|
|
@param codes holding the valid script code that should be executed.
|
2012-09-17 15:02:24 +08:00
|
|
|
@return 0 if the string is executed correctly.
|
|
|
|
@return other if the string is executed wrongly.
|
2012-02-09 14:07:11 +08:00
|
|
|
*/
|
|
|
|
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;
|
|
|
|
|
|
|
|
/**
|
2012-09-11 14:02:33 +08:00
|
|
|
@brief Execute a node event function
|
|
|
|
@param pNode which node produce this event
|
|
|
|
@param nAction kCCNodeOnEnter,kCCNodeOnExit,kCCMenuItemActivated,kCCNodeOnEnterTransitionDidFinish,kCCNodeOnExitTransitionDidStart
|
2012-02-09 14:07:11 +08:00
|
|
|
@return The integer value returned from the script function.
|
|
|
|
*/
|
2012-09-11 14:02:33 +08:00
|
|
|
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;
|
2012-08-27 14:05:38 +08:00
|
|
|
|
2012-09-11 14:02:33 +08:00
|
|
|
/** execute a callfun event */
|
|
|
|
virtual int executeCallFuncActionEvent(CCCallFunc* pAction, CCObject* pTarget = NULL) = 0;
|
|
|
|
/** execute a schedule function */
|
2012-12-10 13:48:27 +08:00
|
|
|
virtual int executeSchedule(int nHandler, float dt, CCNode* pNode = NULL) = 0;
|
2012-02-09 14:07:11 +08:00
|
|
|
|
2012-11-06 14:18:13 +08:00
|
|
|
/** functions for executing touch event */
|
2012-09-11 14:02:33 +08:00
|
|
|
virtual int executeLayerTouchesEvent(CCLayer* pLayer, int eventType, CCSet *pTouches) = 0;
|
|
|
|
virtual int executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch) = 0;
|
2012-11-06 14:18:13 +08:00
|
|
|
|
2012-12-02 15:17:34 +08:00
|
|
|
/** functions for keypad event */
|
|
|
|
virtual int executeLayerKeypadEvent(CCLayer* pLayer, int eventType) = 0;
|
|
|
|
|
2012-11-06 14:18:13 +08:00
|
|
|
/** execute a accelerometer event */
|
|
|
|
virtual int executeAccelerometerEvent(CCLayer* pLayer, CCAcceleration* pAccelerationValue) = 0;
|
2013-02-02 02:05:52 +08:00
|
|
|
|
|
|
|
/** function for common event */
|
|
|
|
virtual int executeEvent(int nHandler, const char* pEventName, CCObject* pEventSource = NULL, const char* pEventSourceClassName = NULL) = 0;
|
2013-04-15 22:50:07 +08:00
|
|
|
|
|
|
|
/** 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;
|
2012-02-09 14:07:11 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
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:
|
2012-04-19 14:35:52 +08:00
|
|
|
~CCScriptEngineManager(void);
|
2012-02-09 14:07:11 +08:00
|
|
|
|
2012-04-19 14:35:52 +08:00
|
|
|
CCScriptEngineProtocol* getScriptEngine(void) {
|
2013-06-15 14:03:30 +08:00
|
|
|
return _scriptEngine;
|
2012-02-09 14:07:11 +08:00
|
|
|
}
|
2012-04-19 14:35:52 +08:00
|
|
|
void setScriptEngine(CCScriptEngineProtocol *pScriptEngine);
|
2012-02-09 14:07:11 +08:00
|
|
|
void removeScriptEngine(void);
|
2012-09-02 00:38:57 +08:00
|
|
|
|
2012-02-09 17:48:15 +08:00
|
|
|
static CCScriptEngineManager* sharedManager(void);
|
2012-02-09 14:07:11 +08:00
|
|
|
static void purgeSharedManager(void);
|
2012-09-02 00:38:57 +08:00
|
|
|
|
2012-02-09 14:07:11 +08:00
|
|
|
private:
|
|
|
|
CCScriptEngineManager(void)
|
2013-06-15 14:03:30 +08:00
|
|
|
: _scriptEngine(NULL)
|
2012-02-09 14:07:11 +08:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2013-06-15 14:03:30 +08:00
|
|
|
CCScriptEngineProtocol *_scriptEngine;
|
2012-02-09 14:07:11 +08:00
|
|
|
};
|
|
|
|
|
2012-06-20 18:09:11 +08:00
|
|
|
// end of script_support group
|
|
|
|
/// @}
|
|
|
|
|
2012-02-09 14:07:11 +08:00
|
|
|
NS_CC_END
|
|
|
|
|
|
|
|
#endif // __SCRIPT_SUPPORT_H__
|