From 90fcfa6c337dfba020314a789d70bdef08e1b4d5 Mon Sep 17 00:00:00 2001 From: minggo Date: Tue, 31 May 2011 14:04:14 +0800 Subject: [PATCH 01/25] support lua --- HelloWorld/AppDelegate.cpp | 12 + HelloWorld/Resource/90001.jpg | Bin 0 -> 116093 bytes HelloWorld/Resource/crop1.png | Bin 0 -> 54653 bytes HelloWorld/Resource/dog1.png | Bin 0 -> 26707 bytes HelloWorld/Resource/hello.lua | 240 + HelloWorld/Resource/land1.png | Bin 0 -> 24242 bytes HelloWorld/Resource/menu1.png | Bin 0 -> 5924 bytes HelloWorld/Resource/menu2.PNG | Bin 0 -> 70705 bytes HelloWorld/win32/HelloWorld.win32.vcproj | 2 +- cocos2d-win32.vc2008.sln | 7 + cocos2dx/Android.mk | 11 +- cocos2dx/CCDirector.cpp | 14 + cocos2dx/CCScheduler.cpp | 121 +- cocos2dx/NdControls/ControlDefine.h | 43 + cocos2dx/NdControls/NdCxList.cpp | 513 + cocos2dx/NdControls/NdCxList.h | 109 + cocos2dx/NdControls/NdCxListItem.cpp | 363 + cocos2dx/NdControls/NdCxListItem.h | 60 + cocos2dx/Ndscript/CCLuaSrcipt.cpp | 535 + cocos2dx/Ndscript/CCLuaSrcipt.h | 175 + cocos2dx/Ndscript/LuaCocos2d.cpp | 74181 ++++++++++++++++ cocos2dx/Ndscript/LuaCocos2d.h | 24 + cocos2dx/actions/CCActionInstant.cpp | 82 + cocos2dx/base_nodes/CCNode.cpp | 32 + cocos2dx/include/CCActionInstant.h | 17 + cocos2dx/include/CCDirector.h | 11 +- cocos2dx/include/CCLayer.h | 6 + cocos2dx/include/CCMenu.h | 4 +- cocos2dx/include/CCMenuItem.h | 4 + cocos2dx/include/CCMutableArray.h | 6 + cocos2dx/include/CCMutableDictionary.h | 6 + cocos2dx/include/CCNode.h | 11 + cocos2dx/include/CCRenderTexture.h | 3 + cocos2dx/include/CCScheduler.h | 17 +- cocos2dx/include/CCTouchDelegateProtocol.h | 95 +- cocos2dx/include/ccConfig.h | 2 + cocos2dx/include/selector_protocol.h | 153 + .../CCLayer.cpp | 23 + cocos2dx/menu_nodes/CCMenu.cpp | 8 + cocos2dx/menu_nodes/CCMenuItem.cpp | 27 +- cocos2dx/platform/CCCommon.h | 7 + cocos2dx/proj.win32/cocos2d-win32.vcproj | 48 +- .../touch_dispatcher/CCTouchDispatcher.cpp | 80 + lua/jni/Android.mk | 62 + lua/jni/Application.mk | 1 + lua/lua.vcproj | 428 + lua/src/Makefile | 182 + lua/src/lapi.c | 1087 + lua/src/lapi.h | 16 + lua/src/lauxlib.c | 652 + lua/src/lauxlib.h | 174 + lua/src/lbaselib.c | 653 + lua/src/lcode.c | 839 + lua/src/lcode.h | 76 + lua/src/ldblib.c | 397 + lua/src/ldebug.c | 638 + lua/src/ldebug.h | 33 + lua/src/ldo.c | 518 + lua/src/ldo.h | 57 + lua/src/ldump.c | 164 + lua/src/lfunc.c | 174 + lua/src/lfunc.h | 34 + lua/src/lgc.c | 711 + lua/src/lgc.h | 110 + lua/src/linit.c | 38 + lua/src/liolib.c | 553 + lua/src/llex.c | 466 + lua/src/llex.h | 81 + lua/src/llimits.h | 128 + lua/src/lmathlib.c | 263 + lua/src/lmem.c | 86 + lua/src/lmem.h | 49 + lua/src/loadlib.c | 666 + lua/src/lobject.c | 214 + lua/src/lobject.h | 381 + lua/src/lopcodes.c | 102 + lua/src/lopcodes.h | 268 + lua/src/loslib.c | 243 + lua/src/lparser.c | 1339 + lua/src/lparser.h | 82 + lua/src/lstate.c | 214 + lua/src/lstate.h | 169 + lua/src/lstring.c | 111 + lua/src/lstring.h | 31 + lua/src/lstrlib.c | 869 + lua/src/ltable.c | 588 + lua/src/ltable.h | 40 + lua/src/ltablib.c | 287 + lua/src/ltm.c | 75 + lua/src/ltm.h | 54 + lua/src/lua.c | 394 + lua/src/lua.h | 388 + lua/src/luac.c | 203 + lua/src/luaconf.h | 763 + lua/src/lualib.h | 53 + lua/src/lundump.c | 227 + lua/src/lundump.h | 36 + lua/src/lvm.c | 763 + lua/src/lvm.h | 36 + lua/src/lzio.c | 82 + lua/src/lzio.h | 67 + lua/src/print.c | 227 + lua/tolua/tolua++.h | 186 + lua/tolua/tolua_event.c | 536 + lua/tolua/tolua_event.h | 24 + lua/tolua/tolua_is.c | 621 + lua/tolua/tolua_map.c | 705 + lua/tolua/tolua_push.c | 171 + lua/tolua/tolua_to.c | 133 + 109 files changed, 97052 insertions(+), 18 deletions(-) create mode 100644 HelloWorld/Resource/90001.jpg create mode 100644 HelloWorld/Resource/crop1.png create mode 100644 HelloWorld/Resource/dog1.png create mode 100644 HelloWorld/Resource/hello.lua create mode 100644 HelloWorld/Resource/land1.png create mode 100644 HelloWorld/Resource/menu1.png create mode 100644 HelloWorld/Resource/menu2.PNG create mode 100644 cocos2dx/NdControls/ControlDefine.h create mode 100644 cocos2dx/NdControls/NdCxList.cpp create mode 100644 cocos2dx/NdControls/NdCxList.h create mode 100644 cocos2dx/NdControls/NdCxListItem.cpp create mode 100644 cocos2dx/NdControls/NdCxListItem.h create mode 100644 cocos2dx/Ndscript/CCLuaSrcipt.cpp create mode 100644 cocos2dx/Ndscript/CCLuaSrcipt.h create mode 100644 cocos2dx/Ndscript/LuaCocos2d.cpp create mode 100644 cocos2dx/Ndscript/LuaCocos2d.h create mode 100644 lua/jni/Android.mk create mode 100644 lua/jni/Application.mk create mode 100644 lua/lua.vcproj create mode 100644 lua/src/Makefile create mode 100644 lua/src/lapi.c create mode 100644 lua/src/lapi.h create mode 100644 lua/src/lauxlib.c create mode 100644 lua/src/lauxlib.h create mode 100644 lua/src/lbaselib.c create mode 100644 lua/src/lcode.c create mode 100644 lua/src/lcode.h create mode 100644 lua/src/ldblib.c create mode 100644 lua/src/ldebug.c create mode 100644 lua/src/ldebug.h create mode 100644 lua/src/ldo.c create mode 100644 lua/src/ldo.h create mode 100644 lua/src/ldump.c create mode 100644 lua/src/lfunc.c create mode 100644 lua/src/lfunc.h create mode 100644 lua/src/lgc.c create mode 100644 lua/src/lgc.h create mode 100644 lua/src/linit.c create mode 100644 lua/src/liolib.c create mode 100644 lua/src/llex.c create mode 100644 lua/src/llex.h create mode 100644 lua/src/llimits.h create mode 100644 lua/src/lmathlib.c create mode 100644 lua/src/lmem.c create mode 100644 lua/src/lmem.h create mode 100644 lua/src/loadlib.c create mode 100644 lua/src/lobject.c create mode 100644 lua/src/lobject.h create mode 100644 lua/src/lopcodes.c create mode 100644 lua/src/lopcodes.h create mode 100644 lua/src/loslib.c create mode 100644 lua/src/lparser.c create mode 100644 lua/src/lparser.h create mode 100644 lua/src/lstate.c create mode 100644 lua/src/lstate.h create mode 100644 lua/src/lstring.c create mode 100644 lua/src/lstring.h create mode 100644 lua/src/lstrlib.c create mode 100644 lua/src/ltable.c create mode 100644 lua/src/ltable.h create mode 100644 lua/src/ltablib.c create mode 100644 lua/src/ltm.c create mode 100644 lua/src/ltm.h create mode 100644 lua/src/lua.c create mode 100644 lua/src/lua.h create mode 100644 lua/src/luac.c create mode 100644 lua/src/luaconf.h create mode 100644 lua/src/lualib.h create mode 100644 lua/src/lundump.c create mode 100644 lua/src/lundump.h create mode 100644 lua/src/lvm.c create mode 100644 lua/src/lvm.h create mode 100644 lua/src/lzio.c create mode 100644 lua/src/lzio.h create mode 100644 lua/src/print.c create mode 100644 lua/tolua/tolua++.h create mode 100644 lua/tolua/tolua_event.c create mode 100644 lua/tolua/tolua_event.h create mode 100644 lua/tolua/tolua_is.c create mode 100644 lua/tolua/tolua_map.c create mode 100644 lua/tolua/tolua_push.c create mode 100644 lua/tolua/tolua_to.c diff --git a/HelloWorld/AppDelegate.cpp b/HelloWorld/AppDelegate.cpp index fcaa8872e00b..27b89036421f 100644 --- a/HelloWorld/AppDelegate.cpp +++ b/HelloWorld/AppDelegate.cpp @@ -83,11 +83,23 @@ bool AppDelegate::applicationDidFinishLaunching() // set FPS. the default value is 1.0/60 if you don't call this pDirector->setAnimationInterval(1.0 / 60); + + +#if CC_ENABLE_LUA + +#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) + CCLuaScriptModule::sharedLuaScriptModule()->executeScriptFile("/sdcard/hello.lua"); +#else + CCLuaScriptModule::sharedLuaScriptModule()->executeScriptFile("./../../HelloWorld/Resource/hello.lua"); +#endif // (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) + +#else // create a scene. it's an autorelease object CCScene *pScene = HelloWorld::scene(); // run pDirector->runWithScene(pScene); +#endif // CC_ENABLE_LUA return true; } diff --git a/HelloWorld/Resource/90001.jpg b/HelloWorld/Resource/90001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d7290c34702d1c6bdb368acb060d93b42d5deff8 GIT binary patch literal 116093 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