diff --git a/cocos/2d/CCComponent.cpp b/cocos/2d/CCComponent.cpp index 2a252db2d0..6bb111830b 100644 --- a/cocos/2d/CCComponent.cpp +++ b/cocos/2d/CCComponent.cpp @@ -74,8 +74,7 @@ void Component::onEnter() #if CC_ENABLE_SCRIPT_BINDING if (_scriptType == kScriptTypeJavascript) { - if (sendComponentEventToJS(this, kComponentOnEnter)) - return; + sendComponentEventToJS(this, kComponentOnEnter); } #endif } @@ -85,8 +84,27 @@ void Component::onExit() #if CC_ENABLE_SCRIPT_BINDING if (_scriptType == kScriptTypeJavascript) { - if (sendComponentEventToJS(this, kComponentOnExit)) - return; + sendComponentEventToJS(this, kComponentOnExit); + } +#endif +} + +void Component::onAdd() +{ +#if CC_ENABLE_SCRIPT_BINDING + if (_scriptType == kScriptTypeJavascript) + { + sendComponentEventToJS(this, kComponentOnAdd); + } +#endif +} + +void Component::onRemove() +{ +#if CC_ENABLE_SCRIPT_BINDING + if (_scriptType == kScriptTypeJavascript) + { + sendComponentEventToJS(this, kComponentOnRemove); } #endif } @@ -96,8 +114,7 @@ void Component::update(float delta) #if CC_ENABLE_SCRIPT_BINDING if (_scriptType == kScriptTypeJavascript) { - if (sendComponentEventToJS(this, kComponentOnUpdate)) - return; + sendComponentEventToJS(this, kComponentOnUpdate); } #endif } diff --git a/cocos/2d/CCComponent.h b/cocos/2d/CCComponent.h index 90d6de8ca3..a6151f337a 100644 --- a/cocos/2d/CCComponent.h +++ b/cocos/2d/CCComponent.h @@ -38,6 +38,8 @@ class Node; enum { kComponentOnEnter, kComponentOnExit, + kComponentOnAdd, + kComponentOnRemove, kComponentOnUpdate }; @@ -58,6 +60,8 @@ public: virtual void onEnter(); virtual void onExit(); + virtual void onAdd(); + virtual void onRemove(); virtual void update(float delta); virtual bool serialize(void* r); virtual bool isEnabled() const; diff --git a/cocos/2d/CCComponentContainer.cpp b/cocos/2d/CCComponentContainer.cpp index 0de3cd8cdc..963e73369d 100644 --- a/cocos/2d/CCComponentContainer.cpp +++ b/cocos/2d/CCComponentContainer.cpp @@ -68,7 +68,7 @@ bool ComponentContainer::add(Component *com) CC_BREAK_IF(component); com->setOwner(_owner); _components->insert(com->getName(), com); - com->onEnter(); + com->onAdd(); ret = true; } while(0); return ret; @@ -85,7 +85,7 @@ bool ComponentContainer::remove(const std::string& name) CC_BREAK_IF(iter == _components->end()); auto com = iter->second; - com->onExit(); + com->onRemove(); com->setOwner(nullptr); _components->erase(iter); @@ -105,7 +105,7 @@ bool ComponentContainer::remove(Component *com) { if (iter->second == com) { - com->onExit(); + com->onRemove(); com->setOwner(nullptr); _components->erase(iter); break; @@ -122,7 +122,7 @@ void ComponentContainer::removeAll() { for (auto iter = _components->begin(); iter != _components->end(); ++iter) { - iter->second->onExit(); + iter->second->onRemove(); iter->second->setOwner(nullptr); } diff --git a/cocos/2d/CCNode.cpp b/cocos/2d/CCNode.cpp index 6fac752ec8..28970eb5ce 100644 --- a/cocos/2d/CCNode.cpp +++ b/cocos/2d/CCNode.cpp @@ -1419,6 +1419,11 @@ void Node::onEnter() if (_onEnterCallback) _onEnterCallback(); + if (_componentContainer && !_componentContainer->isEmpty()) + { + _componentContainer->onEnter(); + } + #if CC_ENABLE_SCRIPT_BINDING if (_scriptType == kScriptTypeJavascript) { @@ -1498,6 +1503,11 @@ void Node::onExit() if (_onExitCallback) _onExitCallback(); + if (_componentContainer && !_componentContainer->isEmpty()) + { + _componentContainer->onExit(); + } + #if CC_ENABLE_SCRIPT_BINDING if (_scriptType == kScriptTypeJavascript) { diff --git a/cocos/2d/CCScene.cpp b/cocos/2d/CCScene.cpp index 045c726a9e..7f418468b1 100644 --- a/cocos/2d/CCScene.cpp +++ b/cocos/2d/CCScene.cpp @@ -248,54 +248,19 @@ void Scene::setNavMeshDebugCamera(Camera *camera) _navMeshDebugCamera = camera; } -void Scene::addChildToNavMesh(Node* child) -{ - if (_navMesh) - { - std::function addToNavMeshFunc = nullptr; - addToNavMeshFunc = [this, &addToNavMeshFunc](Node* node) -> void - { - auto agCom = static_cast(node->getComponent(NavMeshAgent::getNavMeshAgentComponentName())); - if (agCom) - { - agCom->onEnter(); - } - - auto obCom = static_cast(node->getComponent(NavMeshObstacle::getNavMeshObstacleComponentName())); - if (obCom) - { - obCom->onEnter(); - } - - auto& children = node->getChildren(); - for (const auto &n : children) { - addToNavMeshFunc(n); - } - }; - - addToNavMeshFunc(child); - } -} - #endif -#if (CC_USE_PHYSICS || (CC_USE_3D_PHYSICS && CC_ENABLE_BULLET_INTEGRATION) || CC_USE_NAVMESH) +#if (CC_USE_PHYSICS || (CC_USE_3D_PHYSICS && CC_ENABLE_BULLET_INTEGRATION)) void Scene::addChild(Node* child, int zOrder, int tag) { Node::addChild(child, zOrder, tag); addChildToPhysicsWorld(child); -#if CC_USE_NAVMESH - addChildToNavMesh(child); -#endif } void Scene::addChild(Node* child, int zOrder, const std::string &name) { Node::addChild(child, zOrder, name); addChildToPhysicsWorld(child); -#if CC_USE_NAVMESH - addChildToNavMesh(child); -#endif } Scene* Scene::createWithPhysics() diff --git a/cocos/2d/CCScene.h b/cocos/2d/CCScene.h index 7665644432..117d016e19 100644 --- a/cocos/2d/CCScene.h +++ b/cocos/2d/CCScene.h @@ -143,7 +143,7 @@ protected: private: CC_DISALLOW_COPY_AND_ASSIGN(Scene); -#if (CC_USE_PHYSICS || (CC_USE_3D_PHYSICS && CC_ENABLE_BULLET_INTEGRATION) || CC_USE_NAVMESH) +#if (CC_USE_PHYSICS || (CC_USE_3D_PHYSICS && CC_ENABLE_BULLET_INTEGRATION)) public: virtual void addChild(Node* child, int zOrder, int tag) override; virtual void addChild(Node* child, int zOrder, const std::string &name) override; @@ -202,9 +202,6 @@ public: */ void setNavMeshDebugCamera(Camera *camera); -protected: - void addChildToNavMesh(Node* child); - protected: NavMesh* _navMesh; Camera * _navMeshDebugCamera; diff --git a/cocos/base/CCData.cpp b/cocos/base/CCData.cpp index db4f639e95..7c5a1e1bdf 100644 --- a/cocos/base/CCData.cpp +++ b/cocos/base/CCData.cpp @@ -24,6 +24,7 @@ ****************************************************************************/ #include "base/CCData.h" +#include "base/CCConsole.h" NS_CC_BEGIN diff --git a/cocos/base/CCEventListener.cpp b/cocos/base/CCEventListener.cpp index 0c7c32f598..562a129241 100644 --- a/cocos/base/CCEventListener.cpp +++ b/cocos/base/CCEventListener.cpp @@ -23,6 +23,7 @@ ****************************************************************************/ #include "base/CCEventListener.h" +#include "base/CCConsole.h" NS_CC_BEGIN diff --git a/cocos/base/CCEventListenerAcceleration.cpp b/cocos/base/CCEventListenerAcceleration.cpp index 2f15f46985..099919be97 100644 --- a/cocos/base/CCEventListenerAcceleration.cpp +++ b/cocos/base/CCEventListenerAcceleration.cpp @@ -24,6 +24,7 @@ #include "base/CCEventListenerAcceleration.h" #include "base/CCEventAcceleration.h" +#include "base/CCConsole.h" NS_CC_BEGIN diff --git a/cocos/editor-support/cocostudio/CCComAudio.cpp b/cocos/editor-support/cocostudio/CCComAudio.cpp index 25c334f87a..8e53f5eb88 100644 --- a/cocos/editor-support/cocostudio/CCComAudio.cpp +++ b/cocos/editor-support/cocostudio/CCComAudio.cpp @@ -56,6 +56,16 @@ void ComAudio::onExit() stopAllEffects(); } +void ComAudio::onAdd() +{ +} + +void ComAudio::onRemove() +{ + stopBackgroundMusic(true); + stopAllEffects(); +} + bool ComAudio::isEnabled() const { return _enabled; diff --git a/cocos/editor-support/cocostudio/CCComAudio.h b/cocos/editor-support/cocostudio/CCComAudio.h index d91dbe7bee..a5997aadeb 100644 --- a/cocos/editor-support/cocostudio/CCComAudio.h +++ b/cocos/editor-support/cocostudio/CCComAudio.h @@ -59,6 +59,16 @@ public: * @lua NA */ virtual void onExit() override; + /** + * @js NA + * @lua NA + */ + virtual void onAdd() override; + /** + * @js NA + * @lua NA + */ + virtual void onRemove() override; virtual bool isEnabled() const override; virtual void setEnabled(bool b) override; virtual bool serialize(void* r) override; diff --git a/cocos/editor-support/cocostudio/CCComController.cpp b/cocos/editor-support/cocostudio/CCComController.cpp index a258321ba1..f24b7bebf5 100644 --- a/cocos/editor-support/cocostudio/CCComController.cpp +++ b/cocos/editor-support/cocostudio/CCComController.cpp @@ -54,6 +54,18 @@ void ComController::onExit() { } +void ComController::onAdd() +{ + if (_owner != nullptr) + { + _owner->scheduleUpdate(); + } +} + +void ComController::onRemove() +{ +} + void ComController::update(float delta) { } diff --git a/cocos/editor-support/cocostudio/CCComController.h b/cocos/editor-support/cocostudio/CCComController.h index 8a3ad4f32a..c3dda3fd1e 100644 --- a/cocos/editor-support/cocostudio/CCComController.h +++ b/cocos/editor-support/cocostudio/CCComController.h @@ -59,6 +59,16 @@ public: * @lua NA */ virtual void onExit() override; + /** + * @js NA + * @lua NA + */ + virtual void onAdd() override; + /** + * @js NA + * @lua NA + */ + virtual void onRemove() override; virtual void update(float delta) override; virtual bool isEnabled() const override; virtual void setEnabled(bool b) override; diff --git a/cocos/editor-support/cocostudio/CCComRender.cpp b/cocos/editor-support/cocostudio/CCComRender.cpp index 4243e3aafb..b69e0570d2 100644 --- a/cocos/editor-support/cocostudio/CCComRender.cpp +++ b/cocos/editor-support/cocostudio/CCComRender.cpp @@ -68,6 +68,22 @@ void ComRender::onExit() } } +void ComRender::onAdd() +{ + if (_owner != nullptr) + { + _owner->addChild(_render); + } +} + +void ComRender::onRemove() +{ + if (_owner != nullptr) + { + _owner->removeChild(_render, true); + } +} + cocos2d::Node* ComRender::getNode() { return _render; diff --git a/cocos/editor-support/cocostudio/CCComRender.h b/cocos/editor-support/cocostudio/CCComRender.h index 02b6e3fdd5..2911359bd8 100644 --- a/cocos/editor-support/cocostudio/CCComRender.h +++ b/cocos/editor-support/cocostudio/CCComRender.h @@ -57,6 +57,16 @@ public: * @lua NA */ virtual void onExit() override; + /** + * @js NA + * @lua NA + */ + virtual void onAdd() override; + /** + * @js NA + * @lua NA + */ + virtual void onRemove() override; virtual bool serialize(void* r) override; virtual cocos2d::Node* getNode(); virtual void setNode(cocos2d::Node *node); diff --git a/cocos/network/HttpClient.cpp b/cocos/network/HttpClient.cpp index 53f13907ae..8d800bb2ef 100644 --- a/cocos/network/HttpClient.cpp +++ b/cocos/network/HttpClient.cpp @@ -202,6 +202,8 @@ static bool configureCURL(HttpClient* client, CURL* handle, char* errorBuffer) // Document is here: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTNOSIGNAL curl_easy_setopt(handle, CURLOPT_NOSIGNAL, 1L); + curl_easy_setopt(handle, CURLOPT_ACCEPT_ENCODING, ""); + return true; } diff --git a/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHttpURLConnection.java b/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHttpURLConnection.java index c0d9c5f7c4..00ddc97845 100644 --- a/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHttpURLConnection.java +++ b/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHttpURLConnection.java @@ -28,6 +28,8 @@ import java.io.DataInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; +import java.util.zip.GZIPInputStream; +import java.util.zip.InflaterInputStream; import java.io.BufferedInputStream; import java.io.InputStream; import java.net.HttpURLConnection; @@ -260,11 +262,20 @@ public class Cocos2dxHttpURLConnection } static byte[] getResponseContent(HttpURLConnection http) { - DataInputStream in; - try { - in = new DataInputStream(http.getInputStream()); + InputStream in; + try { + in = http.getInputStream(); + String contentEncoding = http.getContentEncoding(); + if (contentEncoding != null) { + if(contentEncoding.equalsIgnoreCase("gzip")){ + in = new GZIPInputStream(http.getInputStream()); //reads 2 bytes to determine GZIP stream! + } + else if(contentEncoding.equalsIgnoreCase("deflate")){ + in = new InflaterInputStream(http.getInputStream()); + } + } } catch (IOException e) { - in = new DataInputStream(http.getErrorStream()); + in = http.getErrorStream(); } catch (Exception e) { Log.e("Cocos2dxHttpURLConnection exception", e.toString()); return null; diff --git a/cocos/scripting/js-bindings/auto/api/jsb_cocos2dx_auto_api.js b/cocos/scripting/js-bindings/auto/api/jsb_cocos2dx_auto_api.js index 95ab779589..21a8f84eaf 100644 --- a/cocos/scripting/js-bindings/auto/api/jsb_cocos2dx_auto_api.js +++ b/cocos/scripting/js-bindings/auto/api/jsb_cocos2dx_auto_api.js @@ -22213,16 +22213,6 @@ isEnabled : function ( return false; }, -/** - * @method update - * @param {float} arg0 - */ -update : function ( -float -) -{ -}, - /** * @method getOwner * @return {cc.Node} @@ -22243,16 +22233,6 @@ init : function ( return false; }, -/** - * @method setOwner - * @param {cc.Node} arg0 - */ -setOwner : function ( -node -) -{ -}, - /** * @method getName * @return {String} @@ -22263,6 +22243,16 @@ getName : function ( return ; }, +/** + * @method setOwner + * @param {cc.Node} arg0 + */ +setOwner : function ( +node +) +{ +}, + /** * @method create * @return {cc.Component} diff --git a/cocos/scripting/js-bindings/auto/jsb_cocos2dx_auto.cpp b/cocos/scripting/js-bindings/auto/jsb_cocos2dx_auto.cpp index 545aa3cd07..aa5b597b38 100644 --- a/cocos/scripting/js-bindings/auto/jsb_cocos2dx_auto.cpp +++ b/cocos/scripting/js-bindings/auto/jsb_cocos2dx_auto.cpp @@ -67823,26 +67823,6 @@ bool js_cocos2dx_Component_isEnabled(JSContext *cx, uint32_t argc, jsval *vp) JS_ReportError(cx, "js_cocos2dx_Component_isEnabled : wrong number of arguments: %d, was expecting %d", argc, 0); return false; } -bool js_cocos2dx_Component_update(JSContext *cx, uint32_t argc, jsval *vp) -{ - JS::CallArgs args = JS::CallArgsFromVp(argc, vp); - bool ok = true; - JS::RootedObject obj(cx, args.thisv().toObjectOrNull()); - js_proxy_t *proxy = jsb_get_js_proxy(obj); - cocos2d::Component* cobj = (cocos2d::Component *)(proxy ? proxy->ptr : NULL); - JSB_PRECONDITION2( cobj, cx, false, "js_cocos2dx_Component_update : Invalid Native Object"); - if (argc == 1) { - double arg0; - ok &= JS::ToNumber( cx, args.get(0), &arg0) && !isnan(arg0); - JSB_PRECONDITION2(ok, cx, false, "js_cocos2dx_Component_update : Error processing arguments"); - cobj->update(arg0); - args.rval().setUndefined(); - return true; - } - - JS_ReportError(cx, "js_cocos2dx_Component_update : wrong number of arguments: %d, was expecting %d", argc, 1); - return false; -} bool js_cocos2dx_Component_getOwner(JSContext *cx, uint32_t argc, jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); @@ -67886,6 +67866,24 @@ bool js_cocos2dx_Component_init(JSContext *cx, uint32_t argc, jsval *vp) JS_ReportError(cx, "js_cocos2dx_Component_init : wrong number of arguments: %d, was expecting %d", argc, 0); return false; } +bool js_cocos2dx_Component_getName(JSContext *cx, uint32_t argc, jsval *vp) +{ + JS::CallArgs args = JS::CallArgsFromVp(argc, vp); + JS::RootedObject obj(cx, args.thisv().toObjectOrNull()); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cocos2d::Component* cobj = (cocos2d::Component *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, false, "js_cocos2dx_Component_getName : Invalid Native Object"); + if (argc == 0) { + const std::string& ret = cobj->getName(); + jsval jsret = JSVAL_NULL; + jsret = std_string_to_jsval(cx, ret); + args.rval().set(jsret); + return true; + } + + JS_ReportError(cx, "js_cocos2dx_Component_getName : wrong number of arguments: %d, was expecting %d", argc, 0); + return false; +} bool js_cocos2dx_Component_setOwner(JSContext *cx, uint32_t argc, jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); @@ -67914,24 +67912,6 @@ bool js_cocos2dx_Component_setOwner(JSContext *cx, uint32_t argc, jsval *vp) JS_ReportError(cx, "js_cocos2dx_Component_setOwner : wrong number of arguments: %d, was expecting %d", argc, 1); return false; } -bool js_cocos2dx_Component_getName(JSContext *cx, uint32_t argc, jsval *vp) -{ - JS::CallArgs args = JS::CallArgsFromVp(argc, vp); - JS::RootedObject obj(cx, args.thisv().toObjectOrNull()); - js_proxy_t *proxy = jsb_get_js_proxy(obj); - cocos2d::Component* cobj = (cocos2d::Component *)(proxy ? proxy->ptr : NULL); - JSB_PRECONDITION2( cobj, cx, false, "js_cocos2dx_Component_getName : Invalid Native Object"); - if (argc == 0) { - const std::string& ret = cobj->getName(); - jsval jsret = JSVAL_NULL; - jsret = std_string_to_jsval(cx, ret); - args.rval().set(jsret); - return true; - } - - JS_ReportError(cx, "js_cocos2dx_Component_getName : wrong number of arguments: %d, was expecting %d", argc, 0); - return false; -} bool js_cocos2dx_Component_create(JSContext *cx, uint32_t argc, jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); @@ -68026,11 +68006,10 @@ void js_register_cocos2dx_Component(JSContext *cx, JS::HandleObject global) { JS_FN("setEnabled", js_cocos2dx_Component_setEnabled, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), JS_FN("setName", js_cocos2dx_Component_setName, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), JS_FN("isEnabled", js_cocos2dx_Component_isEnabled, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), - JS_FN("update", js_cocos2dx_Component_update, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), JS_FN("getOwner", js_cocos2dx_Component_getOwner, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), JS_FN("init", js_cocos2dx_Component_init, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), - JS_FN("setOwner", js_cocos2dx_Component_setOwner, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), JS_FN("getName", js_cocos2dx_Component_getName, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FN("setOwner", js_cocos2dx_Component_setOwner, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), JS_FN("ctor", js_cocos2d_Component_ctor, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), JS_FS_END }; diff --git a/cocos/scripting/js-bindings/auto/jsb_cocos2dx_auto.hpp b/cocos/scripting/js-bindings/auto/jsb_cocos2dx_auto.hpp index 1a0c5560e6..260cb822c0 100644 --- a/cocos/scripting/js-bindings/auto/jsb_cocos2dx_auto.hpp +++ b/cocos/scripting/js-bindings/auto/jsb_cocos2dx_auto.hpp @@ -3922,11 +3922,10 @@ void register_all_cocos2dx(JSContext* cx, JS::HandleObject obj); bool js_cocos2dx_Component_setEnabled(JSContext *cx, uint32_t argc, jsval *vp); bool js_cocos2dx_Component_setName(JSContext *cx, uint32_t argc, jsval *vp); bool js_cocos2dx_Component_isEnabled(JSContext *cx, uint32_t argc, jsval *vp); -bool js_cocos2dx_Component_update(JSContext *cx, uint32_t argc, jsval *vp); bool js_cocos2dx_Component_getOwner(JSContext *cx, uint32_t argc, jsval *vp); bool js_cocos2dx_Component_init(JSContext *cx, uint32_t argc, jsval *vp); -bool js_cocos2dx_Component_setOwner(JSContext *cx, uint32_t argc, jsval *vp); bool js_cocos2dx_Component_getName(JSContext *cx, uint32_t argc, jsval *vp); +bool js_cocos2dx_Component_setOwner(JSContext *cx, uint32_t argc, jsval *vp); bool js_cocos2dx_Component_create(JSContext *cx, uint32_t argc, jsval *vp); bool js_cocos2dx_Component_Component(JSContext *cx, uint32_t argc, jsval *vp); diff --git a/cocos/scripting/js-bindings/manual/ScriptingCore.cpp b/cocos/scripting/js-bindings/manual/ScriptingCore.cpp index 05e1fe2528..6125f8551d 100644 --- a/cocos/scripting/js-bindings/manual/ScriptingCore.cpp +++ b/cocos/scripting/js-bindings/manual/ScriptingCore.cpp @@ -1058,28 +1058,29 @@ int ScriptingCore::handleComponentEvent(void* data) JS::RootedValue retval(_cx); jsval dataVal = INT_TO_JSVAL(1); - if (action == kComponentOnEnter) + JS::RootedValue nodeValue(_cx, OBJECT_TO_JSVAL(p->obj.get())); + + if (action == kComponentOnAdd) { - if (isFunctionOverridedInJS(JS::RootedObject(_cx, p->obj.get()), "onEnter", js_cocos2dx_Component_onEnter)) - { - ret = executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "onEnter", 1, &dataVal, &retval); - } + ret = executeFunctionWithOwner(nodeValue, "onAdd", 1, &dataVal, &retval); + } + else if (action == kComponentOnRemove) + { + ret = executeFunctionWithOwner(nodeValue, "onRemove", 1, &dataVal, &retval); + } + else if (action == kComponentOnEnter) + { + ret = executeFunctionWithOwner(nodeValue, "onEnter", 1, &dataVal, &retval); resumeSchedulesAndActions(p); } else if (action == kComponentOnExit) { - if (isFunctionOverridedInJS(JS::RootedObject(_cx, p->obj.get()), "onExit", js_cocos2dx_Component_onExit)) - { - ret = executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "onExit", 1, &dataVal, &retval); - } + ret = executeFunctionWithOwner(nodeValue, "onExit", 1, &dataVal, &retval); pauseSchedulesAndActions(p); } else if (action == kComponentOnUpdate) { - if (isFunctionOverridedInJS(JS::RootedObject(_cx, p->obj.get()), "update", js_cocos2dx_Component_update)) - { - ret = executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "update", 1, &dataVal, &retval); - } + ret = executeFunctionWithOwner(nodeValue, "update", 1, &dataVal, &retval); } return ret; diff --git a/cocos/scripting/js-bindings/manual/cocos2d_specifics.cpp b/cocos/scripting/js-bindings/manual/cocos2d_specifics.cpp index 392d8bf0db..6b3b584b62 100644 --- a/cocos/scripting/js-bindings/manual/cocos2d_specifics.cpp +++ b/cocos/scripting/js-bindings/manual/cocos2d_specifics.cpp @@ -2693,36 +2693,6 @@ bool js_cocos2dx_CCNode_convertToWorldSpaceAR(JSContext *cx, uint32_t argc, jsva return true; } -bool js_cocos2dx_Component_onEnter(JSContext *cx, uint32_t argc, jsval *vp) -{ - JSObject *thisObj = JS_THIS_OBJECT(cx, vp); - if (thisObj) { - js_proxy_t *proxy = jsb_get_js_proxy(thisObj); - if (proxy) { - ScriptingCore::getInstance()->setCalledFromScript(true); - static_cast(proxy->ptr)->onEnter(); - return true; - } - } - JS_ReportError(cx, "Invalid Native Object."); - return false; -} - -bool js_cocos2dx_Component_onExit(JSContext *cx, uint32_t argc, jsval *vp) -{ - JSObject *thisObj = JS_THIS_OBJECT(cx, vp); - if (thisObj) { - js_proxy_t *proxy = jsb_get_js_proxy(thisObj); - if (proxy) { - ScriptingCore::getInstance()->setCalledFromScript(true); - static_cast(proxy->ptr)->onExit(); - return true; - } - } - JS_ReportError(cx, "Invalid Native Object."); - return false; -} - bool js_cocos2dx_CCTMXLayer_tileFlagsAt(JSContext *cx, uint32_t argc, jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); @@ -5490,10 +5460,6 @@ void register_cocos2dx_js_core(JSContext* cx, JS::HandleObject global) tmpObj.set(jsb_cocos2d_GLProgramState_prototype); JS_DefineFunction(cx, tmpObj, "setVertexAttribPointer", js_cocos2dx_GLProgramState_setVertexAttribPointer, 6, JSPROP_ENUMERATE | JSPROP_PERMANENT); JS_DefineFunction(cx, tmpObj, "setUniformVec4", js_cocos2dx_GLProgramState_setUniformVec4, 2, JSPROP_ENUMERATE | JSPROP_PERMANENT); - - tmpObj.set(jsb_cocos2d_Component_prototype); - JS_DefineFunction(cx, tmpObj, "onEnter", js_cocos2dx_Component_onEnter, 0, JSPROP_ENUMERATE | JSPROP_PERMANENT); - JS_DefineFunction(cx, tmpObj, "onExit", js_cocos2dx_Component_onExit, 0, JSPROP_ENUMERATE | JSPROP_PERMANENT); tmpObj.set(jsb_cocos2d_Scheduler_prototype); JS_DefineFunction(cx, tmpObj, "retain", js_cocos2dx_retain, 0, JSPROP_ENUMERATE | JSPROP_PERMANENT); diff --git a/cocos/scripting/js-bindings/manual/extension/jsb_cocos2dx_extension_manual.cpp b/cocos/scripting/js-bindings/manual/extension/jsb_cocos2dx_extension_manual.cpp index 00edfc795d..597701d0ba 100644 --- a/cocos/scripting/js-bindings/manual/extension/jsb_cocos2dx_extension_manual.cpp +++ b/cocos/scripting/js-bindings/manual/extension/jsb_cocos2dx_extension_manual.cpp @@ -908,7 +908,7 @@ bool js_cocos2dx_ext_release(JSContext *cx, uint32_t argc, jsval *vp) } -__JSDownloaderDelegator::__JSDownloaderDelegator(JSContext *cx, JS::HandleObject obj, const std::string &url, JS::HandleValue callback) +__JSDownloaderDelegator::__JSDownloaderDelegator(JSContext *cx, JS::HandleObject obj, const std::string &url, JS::HandleObject callback) : _cx(cx) , _url(url) , _buffer(nullptr) @@ -917,7 +917,27 @@ __JSDownloaderDelegator::__JSDownloaderDelegator(JSContext *cx, JS::HandleObject _obj.ref().set(obj); _jsCallback.construct(_cx); _jsCallback.ref().set(callback); - +} + +__JSDownloaderDelegator::~__JSDownloaderDelegator() +{ + _obj.destroyIfConstructed(); + _jsCallback.destroyIfConstructed(); + if (_buffer != nullptr) + free(_buffer); + _downloader->setErrorCallback(nullptr); + _downloader->setSuccessCallback(nullptr); +} + +__JSDownloaderDelegator *__JSDownloaderDelegator::create(JSContext *cx, JS::HandleObject obj, const std::string &url, JS::HandleObject callback) +{ + __JSDownloaderDelegator *delegate = new (std::nothrow) __JSDownloaderDelegator(cx, obj, url, callback); + delegate->autorelease(); + return delegate; +} + +void __JSDownloaderDelegator::startDownload() +{ if (Director::getInstance()->getTextureCache()->getTextureForKey(_url)) { onSuccess(nullptr, nullptr, nullptr); @@ -929,12 +949,9 @@ __JSDownloaderDelegator::__JSDownloaderDelegator(JSContext *cx, JS::HandleObject _downloader->setErrorCallback( std::bind(&__JSDownloaderDelegator::onError, this, std::placeholders::_1) ); _downloader->setSuccessCallback( std::bind(&__JSDownloaderDelegator::onSuccess, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3) ); - long contentSize = _downloader->getContentSize(_url); - if (contentSize == -1) { - cocos2d::extension::Downloader::Error err; - onError(err); - } - else { + cocos2d::extension::Downloader::HeaderInfo info = _downloader->getHeader(_url); + long contentSize = info.contentSize; + if (contentSize > 0 && info.responseCode < 400) { _size = contentSize / sizeof(unsigned char); _buffer = (unsigned char*)malloc(contentSize); _downloader->downloadToBufferSync(_url, _buffer, _size); @@ -942,79 +959,85 @@ __JSDownloaderDelegator::__JSDownloaderDelegator(JSContext *cx, JS::HandleObject } } -__JSDownloaderDelegator::~__JSDownloaderDelegator() +void __JSDownloaderDelegator::download() { - if (_buffer != nullptr) - free(_buffer); - _downloader->setErrorCallback(nullptr); - _downloader->setSuccessCallback(nullptr); + retain(); + startDownload(); +} + +void __JSDownloaderDelegator::downloadAsync() +{ + retain(); + auto t = std::thread(&__JSDownloaderDelegator::startDownload, this); + t.detach(); } void __JSDownloaderDelegator::onError(const cocos2d::extension::Downloader::Error &error) { - if (!_jsCallback.ref().isNull()) { - JSContext *cx = ScriptingCore::getInstance()->getGlobalContext(); - JS::RootedObject global(cx, ScriptingCore::getInstance()->getGlobalObject()); - - JSAutoCompartment ac(_cx, _obj.ref()); - - jsval succeed = BOOLEAN_TO_JSVAL(false); - JS::RootedValue retval(cx); - JS_CallFunctionValue(cx, global, _jsCallback.ref(), JS::HandleValueArray::fromMarkedLocation(1, &succeed), &retval); - } - this->release(); + Director::getInstance()->getScheduler()->performFunctionInCocosThread([this] + { + JS::RootedValue callback(_cx, OBJECT_TO_JSVAL(_jsCallback.ref())); + if (!callback.isNull()) { + JS::RootedObject global(_cx, ScriptingCore::getInstance()->getGlobalObject()); + JSAutoCompartment ac(_cx, global); + + jsval succeed = BOOLEAN_TO_JSVAL(false); + JS::RootedValue retval(_cx); + JS_CallFunctionValue(_cx, global, callback, JS::HandleValueArray::fromMarkedLocation(1, &succeed), &retval); + } + release(); + }); } void __JSDownloaderDelegator::onSuccess(const std::string &srcUrl, const std::string &storagePath, const std::string &customId) { Image *image = new Image(); - jsval valArr[2]; - JSContext *cx = ScriptingCore::getInstance()->getGlobalContext(); - JS::RootedObject global(cx, ScriptingCore::getInstance()->getGlobalObject()); cocos2d::TextureCache *cache = Director::getInstance()->getTextureCache(); - JSAutoCompartment ac(_cx, _obj.ref() ? _obj.ref() : global); - Texture2D *tex = cache->getTextureForKey(_url); - if (tex) + if (!tex) { - valArr[0] = BOOLEAN_TO_JSVAL(true); - js_proxy_t* p = jsb_get_native_proxy(tex); - valArr[1] = OBJECT_TO_JSVAL(p->obj); + if (image->initWithImageData(_buffer, _size)) + { + tex = Director::getInstance()->getTextureCache()->addImage(image, _url); + } } - else if (image->initWithImageData(_buffer, _size)) - { - tex = Director::getInstance()->getTextureCache()->addImage(image, _url); - valArr[0] = BOOLEAN_TO_JSVAL(true); - - JS::RootedObject texProto(cx, jsb_cocos2d_Texture2D_prototype); - JSObject *obj = JS_NewObject(cx, jsb_cocos2d_Texture2D_class, texProto, global); - // link the native object with the javascript object - js_proxy_t* p = jsb_new_proxy(tex, obj); - JS::AddNamedObjectRoot(cx, &p->obj, "cocos2d::Texture2D"); - valArr[1] = OBJECT_TO_JSVAL(p->obj); - } - else - { - valArr[0] = BOOLEAN_TO_JSVAL(false); - valArr[1] = JSVAL_NULL; - } - image->release(); - if (!_jsCallback.ref().isNull()) { - JS::RootedValue retval(cx); - JS_CallFunctionValue(cx, global, _jsCallback.ref(), JS::HandleValueArray::fromMarkedLocation(2, valArr), &retval); - } - this->release(); -} - -void __JSDownloaderDelegator::download(JSContext *cx, JS::HandleObject obj, const std::string &url, JS::HandleValue callback) -{ - auto t = std::thread([cx, obj, url, callback]() { - new __JSDownloaderDelegator(cx, obj, url, callback); + Director::getInstance()->getScheduler()->performFunctionInCocosThread([this, tex] + { + JS::RootedObject global(_cx, ScriptingCore::getInstance()->getGlobalObject()); + JSAutoCompartment ac(_cx, global); + + jsval valArr[2]; + if (tex) + { + valArr[0] = BOOLEAN_TO_JSVAL(true); + js_proxy_t* p = jsb_get_native_proxy(tex); + if (!p) + { + JS::RootedObject texProto(_cx, jsb_cocos2d_Texture2D_prototype); + JSObject *obj = JS_NewObject(_cx, jsb_cocos2d_Texture2D_class, texProto, global); + // link the native object with the javascript object + p = jsb_new_proxy(tex, obj); + JS::AddNamedObjectRoot(_cx, &p->obj, "cocos2d::Texture2D"); + } + valArr[1] = OBJECT_TO_JSVAL(p->obj); + } + else + { + valArr[0] = BOOLEAN_TO_JSVAL(false); + valArr[1] = JSVAL_NULL; + } + + JS::RootedValue callback(_cx, OBJECT_TO_JSVAL(_jsCallback.ref())); + if (!callback.isNull()) + { + JS::RootedValue retval(_cx); + JS_CallFunctionValue(_cx, global, callback, JS::HandleValueArray::fromMarkedLocation(2, valArr), &retval); + } + release(); }); - t.detach(); } // jsb.loadRemoteImg(url, function(succeed, result) {}) @@ -1022,14 +1045,15 @@ bool js_load_remote_image(JSContext *cx, uint32_t argc, jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); JS::RootedObject obj(cx, JS_THIS_OBJECT(cx, vp)); - if (argc == 2) { + if (argc == 2) + { std::string url; bool ok = jsval_to_std_string(cx, args.get(0), &url); - JS::RootedValue callback(cx, args.get(1)); + JSB_PRECONDITION2(ok, cx, false, "js_load_remote_image : Error processing arguments"); + JS::RootedObject callback(cx, args.get(1).toObjectOrNull()); - __JSDownloaderDelegator::download(cx, obj, url, callback); - - JSB_PRECONDITION2(ok, cx, false, "js_console_log : Error processing arguments"); + __JSDownloaderDelegator *delegate = __JSDownloaderDelegator::create(cx, obj, url, callback); + delegate->downloadAsync(); args.rval().setUndefined(); return true; diff --git a/cocos/scripting/js-bindings/manual/extension/jsb_cocos2dx_extension_manual.h b/cocos/scripting/js-bindings/manual/extension/jsb_cocos2dx_extension_manual.h index 29cd76e94b..ebc68c5645 100644 --- a/cocos/scripting/js-bindings/manual/extension/jsb_cocos2dx_extension_manual.h +++ b/cocos/scripting/js-bindings/manual/extension/jsb_cocos2dx_extension_manual.h @@ -32,12 +32,17 @@ class __JSDownloaderDelegator : cocos2d::Ref { public: - static void download(JSContext *cx, JS::HandleObject obj, const std::string &url, JS::HandleValue callback); + void downloadAsync(); + void download(); + static __JSDownloaderDelegator *create(JSContext *cx, JS::HandleObject obj, const std::string &url, JS::HandleObject callback); + protected: - __JSDownloaderDelegator(JSContext *cx, JS::HandleObject obj, const std::string &url, JS::HandleValue callback); + __JSDownloaderDelegator(JSContext *cx, JS::HandleObject obj, const std::string &url, JS::HandleObject callback); ~__JSDownloaderDelegator(); + void startDownload(); + private: void onSuccess(const std::string &srcUrl, const std::string &storagePath, const std::string &customId); void onError(const cocos2d::extension::Downloader::Error &error); @@ -46,8 +51,8 @@ private: std::shared_ptr _downloader; std::string _url; JSContext *_cx; - mozilla::Maybe _jsCallback; - mozilla::Maybe _obj; + mozilla::Maybe _jsCallback; + mozilla::Maybe _obj; }; void register_all_cocos2dx_extension_manual(JSContext* cx, JS::HandleObject global); diff --git a/cocos/scripting/lua-bindings/auto/api/ComAudio.lua b/cocos/scripting/lua-bindings/auto/api/ComAudio.lua index ad1daa9948..ae10d04a67 100644 --- a/cocos/scripting/lua-bindings/auto/api/ComAudio.lua +++ b/cocos/scripting/lua-bindings/auto/api/ComAudio.lua @@ -199,12 +199,6 @@ -- @param #bool b -- @return ComAudio#ComAudio self (return value: ccs.ComAudio) --------------------------------- --- --- @function [parent=#ComAudio] isEnabled --- @param self --- @return bool#bool ret (return value: bool) - -------------------------------- -- -- @function [parent=#ComAudio] serialize @@ -212,10 +206,30 @@ -- @param #void r -- @return bool#bool ret (return value: bool) +-------------------------------- +-- +-- @function [parent=#ComAudio] isEnabled +-- @param self +-- @return bool#bool ret (return value: bool) + +-------------------------------- +-- js NA
+-- lua NA +-- @function [parent=#ComAudio] onRemove +-- @param self +-- @return ComAudio#ComAudio self (return value: ccs.ComAudio) + -------------------------------- -- -- @function [parent=#ComAudio] init -- @param self -- @return bool#bool ret (return value: bool) +-------------------------------- +-- js NA
+-- lua NA +-- @function [parent=#ComAudio] onAdd +-- @param self +-- @return ComAudio#ComAudio self (return value: ccs.ComAudio) + return nil diff --git a/cocos/scripting/lua-bindings/auto/api/ComController.lua b/cocos/scripting/lua-bindings/auto/api/ComController.lua index 87c582e32c..df4fbe5c16 100644 --- a/cocos/scripting/lua-bindings/auto/api/ComController.lua +++ b/cocos/scripting/lua-bindings/auto/api/ComController.lua @@ -29,6 +29,13 @@ -- @param self -- @return bool#bool ret (return value: bool) +-------------------------------- +-- js NA
+-- lua NA +-- @function [parent=#ComController] onRemove +-- @param self +-- @return ComController#ComController self (return value: ccs.ComController) + -------------------------------- -- -- @function [parent=#ComController] update @@ -42,6 +49,13 @@ -- @param self -- @return bool#bool ret (return value: bool) +-------------------------------- +-- js NA
+-- lua NA +-- @function [parent=#ComController] onAdd +-- @param self +-- @return ComController#ComController self (return value: ccs.ComController) + -------------------------------- -- js ctor -- @function [parent=#ComController] ComController diff --git a/cocos/scripting/lua-bindings/auto/api/ComRender.lua b/cocos/scripting/lua-bindings/auto/api/ComRender.lua index 42200e3a28..0d9f436c6e 100644 --- a/cocos/scripting/lua-bindings/auto/api/ComRender.lua +++ b/cocos/scripting/lua-bindings/auto/api/ComRender.lua @@ -39,4 +39,18 @@ -- @param #void r -- @return bool#bool ret (return value: bool) +-------------------------------- +-- js NA
+-- lua NA +-- @function [parent=#ComRender] onRemove +-- @param self +-- @return ComRender#ComRender self (return value: ccs.ComRender) + +-------------------------------- +-- js NA
+-- lua NA +-- @function [parent=#ComRender] onAdd +-- @param self +-- @return ComRender#ComRender self (return value: ccs.ComRender) + return nil diff --git a/cocos/scripting/lua-bindings/auto/api/Component.lua b/cocos/scripting/lua-bindings/auto/api/Component.lua index 5e157151d1..372d8e1cf0 100644 --- a/cocos/scripting/lua-bindings/auto/api/Component.lua +++ b/cocos/scripting/lua-bindings/auto/api/Component.lua @@ -24,6 +24,12 @@ -- @param self -- @return bool#bool ret (return value: bool) +-------------------------------- +-- +-- @function [parent=#Component] onRemove +-- @param self +-- @return Component#Component self (return value: cc.Component) + -------------------------------- -- -- @function [parent=#Component] update @@ -45,9 +51,8 @@ -------------------------------- -- --- @function [parent=#Component] setOwner +-- @function [parent=#Component] onAdd -- @param self --- @param #cc.Node pOwner -- @return Component#Component self (return value: cc.Component) -------------------------------- @@ -56,6 +61,13 @@ -- @param self -- @return string#string ret (return value: string) +-------------------------------- +-- +-- @function [parent=#Component] setOwner +-- @param self +-- @param #cc.Node pOwner +-- @return Component#Component self (return value: cc.Component) + -------------------------------- -- -- @function [parent=#Component] create diff --git a/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp b/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp index 84ff90b5f7..8064da4c86 100644 --- a/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp +++ b/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp @@ -91234,6 +91234,53 @@ int lua_cocos2dx_Component_isEnabled(lua_State* tolua_S) return 0; } +int lua_cocos2dx_Component_onRemove(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::Component* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.Component",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::Component*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_Component_onRemove'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 0) + { + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_Component_onRemove'", nullptr); + return 0; + } + cobj->onRemove(); + lua_settop(tolua_S, 1); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.Component:onRemove",argc, 0); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Component_onRemove'.",&tolua_err); +#endif + + return 0; +} int lua_cocos2dx_Component_update(lua_State* tolua_S) { int argc = 0; @@ -91378,7 +91425,7 @@ int lua_cocos2dx_Component_init(lua_State* tolua_S) return 0; } -int lua_cocos2dx_Component_setOwner(lua_State* tolua_S) +int lua_cocos2dx_Component_onAdd(lua_State* tolua_S) { int argc = 0; cocos2d::Component* cobj = nullptr; @@ -91398,32 +91445,29 @@ int lua_cocos2dx_Component_setOwner(lua_State* tolua_S) #if COCOS2D_DEBUG >= 1 if (!cobj) { - tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_Component_setOwner'", nullptr); + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_Component_onAdd'", nullptr); return 0; } #endif argc = lua_gettop(tolua_S)-1; - if (argc == 1) + if (argc == 0) { - cocos2d::Node* arg0; - - ok &= luaval_to_object(tolua_S, 2, "cc.Node",&arg0, "cc.Component:setOwner"); if(!ok) { - tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_Component_setOwner'", nullptr); + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_Component_onAdd'", nullptr); return 0; } - cobj->setOwner(arg0); + cobj->onAdd(); lua_settop(tolua_S, 1); return 1; } - luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.Component:setOwner",argc, 1); + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.Component:onAdd",argc, 0); return 0; #if COCOS2D_DEBUG >= 1 tolua_lerror: - tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Component_setOwner'.",&tolua_err); + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Component_onAdd'.",&tolua_err); #endif return 0; @@ -91475,6 +91519,56 @@ int lua_cocos2dx_Component_getName(lua_State* tolua_S) return 0; } +int lua_cocos2dx_Component_setOwner(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::Component* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.Component",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::Component*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_Component_setOwner'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 1) + { + cocos2d::Node* arg0; + + ok &= luaval_to_object(tolua_S, 2, "cc.Node",&arg0, "cc.Component:setOwner"); + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_Component_setOwner'", nullptr); + return 0; + } + cobj->setOwner(arg0); + lua_settop(tolua_S, 1); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.Component:setOwner",argc, 1); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_Component_setOwner'.",&tolua_err); +#endif + + return 0; +} int lua_cocos2dx_Component_create(lua_State* tolua_S) { int argc = 0; @@ -91524,11 +91618,13 @@ int lua_register_cocos2dx_Component(lua_State* tolua_S) tolua_function(tolua_S,"setEnabled",lua_cocos2dx_Component_setEnabled); tolua_function(tolua_S,"setName",lua_cocos2dx_Component_setName); tolua_function(tolua_S,"isEnabled",lua_cocos2dx_Component_isEnabled); + tolua_function(tolua_S,"onRemove",lua_cocos2dx_Component_onRemove); tolua_function(tolua_S,"update",lua_cocos2dx_Component_update); tolua_function(tolua_S,"getOwner",lua_cocos2dx_Component_getOwner); tolua_function(tolua_S,"init",lua_cocos2dx_Component_init); - tolua_function(tolua_S,"setOwner",lua_cocos2dx_Component_setOwner); + tolua_function(tolua_S,"onAdd",lua_cocos2dx_Component_onAdd); tolua_function(tolua_S,"getName",lua_cocos2dx_Component_getName); + tolua_function(tolua_S,"setOwner",lua_cocos2dx_Component_setOwner); tolua_function(tolua_S,"create", lua_cocos2dx_Component_create); tolua_endmodule(tolua_S); std::string typeName = typeid(cocos2d::Component).name(); diff --git a/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.hpp b/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.hpp index b0e49095a4..59981d3917 100644 --- a/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.hpp +++ b/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.hpp @@ -2049,6 +2049,8 @@ int register_all_cocos2dx(lua_State* tolua_S); + + diff --git a/extensions/assets-manager/Downloader.cpp b/extensions/assets-manager/Downloader.cpp index e14089a0d8..3187b19762 100644 --- a/extensions/assets-manager/Downloader.cpp +++ b/extensions/assets-manager/Downloader.cpp @@ -288,6 +288,7 @@ Downloader::HeaderInfo Downloader::prepareHeader(const std::string &srcUrl, void curl_easy_setopt(header, CURLOPT_URL, srcUrl.c_str()); curl_easy_setopt(header, CURLOPT_HEADER, 1); curl_easy_setopt(header, CURLOPT_NOBODY, 1); + curl_easy_setopt(header, CURLOPT_NOSIGNAL, 1); if (curl_easy_perform(header) == CURLE_OK) { char *url; @@ -296,16 +297,24 @@ Downloader::HeaderInfo Downloader::prepareHeader(const std::string &srcUrl, void curl_easy_getinfo(header, CURLINFO_CONTENT_TYPE, &contentType); curl_easy_getinfo(header, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &info.contentSize); curl_easy_getinfo(header, CURLINFO_RESPONSE_CODE, &info.responseCode); - info.url = url; - info.contentType = contentType; - info.valid = true; - if (_onHeader) + if (contentType == nullptr || info.contentSize == -1 || info.responseCode >= 400) { - _onHeader(srcUrl, info); + info.valid = false; + } + else + { + info.url = url; + info.contentType = contentType; + info.valid = true; } } - else + + if (info.valid && _onHeader) + { + _onHeader(srcUrl, info); + } + else if (!info.valid) { info.contentSize = -1; std::string msg = StringUtils::format("Can not get content size of file (%s) : Request header failed", srcUrl.c_str()); @@ -325,6 +334,11 @@ long Downloader::getContentSize(const std::string &srcUrl) return info.contentSize; } +Downloader::HeaderInfo Downloader::getHeader(const std::string &srcUrl) +{ + return prepareHeader(srcUrl); +} + void Downloader::getHeaderAsync(const std::string &srcUrl, const HeaderCallback &callback) { setHeaderCallback(callback); @@ -401,25 +415,26 @@ void Downloader::downloadToBuffer(const std::string &srcUrl, const std::string & CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { - _fileUtils->removeFile(data.path + data.name + TEMP_EXT); - std::string msg = StringUtils::format("Unable to download file: [curl error]%s", curl_easy_strerror(res)); + std::string msg = StringUtils::format("Unable to download file to buffer: [curl error]%s", curl_easy_strerror(res)); this->notifyError(msg, customId, res); } + else + { + Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]{ + if (!ptr.expired()) + { + std::shared_ptr downloader = ptr.lock(); + + auto successCB = downloader->getSuccessCallback(); + if (successCB != nullptr) + { + successCB(data.url, "", data.customId); + } + } + }); + } curl_easy_cleanup(curl); - - Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]{ - if (!ptr.expired()) - { - std::shared_ptr downloader = ptr.lock(); - - auto successCB = downloader->getSuccessCallback(); - if (successCB != nullptr) - { - successCB(data.url, "", data.customId); - } - } - }); } void Downloader::downloadAsync(const std::string &srcUrl, const std::string &storagePath, const std::string &customId/* = ""*/) diff --git a/extensions/assets-manager/Downloader.h b/extensions/assets-manager/Downloader.h index 43960e162c..2cf9fee8e0 100644 --- a/extensions/assets-manager/Downloader.h +++ b/extensions/assets-manager/Downloader.h @@ -107,7 +107,7 @@ public: std::string url; std::string contentType; double contentSize; - double responseCode; + long responseCode; }; typedef std::unordered_map DownloadUnits; @@ -139,6 +139,8 @@ public: long getContentSize(const std::string &srcUrl); + HeaderInfo getHeader(const std::string &srcUrl); + void getHeaderAsync(const std::string &srcUrl, const HeaderCallback &callback); void downloadToBufferAsync(const std::string &srcUrl, unsigned char *buffer, const long &size, const std::string &customId = ""); diff --git a/external/config.json b/external/config.json index c34fffcea3..4f0f2e4cf1 100644 --- a/external/config.json +++ b/external/config.json @@ -1,5 +1,5 @@ { - "version":"v3-deps-59", + "version":"v3-deps-61", "zip_file_size":"138162176", "repo_name":"cocos2d-x-3rd-party-libs-bin", "repo_parent":"https://github.com/cocos2d/", diff --git a/templates/cocos2dx_files.json b/templates/cocos2dx_files.json index 8b77d68bbf..360e1f1552 100644 --- a/templates/cocos2dx_files.json +++ b/templates/cocos2dx_files.json @@ -2999,6 +2999,12 @@ "external/recast/fastlz/fastlz.h", "external/recast/proj.win32/librecast.vcxproj", "external/recast/proj.win32/librecast.vcxproj.filters", + "external/recast/proj.win8.1-universal/librecast.Shared/librecast.Shared.vcxitems", + "external/recast/proj.win8.1-universal/librecast.Shared/librecast.Shared.vcxitems.filters", + "external/recast/proj.win8.1-universal/librecast.Windows/librecast.Windows.vcxproj", + "external/recast/proj.win8.1-universal/librecast.Windows/librecast.Windows.vcxproj.filters", + "external/recast/proj.win8.1-universal/librecast.WindowsPhone/librecast.WindowsPhone.vcxproj", + "external/recast/proj.win8.1-universal/librecast.WindowsPhone/librecast.WindowsPhone.vcxproj.filters", "external/sqlite3/Android.mk", "external/sqlite3/include/sqlite3.h", "external/sqlite3/include/sqlite3ext.h", diff --git a/templates/cpp-template-default/Classes/AppDelegate.cpp b/templates/cpp-template-default/Classes/AppDelegate.cpp index aa547b34aa..3aa4f443df 100644 --- a/templates/cpp-template-default/Classes/AppDelegate.cpp +++ b/templates/cpp-template-default/Classes/AppDelegate.cpp @@ -3,6 +3,11 @@ USING_NS_CC; +static cocos2d::Size designResolutionSize = cocos2d::Size(480, 320); +static cocos2d::Size smallResolutionSize = cocos2d::Size(480, 320); +static cocos2d::Size mediumResolutionSize = cocos2d::Size(1024, 768); +static cocos2d::Size largeResolutionSize = cocos2d::Size(2048, 1536); + AppDelegate::AppDelegate() { } @@ -44,6 +49,25 @@ bool AppDelegate::applicationDidFinishLaunching() { // set FPS. the default value is 1.0/60 if you don't call this director->setAnimationInterval(1.0 / 60); + // Set the design resolution + glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER); + Size frameSize = glview->getFrameSize(); + // if the frame's height is larger than the height of medium size. + if (frameSize.height > mediumResolutionSize.height) + { + director->setContentScaleFactor(MIN(largeResolutionSize.height/designResolutionSize.height, largeResolutionSize.width/designResolutionSize.width)); + } + // if the frame's height is larger than the height of small size. + else if (frameSize.height > smallResolutionSize.height) + { + director->setContentScaleFactor(MIN(mediumResolutionSize.height/designResolutionSize.height, mediumResolutionSize.width/designResolutionSize.width)); + } + // if the frame's height is smaller than the height of medium size. + else + { + director->setContentScaleFactor(MIN(smallResolutionSize.height/designResolutionSize.height, smallResolutionSize.width/designResolutionSize.width)); + } + register_all_packages(); // create a scene. it's an autorelease object diff --git a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/EnemyController.cpp b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/EnemyController.cpp index f109da7e5e..0f72d1331a 100644 --- a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/EnemyController.cpp +++ b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/EnemyController.cpp @@ -18,9 +18,9 @@ bool EnemyController::init() return true; } -void EnemyController::onEnter() +void EnemyController::onAdd() { - ComController::onEnter(); + ComController::onAdd(); // Determine where to spawn the target along the Y axis Size winSize = Director::getInstance()->getVisibleSize(); float minY = getOwner()->getContentSize().height/2; @@ -52,7 +52,7 @@ void EnemyController::onEnter() _owner->runAction( Sequence::create(actionMove, actionMoveDone, nullptr) ); } -void EnemyController::onExit() +void EnemyController::onRemove() { } diff --git a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/EnemyController.h b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/EnemyController.h index 790f9da45d..542d673cf0 100644 --- a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/EnemyController.h +++ b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/EnemyController.h @@ -14,8 +14,8 @@ protected: public: virtual bool init() override; - virtual void onEnter() override; - virtual void onExit() override; + virtual void onAdd() override; + virtual void onRemove() override; virtual void update(float delta) override; static EnemyController* create(void); diff --git a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/PlayerController.cpp b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/PlayerController.cpp index bd926530d1..d697052ac7 100644 --- a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/PlayerController.cpp +++ b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/PlayerController.cpp @@ -20,13 +20,13 @@ bool PlayerController::init() return true; } -void PlayerController::onEnter() +void PlayerController::onAdd() { - ComController::onEnter(); + ComController::onAdd(); setTouchEnabled(true); } -void PlayerController::onExit() +void PlayerController::onRemove() { setTouchEnabled(false); } diff --git a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/PlayerController.h b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/PlayerController.h index 7848ff1e08..c24e388b7a 100644 --- a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/PlayerController.h +++ b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/PlayerController.h @@ -17,8 +17,8 @@ public: public: virtual bool init() override; - virtual void onEnter() override; - virtual void onExit() override; + virtual void onAdd() override; + virtual void onRemove() override; virtual void update(float delta) override; static PlayerController* create(void); diff --git a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/ProjectileController.cpp b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/ProjectileController.cpp index 29b11b5df7..fd24115998 100644 --- a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/ProjectileController.cpp +++ b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/ProjectileController.cpp @@ -19,9 +19,9 @@ bool ProjectileController::init() return true; } -void ProjectileController::onEnter() +void ProjectileController::onAdd() { - ComController::onEnter(); + ComController::onAdd(); auto winSize = Director::getInstance()->getVisibleSize(); auto origin = Director::getInstance()->getVisibleOrigin(); _owner->setPosition( Vec2(origin.x+20, origin.y+winSize.height/2) ); @@ -30,7 +30,7 @@ void ProjectileController::onEnter() static_cast(com)->getProjectiles().pushBack(_owner); } -void ProjectileController::onExit() +void ProjectileController::onRemove() { } diff --git a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/ProjectileController.h b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/ProjectileController.h index 55cd5cba78..3d3b76db73 100644 --- a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/ProjectileController.h +++ b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/ProjectileController.h @@ -13,8 +13,8 @@ protected: public: virtual bool init() override; - virtual void onEnter() override; - virtual void onExit() override; + virtual void onAdd() override; + virtual void onRemove() override; virtual void update(float delta) override; static ProjectileController* create(void); diff --git a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/SceneController.cpp b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/SceneController.cpp index e7a677109d..835cb99c87 100644 --- a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/SceneController.cpp +++ b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/SceneController.cpp @@ -24,16 +24,16 @@ bool SceneController::init() return true; } -void SceneController::onEnter() +void SceneController::onAdd() { - ComController::onEnter(); + ComController::onAdd(); _fAddTargetTime = 1.0f; static_cast(_owner->getComponent("Audio"))->playBackgroundMusic("background.wav", true); static_cast(_owner->getComponent("CCComAttribute"))->setInt("KillCount", 0); } -void SceneController::onExit() +void SceneController::onRemove() { } diff --git a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/SceneController.h b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/SceneController.h index a4eda36e4f..770f73ee27 100644 --- a/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/SceneController.h +++ b/tests/cpp-tests/Classes/ExtensionsTest/CocoStudioComponentsTest/SceneController.h @@ -13,8 +13,8 @@ protected: public: virtual bool init() override; - virtual void onEnter() override; - virtual void onExit() override; + virtual void onAdd() override; + virtual void onRemove() override; virtual void update(float delta) override; static SceneController* create(); diff --git a/tests/js-tests/src/TextureCacheTest/TextureCacheTest.js b/tests/js-tests/src/TextureCacheTest/TextureCacheTest.js index 7231f0f173..9de4c638c3 100644 --- a/tests/js-tests/src/TextureCacheTest/TextureCacheTest.js +++ b/tests/js-tests/src/TextureCacheTest/TextureCacheTest.js @@ -192,7 +192,6 @@ var RemoteTextureTest = TextureCacheTestBase.extend({ _title:"Remote Texture Test", _subtitle:"", _remoteTex: "http://cn.cocos2d-x.org/image/logo.png", - _sprite : null, onEnter:function () { this._super(); if('opengl' in cc.sys.capabilities && !cc.sys.isNative){ @@ -205,19 +204,21 @@ var RemoteTextureTest = TextureCacheTestBase.extend({ }, startDownload: function() { - cc.textureCache.addImageAsync(this._remoteTex, this.texLoaded, this); + var imageUrlArray = ["http://www.cocos2d-x.org/s/upload/v35.jpg", "http://www.cocos2d-x.org/s/upload/testin.jpg", "http://www.cocos2d-x.org/s/upload/geometry_dash.jpg", "http://cn.cocos2d-x.org/image/logo.png"]; + + for (var i = 0; i < imageUrlArray.length; i++) { + cc.textureCache.addImageAsync(imageUrlArray[i], this.texLoaded, this); + } }, texLoaded: function(texture) { if (texture instanceof cc.Texture2D) { - cc.log("Remote texture loaded: " + this._remoteTex); - if (this._sprite) { - this.removeChild(this._sprite); - } - this._sprite = new cc.Sprite(texture); - this._sprite.x = cc.winSize.width/2; - this._sprite.y = cc.winSize.height/2; - this.addChild(this._sprite); + cc.log("Remote texture loaded"); + + var sprite = new cc.Sprite(texture); + sprite.x = cc.winSize.width/2; + sprite.y = cc.winSize.height/2; + this.addChild(sprite); } else { cc.log("Fail to load remote texture"); diff --git a/tests/js-tests/src/XHRTest/XHRTest.js b/tests/js-tests/src/XHRTest/XHRTest.js index 002da553db..eee0ef2bb9 100644 --- a/tests/js-tests/src/XHRTest/XHRTest.js +++ b/tests/js-tests/src/XHRTest/XHRTest.js @@ -103,9 +103,12 @@ var XHRTestLayer = cc.Layer.extend({ streamXHREventsToLabel(xhr, statusGetLabel, responseLabel, "GET"); // 5 seconds for timeout xhr.timeout = 5000; - + + xhr.setRequestHeader("Accept-Encoding","gzip,deflate"); + //set arguments with ?xxx=xxx&yyy=yyy - xhr.open("GET", "http://httpbin.org/get?show_env=1", true); + xhr.open("GET", "http://geek.csdn.net/news/detail/33683", true); + xhr.send(); }, @@ -129,6 +132,7 @@ var XHRTestLayer = cc.Layer.extend({ streamXHREventsToLabel(xhr, statusPostLabel, responseLabel, "POST"); xhr.open("POST", "http://httpbin.org/post"); + //set Content-type "text/plain;charset=UTF-8" to post plain text xhr.setRequestHeader("Content-Type","text/plain;charset=UTF-8"); xhr.send("plain text message"); diff --git a/tools/cocos2d-console b/tools/cocos2d-console index 3c9958a1d2..4f0fd0a30f 160000 --- a/tools/cocos2d-console +++ b/tools/cocos2d-console @@ -1 +1 @@ -Subproject commit 3c9958a1d2fc1ce1cea582c6bde0efc5a9537654 +Subproject commit 4f0fd0a30f010756e01a0e1b9c341873e981c10a diff --git a/tools/tojs/cocos2dx.ini b/tools/tojs/cocos2dx.ini index ec0ed41801..91bc8f9be9 100644 --- a/tools/tojs/cocos2dx.ini +++ b/tools/tojs/cocos2dx.ini @@ -118,7 +118,7 @@ skip = Node::[^setPosition$ setGLServerState description getUserObject .*UserDat Device::[getTextureDataForText], EventDispatcher::[dispatchCustomEvent], EventCustom::[getUserData setUserData], - Component::[serialize], + Component::[serialize onAdd onRemove update], EventListenerCustom::[init], EventListener::[init], Scene::[getCameras getLights initWithPhysics createWithPhysics getPhysicsWorld getPhysics3DWorld setPhysics3DDebugCamera setNavMesh getNavMesh setNavMeshDebugCamera],