Fixed #5563: Make sendNodeEventToXXX as static functions of ScriptEngineManager in CCScriptSupport

This commit is contained in:
pandamicro 2014-06-18 11:51:52 +08:00
parent d00c9fe70a
commit 94fdff1da9
14 changed files with 80 additions and 67 deletions

View File

@ -145,7 +145,7 @@ void ClippingNode::onEnter()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJSExtended(this, kNodeOnEnter)) if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
return; return;
} }
#endif #endif

View File

@ -1055,7 +1055,7 @@ void Node::onEnter()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJS(this, kNodeOnEnter)) if (ScriptEngineManager::sendNodeEventToJS(this, kNodeOnEnter))
return; return;
} }
#endif #endif
@ -1072,7 +1072,7 @@ void Node::onEnter()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeLua) if (_scriptType == kScriptTypeLua)
{ {
sendNodeEventToLua(this, kNodeOnEnter); ScriptEngineManager::sendNodeEventToLua(this, kNodeOnEnter);
} }
#endif #endif
} }
@ -1082,7 +1082,7 @@ void Node::onEnterTransitionDidFinish()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJS(this, kNodeOnEnterTransitionDidFinish)) if (ScriptEngineManager::sendNodeEventToJS(this, kNodeOnEnterTransitionDidFinish))
return; return;
} }
#endif #endif
@ -1094,7 +1094,7 @@ void Node::onEnterTransitionDidFinish()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeLua) if (_scriptType == kScriptTypeLua)
{ {
sendNodeEventToLua(this, kNodeOnEnterTransitionDidFinish); ScriptEngineManager::sendNodeEventToLua(this, kNodeOnEnterTransitionDidFinish);
} }
#endif #endif
} }
@ -1104,7 +1104,7 @@ void Node::onExitTransitionDidStart()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJS(this, kNodeOnExitTransitionDidStart)) if (ScriptEngineManager::sendNodeEventToJS(this, kNodeOnExitTransitionDidStart))
return; return;
} }
#endif #endif
@ -1115,7 +1115,7 @@ void Node::onExitTransitionDidStart()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeLua) if (_scriptType == kScriptTypeLua)
{ {
sendNodeEventToLua(this, kNodeOnExitTransitionDidStart); ScriptEngineManager::sendNodeEventToLua(this, kNodeOnExitTransitionDidStart);
} }
#endif #endif
} }
@ -1125,7 +1125,7 @@ void Node::onExit()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJS(this, kNodeOnExit)) if (ScriptEngineManager::sendNodeEventToJS(this, kNodeOnExit))
return; return;
} }
#endif #endif
@ -1140,7 +1140,7 @@ void Node::onExit()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeLua) if (_scriptType == kScriptTypeLua)
{ {
sendNodeEventToLua(this, kNodeOnExit); ScriptEngineManager::sendNodeEventToLua(this, kNodeOnExit);
} }
#endif #endif
} }

View File

