mirror of https://github.com/axmolengine/axmol.git
Merge pull request #1554 from dumganhar/gles20
issue #1549: Fix some issues. [1]Added "executeAccelerometerEvent" for CCScriptEngineProtocol class. Exported Accelerometer event to JS. [2]Updated cocos2dx.ini. Renamed some functions. [3]Added "ccdictionary_to_jsval" function, now TMXOrthoObjectsTest and TMXIsoObjectsTest don't crash.
This commit is contained in:
commit
2193940b27
|
@ -249,14 +249,13 @@ void CCLayer::setAccelerometerInterval(double interval) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CCLayer::didAccelerate(CCAcceleration* pAccelerationValue) {
|
void CCLayer::didAccelerate(CCAcceleration* pAccelerationValue)
|
||||||
|
{
|
||||||
CC_UNUSED_PARAM(pAccelerationValue);
|
CC_UNUSED_PARAM(pAccelerationValue);
|
||||||
//
|
if ( m_eScriptType != kScriptTypeNone)
|
||||||
// if ( m_eScriptType != kScriptTypeNone)
|
{
|
||||||
// {
|
CCScriptEngineManager::sharedManager()->getScriptEngine()->executeAccelerometerEvent(this, pAccelerationValue);
|
||||||
// CCScriptEngineManager::sharedManager()->getScriptEngine()->executeAccelerometerEvent(this, pAccelerationValue);
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -31,14 +31,15 @@ NS_CC_BEGIN
|
||||||
/**
|
/**
|
||||||
@brief The device accelerometer reports values for each axis in units of g-force
|
@brief The device accelerometer reports values for each axis in units of g-force
|
||||||
*/
|
*/
|
||||||
typedef struct
|
class CCAcceleration
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
double x;
|
double x;
|
||||||
double y;
|
double y;
|
||||||
double z;
|
double z;
|
||||||
|
|
||||||
double timestamp;
|
double timestamp;
|
||||||
} CCAcceleration;
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@brief
|
@brief
|
||||||
|
|
|
@ -41,6 +41,7 @@ class CCLayer;
|
||||||
class CCMenuItem;
|
class CCMenuItem;
|
||||||
class CCNotificationCenter;
|
class CCNotificationCenter;
|
||||||
class CCCallFunc;
|
class CCCallFunc;
|
||||||
|
class CCAcceleration;
|
||||||
|
|
||||||
enum ccScriptType {
|
enum ccScriptType {
|
||||||
kScriptTypeNone = 0,
|
kScriptTypeNone = 0,
|
||||||
|
@ -220,9 +221,12 @@ public:
|
||||||
/** execute a schedule function */
|
/** execute a schedule function */
|
||||||
virtual int executeSchedule(CCTimer* pTimer, float dt, CCNode* pNode = NULL) = 0;
|
virtual int executeSchedule(CCTimer* pTimer, float dt, CCNode* pNode = NULL) = 0;
|
||||||
|
|
||||||
/** functions for execute touch event */
|
/** functions for executing touch event */
|
||||||
virtual int executeLayerTouchesEvent(CCLayer* pLayer, int eventType, CCSet *pTouches) = 0;
|
virtual int executeLayerTouchesEvent(CCLayer* pLayer, int eventType, CCSet *pTouches) = 0;
|
||||||
virtual int executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch) = 0;
|
virtual int executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch) = 0;
|
||||||
|
|
||||||
|
/** execute a accelerometer event */
|
||||||
|
virtual int executeAccelerometerEvent(CCLayer* pLayer, CCAcceleration* pAccelerationValue) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -754,6 +754,44 @@ int ScriptingCore::executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouc
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ScriptingCore::executeAccelerometerEvent(CCLayer* pLayer, CCAcceleration* pAccelerationValue)
|
||||||
|
{
|
||||||
|
js_proxy_t * p;
|
||||||
|
JS_GET_PROXY(p, pLayer);
|
||||||
|
|
||||||
|
if (!p) return 0;
|
||||||
|
|
||||||
|
jsval retval;
|
||||||
|
|
||||||
|
JSBool found;
|
||||||
|
JS_HasProperty(this->cx_, p->obj, "onAccelerometer", &found);
|
||||||
|
if (found == JS_TRUE) {
|
||||||
|
jsval rval, fval;
|
||||||
|
|
||||||
|
double time = pAccelerationValue->timestamp;
|
||||||
|
double x = pAccelerationValue->x;
|
||||||
|
double y = pAccelerationValue->y;
|
||||||
|
double z = pAccelerationValue->z;
|
||||||
|
|
||||||
|
// Create an JS object with x,y,z,timestamp as properties
|
||||||
|
JSObject *object = JS_NewObject(this->cx_, NULL, NULL, NULL );
|
||||||
|
if( !object)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!JS_DefineProperty(this->cx_, object, "x", DOUBLE_TO_JSVAL(x), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) ||
|
||||||
|
!JS_DefineProperty(this->cx_, object, "y", DOUBLE_TO_JSVAL(y), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) ||
|
||||||
|
!JS_DefineProperty(this->cx_, object, "z", DOUBLE_TO_JSVAL(z), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) ||
|
||||||
|
!JS_DefineProperty(this->cx_, object, "timestamp", DOUBLE_TO_JSVAL(time), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
jsval argv = OBJECT_TO_JSVAL(object);
|
||||||
|
|
||||||
|
JS_GetProperty(this->cx_, p->obj, "onAccelerometer", &fval);
|
||||||
|
JS_CallFunctionValue(this->cx_, p->obj, fval, 1, &argv, &rval);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int ScriptingCore::executeFunctionWithObjectData(CCNode *self, const char *name, JSObject *obj) {
|
int ScriptingCore::executeFunctionWithObjectData(CCNode *self, const char *name, JSObject *obj) {
|
||||||
|
|
||||||
js_proxy_t * p;
|
js_proxy_t * p;
|
||||||
|
@ -1024,8 +1062,16 @@ jsval ccarray_to_jsval(JSContext* cx, CCArray *arr) {
|
||||||
CCObject *obj = arr->objectAtIndex(i);
|
CCObject *obj = arr->objectAtIndex(i);
|
||||||
|
|
||||||
CCString *testString = dynamic_cast<cocos2d::CCString *>(obj);
|
CCString *testString = dynamic_cast<cocos2d::CCString *>(obj);
|
||||||
|
CCDictionary* testDict = NULL;
|
||||||
|
CCArray* testArray = NULL;
|
||||||
|
// XXX: Only supports string, since all data read from plist files will be stored as string in cocos2d-x
|
||||||
|
// Do we need to convert string to js base type ?
|
||||||
if(testString) {
|
if(testString) {
|
||||||
arrElement = c_string_to_jsval(cx, testString->getCString());
|
arrElement = c_string_to_jsval(cx, testString->getCString());
|
||||||
|
} else if (testDict = dynamic_cast<cocos2d::CCDictionary*>(obj)) {
|
||||||
|
arrElement = ccdictionary_to_jsval(cx, testDict);
|
||||||
|
} else if (testArray = dynamic_cast<cocos2d::CCArray*>(obj)) {
|
||||||
|
arrElement = ccarray_to_jsval(cx, testArray);
|
||||||
} else {
|
} else {
|
||||||
js_proxy_t *proxy = js_get_or_create_proxy<cocos2d::CCObject>(cx, obj);
|
js_proxy_t *proxy = js_get_or_create_proxy<cocos2d::CCObject>(cx, obj);
|
||||||
arrElement = OBJECT_TO_JSVAL(proxy->obj);
|
arrElement = OBJECT_TO_JSVAL(proxy->obj);
|
||||||
|
@ -1038,6 +1084,40 @@ jsval ccarray_to_jsval(JSContext* cx, CCArray *arr) {
|
||||||
return OBJECT_TO_JSVAL(jsretArr);
|
return OBJECT_TO_JSVAL(jsretArr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
jsval ccdictionary_to_jsval(JSContext* cx, CCDictionary* dict)
|
||||||
|
{
|
||||||
|
JSObject* jsRet = JS_NewObject(cx, NULL, NULL, NULL);
|
||||||
|
CCDictElement* pElement = NULL;
|
||||||
|
CCDICT_FOREACH(dict, pElement)
|
||||||
|
{
|
||||||
|
jsval dictElement;
|
||||||
|
CCString* obj = dynamic_cast<CCString*>(pElement->getObject());
|
||||||
|
|
||||||
|
CCString *testString = dynamic_cast<cocos2d::CCString *>(obj);
|
||||||
|
CCDictionary* testDict = NULL;
|
||||||
|
CCArray* testArray = NULL;
|
||||||
|
// XXX: Only supports string, since all data read from plist files will be stored as string in cocos2d-x
|
||||||
|
// Do we need to convert string to js base type ?
|
||||||
|
if(testString) {
|
||||||
|
dictElement = c_string_to_jsval(cx, testString->getCString());
|
||||||
|
} else if (testDict = dynamic_cast<cocos2d::CCDictionary*>(obj)) {
|
||||||
|
dictElement = ccdictionary_to_jsval(cx, testDict);
|
||||||
|
} else if (testArray = dynamic_cast<cocos2d::CCArray*>(obj)) {
|
||||||
|
dictElement = ccarray_to_jsval(cx, testArray);
|
||||||
|
} else {
|
||||||
|
js_proxy_t *proxy = js_get_or_create_proxy<cocos2d::CCObject>(cx, obj);
|
||||||
|
dictElement = OBJECT_TO_JSVAL(proxy->obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* key = pElement->getStrKey();
|
||||||
|
if (key && strlen(key) > 0)
|
||||||
|
{
|
||||||
|
JS_SetProperty(cx, jsRet, key, &dictElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return OBJECT_TO_JSVAL(jsRet);
|
||||||
|
}
|
||||||
|
|
||||||
jsval long_long_to_jsval(JSContext* cx, long long v) {
|
jsval long_long_to_jsval(JSContext* cx, long long v) {
|
||||||
JSObject *tmp = JS_NewUint32Array(cx, 2);
|
JSObject *tmp = JS_NewUint32Array(cx, 2);
|
||||||
uint32_t *data = (uint32_t *)JS_GetArrayBufferViewData(tmp, cx);
|
uint32_t *data = (uint32_t *)JS_GetArrayBufferViewData(tmp, cx);
|
||||||
|
|
|
@ -82,6 +82,7 @@ public:
|
||||||
virtual int executeSchedule(CCTimer* pTimer, float dt, CCNode* pNode = NULL);
|
virtual int executeSchedule(CCTimer* pTimer, float dt, CCNode* pNode = NULL);
|
||||||
virtual int executeLayerTouchesEvent(CCLayer* pLayer, int eventType, CCSet *pTouches);
|
virtual int executeLayerTouchesEvent(CCLayer* pLayer, int eventType, CCSet *pTouches);
|
||||||
virtual int executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch);
|
virtual int executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch);
|
||||||
|
virtual int executeAccelerometerEvent(CCLayer* pLayer, CCAcceleration* pAccelerationValue);
|
||||||
|
|
||||||
int executeFunctionWithObjectData(CCNode *self, const char *name, JSObject *obj);
|
int executeFunctionWithObjectData(CCNode *self, const char *name, JSObject *obj);
|
||||||
int executeFunctionWithOwner(jsval owner, const char *name, jsval data);
|
int executeFunctionWithOwner(jsval owner, const char *name, jsval data);
|
||||||
|
@ -188,6 +189,7 @@ ccColor3B jsval_to_cccolor3b(JSContext *cx, jsval v);
|
||||||
JSBool jsval_to_ccarray_of_CCPoint(JSContext* cx, jsval v, CCPoint **points, int *numPoints);
|
JSBool jsval_to_ccarray_of_CCPoint(JSContext* cx, jsval v, CCPoint **points, int *numPoints);
|
||||||
CCArray* jsval_to_ccarray(JSContext* cx, jsval v);
|
CCArray* jsval_to_ccarray(JSContext* cx, jsval v);
|
||||||
jsval ccarray_to_jsval(JSContext* cx, CCArray *arr);
|
jsval ccarray_to_jsval(JSContext* cx, CCArray *arr);
|
||||||
|
jsval ccdictionary_to_jsval(JSContext* cx, CCDictionary* dict);
|
||||||
// from native
|
// from native
|
||||||
jsval long_long_to_jsval(JSContext* cx, long long v);
|
jsval long_long_to_jsval(JSContext* cx, long long v);
|
||||||
jsval std_string_to_jsval(JSContext* cx, std::string& v);
|
jsval std_string_to_jsval(JSContext* cx, std::string& v);
|
||||||
|
|
|
@ -195,7 +195,8 @@ public:
|
||||||
virtual int executeSchedule(CCTimer* pTimer, float dt, CCNode* pNode = NULL);
|
virtual int executeSchedule(CCTimer* pTimer, float dt, CCNode* pNode = NULL);
|
||||||
virtual int executeLayerTouchesEvent(CCLayer* pLayer, int eventType, CCSet *pTouches);
|
virtual int executeLayerTouchesEvent(CCLayer* pLayer, int eventType, CCSet *pTouches);
|
||||||
virtual int executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch);
|
virtual int executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch);
|
||||||
|
/** execute a accelerometer event */
|
||||||
|
virtual int executeAccelerometerEvent(CCLayer* pLayer, CCAcceleration* pAccelerationValue){};
|
||||||
/**
|
/**
|
||||||
@brief Method used to get a pointer to the lua_State that the script module is attached to.
|
@brief Method used to get a pointer to the lua_State that the script module is attached to.
|
||||||
@return A pointer to the lua_State that the script module is attached to.
|
@return A pointer to the lua_State that the script module is attached to.
|
||||||
|
|
|
@ -36,14 +36,14 @@ classes = CCSprite.* CCScene CCNode CCDirector CCLayer.* CCMenu.* CCTouch CC.*Ac
|
||||||
# functions from all classes.
|
# functions from all classes.
|
||||||
|
|
||||||
skip = CCNode::[.*Transform convertToWindowSpace getChildren setPosition getGrid setGLServerState description getShaderProgram getUserObject .*UserData getGLServerState],
|
skip = CCNode::[.*Transform convertToWindowSpace getChildren setPosition getGrid setGLServerState description getShaderProgram getUserObject .*UserData getGLServerState],
|
||||||
CCSprite::[getQuad displayFrame getTexture getBlendFunc setPosition setBlendFunc getTextureAtlas setSpriteBatchNode getSpriteBatchNode],
|
CCSprite::[getQuad displayFrame getBlendFunc setPosition setBlendFunc setSpriteBatchNode getSpriteBatchNode],
|
||||||
CCSpriteBatchNode::[getBlendFunc setBlendFunc],
|
CCSpriteBatchNode::[getBlendFunc setBlendFunc],
|
||||||
CCMotionStreak::[getBlendFunc setBlendFunc],
|
CCMotionStreak::[getBlendFunc setBlendFunc],
|
||||||
CCAtlasNode::[getBlendFunc setBlendFunc],
|
CCAtlasNode::[getBlendFunc setBlendFunc],
|
||||||
CCParticleBatchNode::[getBlendFunc setBlendFunc],
|
CCParticleBatchNode::[getBlendFunc setBlendFunc],
|
||||||
CCLayerColor::[getBlendFunc setBlendFunc],
|
CCLayerColor::[getBlendFunc setBlendFunc],
|
||||||
CCParticleSystem::[getBlendFunc setBlendFunc],
|
CCParticleSystem::[getBlendFunc setBlendFunc],
|
||||||
CCDirector::[getAccelerometer getKeypadDispatcher getTouchDispatcher setWatcherCallbackFun getOpenGLView getScheduler getProjection],
|
CCDirector::[getAccelerometer getKeypadDispatcher getTouchDispatcher setWatcherCallbackFun getOpenGLView getProjection],
|
||||||
CCLayer.*::[didAccelerate (g|s)etBlendFunc],
|
CCLayer.*::[didAccelerate (g|s)etBlendFunc],
|
||||||
CCMenu.*::[.*Target getSubItems create initWithItems alignItemsInRows alignItemsInColumns],
|
CCMenu.*::[.*Target getSubItems create initWithItems alignItemsInRows alignItemsInColumns],
|
||||||
CCMenuItem.*::[create],
|
CCMenuItem.*::[create],
|
||||||
|
@ -52,7 +52,7 @@ skip = CCNode::[.*Transform convertToWindowSpace getChildren setPosition getGrid
|
||||||
CC.*Protocol::[*],
|
CC.*Protocol::[*],
|
||||||
CC.*Delegate::[*],
|
CC.*Delegate::[*],
|
||||||
CCPoolManager::[*],
|
CCPoolManager::[*],
|
||||||
CCTexture2D::[initWithPVRTCData releaseData setTexParameters initWithData keepData],
|
CCTexture2D::[initWithPVRTCData addPVRTCImage releaseData setTexParameters initWithData keepData],
|
||||||
CCSet::[begin end],
|
CCSet::[begin end],
|
||||||
CCIMEDispatcher::[*],
|
CCIMEDispatcher::[*],
|
||||||
CCSAXParser::[*],
|
CCSAXParser::[*],
|
||||||
|
@ -87,7 +87,6 @@ skip = CCNode::[.*Transform convertToWindowSpace getChildren setPosition getGrid
|
||||||
CCTiledGrid3DAction::[create actionWith.*],
|
CCTiledGrid3DAction::[create actionWith.*],
|
||||||
CCTMXMapInfo::[startElement endElement textHandler],
|
CCTMXMapInfo::[startElement endElement textHandler],
|
||||||
CCParticleSystemQuad::[postStep setBatchNode draw setTexture$ setTotalParticles updateQuadWithParticle setupIndices listenBackToForeground initWithTotalParticles particleWithFile node],
|
CCParticleSystemQuad::[postStep setBatchNode draw setTexture$ setTotalParticles updateQuadWithParticle setupIndices listenBackToForeground initWithTotalParticles particleWithFile node],
|
||||||
CCTexture2D::[initWithPVRTCData addPVRTCImage],
|
|
||||||
CCLayerMultiplex::[*],
|
CCLayerMultiplex::[*],
|
||||||
CCCatmullRom.*::[create actionWithDuration],
|
CCCatmullRom.*::[create actionWithDuration],
|
||||||
CCBezier.*::[create actionWithDuration],
|
CCBezier.*::[create actionWithDuration],
|
||||||
|
@ -108,11 +107,14 @@ rename_functions = CCDirector::[sharedDirector=getInstance],
|
||||||
CCAnimationCache::[sharedAnimationCache=getInstance addAnimationsWithFile=addAnimations animationByName=getAnimation removeAnimationByName=removeAnimation],
|
CCAnimationCache::[sharedAnimationCache=getInstance addAnimationsWithFile=addAnimations animationByName=getAnimation removeAnimationByName=removeAnimation],
|
||||||
CCLayerGradient::[initWithColor=init],
|
CCLayerGradient::[initWithColor=init],
|
||||||
CCLayerColor::[initWithColor=init],
|
CCLayerColor::[initWithColor=init],
|
||||||
CCNode::[boundingBox=getBoundingBox removeFromParentAndCleanup=removeFromParent],
|
CCNode::[boundingBox=getBoundingBox removeFromParentAndCleanup=removeFromParent removeAllChildrenWithCleanup=removeAllChildren unscheduleAllSelectors=unscheduleAllCallbacks],
|
||||||
CCLabelAtlas::[create=_create],
|
CCLabelAtlas::[create=_create],
|
||||||
CCTMXLayer::[tileAt=getTileAt tileGIDAt=getTileGIDAt propertyNamed=getProperty],
|
CCTMXLayer::[tileAt=getTileAt tileGIDAt=getTileGIDAt propertyNamed=getProperty],
|
||||||
CCTileMapAtlas::[tileAt=getTileAt],
|
CCTileMapAtlas::[tileAt=getTileAt],
|
||||||
CCTMXTiledMap::[layerNamed=getLayer objectGroupNamed=getObjectGroup],
|
CCTMXTiledMap::[layerNamed=getLayer objectGroupNamed=getObjectGroup],
|
||||||
|
CCSprite::[isFlipX=isFlippedX isFlipY=isFlippedY],
|
||||||
|
CCTouch::[getID=getId],
|
||||||
|
CCScheduler::[unscheduleAllSelectorsForTarget=unscheduleAllCallbacksForTarget unscheduleAllSelectors=unscheduleAllCallbacks],
|
||||||
SimpleAudioEngine::[sharedEngine=getInstance preloadBackgroundMusic=preloadMusic setBackgroundMusicVolume=setMusicVolume getBackgroundMusicVolume=getMusicVolume playBackgroundMusic=playMusic stopBackgroundMusic=stopMusic pauseBackgroundMusic=pauseMusic resumeBackgroundMusic=resumeMusic rewindBackgroundMusic=rewindMusic isBackgroundMusicPlaying=isMusicPlaying willPlayBackgroundMusic=willPlayMusic],
|
SimpleAudioEngine::[sharedEngine=getInstance preloadBackgroundMusic=preloadMusic setBackgroundMusicVolume=setMusicVolume getBackgroundMusicVolume=getMusicVolume playBackgroundMusic=playMusic stopBackgroundMusic=stopMusic pauseBackgroundMusic=pauseMusic resumeBackgroundMusic=resumeMusic rewindBackgroundMusic=rewindMusic isBackgroundMusicPlaying=isMusicPlaying willPlayBackgroundMusic=willPlayMusic],
|
||||||
CCCamera.*::[setUpXYZ=setUp getUpXYZ=getUp setEyeXYZ=setEye getEyeXYZ=getEye setCenterXYZ=setCenter getCenterXYZ=getCenter],
|
CCCamera.*::[setUpXYZ=setUp getUpXYZ=getUp setEyeXYZ=setEye getEyeXYZ=getEye setCenterXYZ=setCenter getCenterXYZ=getCenter],
|
||||||
CCBReader::[getAnimationManager=getActionManager setAnimationManager=setActionManager]
|
CCBReader::[getAnimationManager=getActionManager setAnimationManager=setActionManager]
|
||||||
|
|
Loading…
Reference in New Issue