|
52 | 52 | #include <vector>
|
53 | 53 | #include <map>
|
54 | 54 |
|
| 55 | +#include "jsb_cocos2dx_auto.hpp" |
| 56 | +#include "jsb_cocos2dx_extension_auto.hpp" |
| 57 | +#include "jsb_cocos2dx_builder_auto.hpp" |
| 58 | +#include "extension/jsb_cocos2dx_extension_manual.h" |
| 59 | +#include "cocos2d_specifics.hpp" |
| 60 | +#include "cocosbuilder/js_bindings_ccbreader.h" |
| 61 | +#include "localstorage/js_bindings_system_registration.h" |
| 62 | +#include "chipmunk/js_bindings_chipmunk_registration.h" |
| 63 | +#include "jsb_opengl_registration.h" |
| 64 | +#include "jsb_cocos2dx_ui_auto.hpp" |
| 65 | +#include "ui/jsb_cocos2dx_ui_manual.h" |
| 66 | +#include "cocostudio/jsb_cocos2dx_studio_manual.h" |
| 67 | +#include "jsb_cocos2dx_studio_auto.hpp" |
| 68 | + |
55 | 69 | #ifdef ANDROID
|
56 | 70 | #include <android/log.h>
|
57 | 71 | #include <jni/JniHelper.h>
|
@@ -372,14 +386,6 @@ bool JSB_cleanScript(JSContext *cx, uint32_t argc, jsval *vp)
|
372 | 386 | return true;
|
373 | 387 | };
|
374 | 388 |
|
375 |
| -bool JSB_restartGame(JSContext *cx, uint32_t argc, jsval *vp) |
376 |
| -{ |
377 |
| - JS_SET_RVAL(cx, vp, JSVAL_VOID); |
378 |
| - JSB_PRECONDITION2(argc==0, cx, false, "Invalid number of arguments in executeScript"); |
379 |
| - ScriptingCore::getInstance()->reset(); |
380 |
| - return true; |
381 |
| -}; |
382 |
| - |
383 | 389 | bool JSB_core_restartVM(JSContext *cx, uint32_t argc, jsval *vp)
|
384 | 390 | {
|
385 | 391 | JSB_PRECONDITION2(argc==0, cx, false, "Invalid number of arguments in executeScript");
|
@@ -426,7 +432,6 @@ void registerDefaultClasses(JSContext* cx, JSObject* global) {
|
426 | 432 | JS_DefineFunction(cx, global, "__getVersion", JSBCore_version, 0, JSPROP_READONLY | JSPROP_PERMANENT);
|
427 | 433 | JS_DefineFunction(cx, global, "__restartVM", JSB_core_restartVM, 0, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE );
|
428 | 434 | JS_DefineFunction(cx, global, "__cleanScript", JSB_cleanScript, 1, JSPROP_READONLY | JSPROP_PERMANENT);
|
429 |
| - JS_DefineFunction(cx, global, "__restartGame", JSB_restartGame, 0, JSPROP_READONLY | JSPROP_PERMANENT); |
430 | 435 | }
|
431 | 436 |
|
432 | 437 | static void sc_finalize(JSFreeOp *freeOp, JSObject *obj) {
|
@@ -732,23 +737,19 @@ bool ScriptingCore::runScript(const char *path, JSObject* global, JSContext* cx)
|
732 | 737 |
|
733 | 738 | void ScriptingCore::reset()
|
734 | 739 | {
|
735 |
| - auto director = Director::getInstance(); |
736 |
| - FontFNT::purgeCachedData(); |
737 |
| - if (director->getOpenGLView()) |
738 |
| - { |
739 |
| - SpriteFrameCache::getInstance()->removeSpriteFrames(); |
740 |
| - director->getTextureCache()->removeAllTextures(); |
741 |
| - } |
742 |
| - FileUtils::getInstance()->purgeCachedEntries(); |
743 |
| - director->getScheduler()->unscheduleAll(); |
744 |
| - |
745 |
| - cleanup(); |
746 |
| - |
747 |
| - this->addRegisterCallback(registerDefaultClasses); |
748 |
| - this->_runLoop = new SimpleRunLoop(); |
749 |
| - |
750 |
| - Application::getInstance()->run(); |
751 |
| - //start(); |
| 740 | + Director::getInstance()->end(); |
| 741 | +} |
| 742 | + |
| 743 | +void ScriptingCore::rebootVm() |
| 744 | +{ |
| 745 | + Director::getInstance()->restartDirector(); |
| 746 | + // release the objects |
| 747 | + PoolManager::getInstance()->getCurrentPool()->clear(); |
| 748 | + cleanup(); |
| 749 | + this->addRegisterCallback(registerDefaultClasses); |
| 750 | + this->_runLoop = new SimpleRunLoop(); |
| 751 | + |
| 752 | + runGame(); |
752 | 753 | }
|
753 | 754 |
|
754 | 755 | ScriptingCore::~ScriptingCore()
|
@@ -1388,6 +1389,13 @@ int ScriptingCore::sendEvent(ScriptEvent* evt)
|
1388 | 1389 | if (NULL == evt)
|
1389 | 1390 | return 0;
|
1390 | 1391 |
|
| 1392 | + // special type, can't use this code after JSAutoCompartment |
| 1393 | + if (evt->type == kRestartGame) |
| 1394 | + { |
| 1395 | + rebootVm(); |
| 1396 | + return 0; |
| 1397 | + } |
| 1398 | + |
1391 | 1399 | JSAutoCompartment ac(_cx, _global);
|
1392 | 1400 |
|
1393 | 1401 | switch (evt->type)
|
@@ -1705,6 +1713,41 @@ void ScriptingCore::enableDebugger(unsigned int port)
|
1705 | 1713 | }
|
1706 | 1714 | }
|
1707 | 1715 |
|
| 1716 | +void ScriptingCore::register_all() |
| 1717 | +{ |
| 1718 | + addRegisterCallback(register_all_cocos2dx); |
| 1719 | + addRegisterCallback(register_all_cocos2dx_extension); |
| 1720 | + addRegisterCallback(register_cocos2dx_js_extensions); |
| 1721 | + addRegisterCallback(jsb_register_chipmunk); |
| 1722 | + addRegisterCallback(register_all_cocos2dx_extension_manual); |
| 1723 | + addRegisterCallback(register_all_cocos2dx_builder); |
| 1724 | + addRegisterCallback(register_CCBuilderReader); |
| 1725 | + addRegisterCallback(jsb_register_system); |
| 1726 | + addRegisterCallback(JSB_register_opengl); |
| 1727 | + addRegisterCallback(register_all_cocos2dx_ui); |
| 1728 | + addRegisterCallback(register_all_cocos2dx_ui_manual); |
| 1729 | + addRegisterCallback(register_all_cocos2dx_studio); |
| 1730 | + addRegisterCallback(register_all_cocos2dx_studio_manual); |
| 1731 | +} |
| 1732 | + |
| 1733 | +void ScriptingCore::runGame() |
| 1734 | +{ |
| 1735 | + register_all(); |
| 1736 | + |
| 1737 | + start(); |
| 1738 | + |
| 1739 | + runScript("script/jsb_boot.js"); |
| 1740 | + |
| 1741 | +#if defined(COCOS2D_DEBUG) && (COCOS2D_DEBUG > 0) |
| 1742 | + enableDebugger(); |
| 1743 | +#endif |
| 1744 | + |
| 1745 | + auto pEngine = ScriptingCore::getInstance(); |
| 1746 | + ScriptEngineManager::getInstance()->setScriptEngine(pEngine); |
| 1747 | + |
| 1748 | + runScript("main.js"); |
| 1749 | +} |
| 1750 | + |
1708 | 1751 | JSObject* NewGlobalObject(JSContext* cx, bool debug)
|
1709 | 1752 | {
|
1710 | 1753 | JS::CompartmentOptions options;
|
|
0 commit comments