@ -73,55 +73,6 @@ enum {
bool nodeComparisonLess(Node* n1, Node* n2); bool nodeComparisonLess(Node* n1, Node* n2);
#if CC_ENABLE_SCRIPT_BINDING
static bool sendNodeEventToJS(Node* node, int action)
{
auto scriptEngine = ScriptEngineManager::getInstance()->getScriptEngine();
if (scriptEngine->isCalledFromScript())
{
// Should only be invoked at root class Node
scriptEngine->setCalledFromScript(false);
}
else
{
BasicScriptData data(node,(void*)&action);
ScriptEvent scriptEvent(kNodeEvent,(void*)&data);
if (scriptEngine->sendEvent(&scriptEvent))
return true;
}
return false;
}
static bool sendNodeEventToJSExtended(Node* node, int action)
{
auto scriptEngine = ScriptEngineManager::getInstance()->getScriptEngine();
if (!scriptEngine->isCalledFromScript())
{
BasicScriptData data(node,(void*)&action);
ScriptEvent scriptEvent(kNodeEvent,(void*)&data);
if (scriptEngine->sendEvent(&scriptEvent))
return true;
}
return false;
}
static void sendNodeEventToLua(Node* node, int action)
{
auto scriptEngine = ScriptEngineManager::getInstance()->getScriptEngine();
BasicScriptData data(node,(void*)&action);
ScriptEvent scriptEvent(kNodeEvent,(void*)&data);
scriptEngine->sendEvent(&scriptEvent);
}
#endif
class EventListener; class EventListener;
/** @brief Node is the base element of the Scene Graph. Elements of the Scene Graph must be Node objects or subclasses of it. /** @brief Node is the base element of the Scene Graph. Elements of the Scene Graph must be Node objects or subclasses of it.

View File

@ -619,7 +619,7 @@ void ParticleSystem::onEnter()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJSExtended(this, kNodeOnEnter)) if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
return; return;
} }
#endif #endif

View File

@ -28,6 +28,7 @@
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
#include "base/CCScheduler.h" #include "base/CCScheduler.h"
#include "CCNode.h"
bool CC_DLL cc_assert_script_compatible(const char *msg) bool CC_DLL cc_assert_script_compatible(const char *msg)
{ {
@ -162,6 +163,51 @@ void ScriptEngineManager::destroyInstance()
} }
} }
bool ScriptEngineManager::sendNodeEventToJS(Node* node, int action)
{
auto scriptEngine = getInstance()->getScriptEngine();
if (scriptEngine->isCalledFromScript())
{
// Should only be invoked at root class Node
scriptEngine->setCalledFromScript(false);
}
else
{
BasicScriptData data(node,(void*)&action);
ScriptEvent scriptEvent(kNodeEvent,(void*)&data);
if (scriptEngine->sendEvent(&scriptEvent))
return true;
}
return false;
}
bool ScriptEngineManager::sendNodeEventToJSExtended(Node* node, int action)
{
auto scriptEngine = getInstance()->getScriptEngine();
if (!scriptEngine->isCalledFromScript())
{
BasicScriptData data(node,(void*)&action);
ScriptEvent scriptEvent(kNodeEvent,(void*)&data);
if (scriptEngine->sendEvent(&scriptEvent))
return true;
}
return false;
}
void ScriptEngineManager::sendNodeEventToLua(Node* node, int action)
{
auto scriptEngine = getInstance()->getScriptEngine();
BasicScriptData data(node,(void*)&action);
ScriptEvent scriptEvent(kNodeEvent,(void*)&data);
scriptEngine->sendEvent(&scriptEvent);
}
NS_CC_END NS_CC_END
#endif // #if CC_ENABLE_SCRIPT_BINDING #endif // #if CC_ENABLE_SCRIPT_BINDING

View File

@ -450,6 +450,7 @@ public:
virtual bool parseConfig(ConfigType type, const std::string& str) = 0; virtual bool parseConfig(ConfigType type, const std::string& str) = 0;
}; };
class Node;
/** /**
ScriptEngineManager is a singleton which holds an object instance of ScriptEngineProtocl ScriptEngineManager is a singleton which holds an object instance of ScriptEngineProtocl
It helps cocos2d-x and the user code to find back LuaEngine object It helps cocos2d-x and the user code to find back LuaEngine object
@ -490,6 +491,21 @@ public:
* @lua NA * @lua NA
*/ */
static void destroyInstance(); static void destroyInstance();
/**
* @js NA
* @lua NA
*/
static bool sendNodeEventToJS(Node* node, int action);
/**
* @js NA
* @lua NA
*/
static bool sendNodeEventToJSExtended(Node* node, int action);
/**
* @js NA
* @lua NA
*/
static void sendNodeEventToLua(Node* node, int action);
/** /**
* @js NA * @js NA
* @lua NA * @lua NA

View File

@ -437,7 +437,7 @@ void Armature::onEnter()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJSExtended(this, kNodeOnEnter)) if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
return; return;
} }
#endif #endif

View File

@ -279,7 +279,7 @@ void Skeleton::onEnter() {
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJSExtended(this, kNodeOnEnter)) if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
return; return;
} }
#endif #endif

View File

@ -340,7 +340,7 @@ void ProtectedNode::onEnter()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJSExtended(this, kNodeOnEnter)) if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
return; return;
} }
#endif #endif

View File

@ -105,7 +105,7 @@ void Layout::onEnter()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJSExtended(this, kNodeOnEnter)) if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
return; return;
} }
#endif #endif

View File

@ -71,7 +71,7 @@ void PageView::onEnter()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJSExtended(this, kNodeOnEnter)) if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
return; return;
} }
#endif #endif

View File

@ -98,7 +98,7 @@ void ScrollView::onEnter()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJSExtended(this, kNodeOnEnter)) if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
return; return;
} }
#endif #endif

View File

@ -418,7 +418,7 @@ void TextField::onEnter()
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJSExtended(this, kNodeOnEnter)) if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
return; return;
} }
#endif #endif

View File

@ -332,7 +332,7 @@ void EditBox::onEnter(void)
#if CC_ENABLE_SCRIPT_BINDING #if CC_ENABLE_SCRIPT_BINDING
if (_scriptType == kScriptTypeJavascript) if (_scriptType == kScriptTypeJavascript)
{ {
if (sendNodeEventToJSExtended(this, kNodeOnEnter)) if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
return; return;
} }
#endif #endif