From 232f0d598b743c3ed678d1eb8d7a636573fc07e5 Mon Sep 17 00:00:00 2001 From: Dhilan007 Date: Mon, 21 Oct 2013 22:21:11 +0800 Subject: [PATCH] issues #2905:add new vs project --- .../proj.win32/libCocosBuilder.vcxproj | 142 ++ .../libCocosBuilder.vcxproj.filters | 170 ++ .../proj.win32/libCocosBuilder.vcxproj.user | 4 + .../proj.win32/libCocosStudio.vcxproj | 174 ++ .../proj.win32/libCocosStudio.vcxproj.filters | 290 +++ .../proj.win32/libCocosStudio.vcxproj.user | 4 + .../spine/proj.win32/libSpine.vcxproj | 134 ++ .../spine/proj.win32/libSpine.vcxproj.filters | 146 ++ .../spine/proj.win32/libSpine.vcxproj.user | 4 + cocos/gui/proj.win32/libGUI.vcxproj | 136 ++ cocos/gui/proj.win32/libGUI.vcxproj.filters | 159 ++ cocos/gui/proj.win32/libGUI.vcxproj.user | 4 + cocos/network/proj.win32/libNetwork.vcxproj | 131 ++ .../proj.win32/libNetwork.vcxproj.filters | 45 + .../proj.win32/libNetwork.vcxproj.user | 3 + ...s_chipmunk_auto_classes.cpp.REMOVED.git-id | 1 + .../js_bindings_chipmunk_auto_classes.h | 66 + ...dings_chipmunk_auto_classes_registration.h | 29 + ...ings_chipmunk_functions.cpp.REMOVED.git-id | 1 + .../chipmunk/js_bindings_chipmunk_functions.h | 292 +++ ...bindings_chipmunk_functions_registration.h | 285 +++ .../chipmunk/js_bindings_chipmunk_manual.cpp | 1624 +++++++++++++++++ .../chipmunk/js_bindings_chipmunk_manual.h | 103 ++ .../js_bindings_chipmunk_registration.cpp | 67 + .../js_bindings_chipmunk_registration.h | 31 + .../chipmunk/libJSBindingForChipmunk.vcxproj | 121 ++ .../libJSBindingForChipmunk.vcxproj.filters | 47 + .../libJSBindingForChipmunk.vcxproj.user | 6 + .../cocosbuilder/cocosbuilder_specifics.hpp | 23 + .../cocosbuilder/js_bindings_ccbreader.cpp | 324 ++++ .../cocosbuilder/js_bindings_ccbreader.h | 60 + .../libJSBindingForBuilder.vcxproj | 119 ++ .../libJSBindingForBuilder.vcxproj.filters | 37 + .../libJSBindingForBuilder.vcxproj.user | 6 + .../cocostudio/jsb_cocos2dx_studio_manual.cpp | 229 +++ .../cocostudio/jsb_cocos2dx_studio_manual.h | 16 + .../cocostudio/libJSBindingForStudio.vcxproj | 118 ++ .../libJSBindingForStudio.vcxproj.filters | 34 + .../libJSBindingForStudio.vcxproj.user | 6 + .../jsb_cocos2dx_extension_manual.cpp | 799 ++++++++ .../extension/jsb_cocos2dx_extension_manual.h | 16 + .../libJSBindingForExtension.vcxproj | 118 ++ .../libJSBindingForExtension.vcxproj.filters | 34 + .../libJSBindingForExtension.vcxproj.user | 6 + .../js_bindings_system_functions.cpp | 75 + .../js_bindings_system_functions.h | 23 + ...s_bindings_system_functions_registration.h | 15 + .../js_bindings_system_registration.cpp | 62 + .../js_bindings_system_registration.h | 31 + .../libJSBindingForLocalStorage.vcxproj | 116 ++ ...ibJSBindingForLocalStorage.vcxproj.filters | 32 + .../libJSBindingForLocalStorage.vcxproj.user | 6 + .../bindings/network/XMLHTTPRequest.cpp | 847 +++++++++ .../bindings/network/XMLHTTPRequest.h | 112 ++ .../bindings/network/jsb_websocket.cpp | 382 ++++ .../bindings/network/jsb_websocket.h | 34 + .../network/libJSBindingForNetwork.vcxproj | 115 ++ .../libJSBindingForNetwork.vcxproj.filters | 29 + .../libJSBindingForNetwork.vcxproj.user | 6 + .../proj.win32/libLocalStorage.vcxproj | 93 + .../libLocalStorage.vcxproj.filters | 21 + .../proj.win32/libLocalStorage.vcxproj.user | 4 + 62 files changed, 8167 insertions(+) create mode 100644 cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj create mode 100644 cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj.filters create mode 100644 cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj.user create mode 100644 cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj create mode 100644 cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj.filters create mode 100644 cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj.user create mode 100644 cocos/editor-support/spine/proj.win32/libSpine.vcxproj create mode 100644 cocos/editor-support/spine/proj.win32/libSpine.vcxproj.filters create mode 100644 cocos/editor-support/spine/proj.win32/libSpine.vcxproj.user create mode 100644 cocos/gui/proj.win32/libGUI.vcxproj create mode 100644 cocos/gui/proj.win32/libGUI.vcxproj.filters create mode 100644 cocos/gui/proj.win32/libGUI.vcxproj.user create mode 100644 cocos/network/proj.win32/libNetwork.vcxproj create mode 100644 cocos/network/proj.win32/libNetwork.vcxproj.filters create mode 100644 cocos/network/proj.win32/libNetwork.vcxproj.user create mode 100644 cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes.cpp.REMOVED.git-id create mode 100644 cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes.h create mode 100644 cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes_registration.h create mode 100644 cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions.cpp.REMOVED.git-id create mode 100644 cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions.h create mode 100644 cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions_registration.h create mode 100644 cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_manual.cpp create mode 100644 cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_manual.h create mode 100644 cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_registration.cpp create mode 100644 cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_registration.h create mode 100644 cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj create mode 100644 cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj.filters create mode 100644 cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj.user create mode 100644 cocos/scripting/javascript/bindings/cocosbuilder/cocosbuilder_specifics.hpp create mode 100644 cocos/scripting/javascript/bindings/cocosbuilder/js_bindings_ccbreader.cpp create mode 100644 cocos/scripting/javascript/bindings/cocosbuilder/js_bindings_ccbreader.h create mode 100644 cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj create mode 100644 cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj.filters create mode 100644 cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj.user create mode 100644 cocos/scripting/javascript/bindings/cocostudio/jsb_cocos2dx_studio_manual.cpp create mode 100644 cocos/scripting/javascript/bindings/cocostudio/jsb_cocos2dx_studio_manual.h create mode 100644 cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj create mode 100644 cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj.filters create mode 100644 cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj.user create mode 100644 cocos/scripting/javascript/bindings/extension/jsb_cocos2dx_extension_manual.cpp create mode 100644 cocos/scripting/javascript/bindings/extension/jsb_cocos2dx_extension_manual.h create mode 100644 cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj create mode 100644 cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj.filters create mode 100644 cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj.user create mode 100644 cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions.cpp create mode 100644 cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions.h create mode 100644 cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions_registration.h create mode 100644 cocos/scripting/javascript/bindings/localstorage/js_bindings_system_registration.cpp create mode 100644 cocos/scripting/javascript/bindings/localstorage/js_bindings_system_registration.h create mode 100644 cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj create mode 100644 cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj.filters create mode 100644 cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj.user create mode 100644 cocos/scripting/javascript/bindings/network/XMLHTTPRequest.cpp create mode 100644 cocos/scripting/javascript/bindings/network/XMLHTTPRequest.h create mode 100644 cocos/scripting/javascript/bindings/network/jsb_websocket.cpp create mode 100644 cocos/scripting/javascript/bindings/network/jsb_websocket.h create mode 100644 cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj create mode 100644 cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj.filters create mode 100644 cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj.user create mode 100644 cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj create mode 100644 cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj.filters create mode 100644 cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj.user diff --git a/cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj b/cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj new file mode 100644 index 0000000000..2b44d72452 --- /dev/null +++ b/cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj @@ -0,0 +1,142 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {811C0DAB-7B96-4BD3-A154-B7572B58E4AB} + libCocosBuilder + + + + StaticLibrary + true + v110_xp + Unicode + + + StaticLibrary + false + v110_xp + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + + + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + + + + Level3 + Disabled + + + $(EngineRoot);$(EngineRoot)extensions;$(EngineRoot)cocos\audio\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_LIB;COCOS2DXWIN32_EXPORTS;GL_GLEXT_PROTOTYPES;COCOS2D_DEBUG=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + 4267;4251;4244;%(DisableSpecificWarnings) + false + + + true + + + + + Level3 + MaxSpeed + true + true + + + $(EngineRoot);$(EngineRoot)extensions;$(EngineRoot)cocos\audio\include;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;_LIB;COCOS2DXWIN32_EXPORTS;GL_GLEXT_PROTOTYPES;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj.filters b/cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj.filters new file mode 100644 index 0000000000..8dfedcc4bf --- /dev/null +++ b/cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj.filters @@ -0,0 +1,170 @@ + + + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj.user b/cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj.user new file mode 100644 index 0000000000..a375ae3527 --- /dev/null +++ b/cocos/editor-support/cocosbuilder/proj.win32/libCocosBuilder.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj b/cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj new file mode 100644 index 0000000000..d52ce8d931 --- /dev/null +++ b/cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj @@ -0,0 +1,174 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {B57CF53F-2E49-4031-9822-047CC0E6BDE2} + libCocosStudio + + + + StaticLibrary + true + v110_xp + Unicode + + + StaticLibrary + false + v110_xp + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + + + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + + + + Level3 + Disabled + + + $(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\editor-support;$(EngineRoot)external;$(EngineRoot)external\tinyxml2;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)extensions;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_LIB;COCOS2DXWIN32_EXPORTS;GL_GLEXT_PROTOTYPES;COCOS2D_DEBUG=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + 4267;4251;4244;%(DisableSpecificWarnings) + false + + + true + + + + + Level3 + MaxSpeed + true + true + true + WIN32;_WINDOWS;_LIB;COCOS2DXWIN32_EXPORTS;GL_GLEXT_PROTOTYPES;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\editor-support;$(EngineRoot)external;$(EngineRoot)external\tinyxml2;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)extensions;%(AdditionalIncludeDirectories) + + + true + true + true + + + + + + \ No newline at end of file diff --git a/cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj.filters b/cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj.filters new file mode 100644 index 0000000000..10053f03e2 --- /dev/null +++ b/cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj.filters @@ -0,0 +1,290 @@ + + + + + {d793b86c-0905-4c9b-b6bc-161e351c9eb2} + + + {855f2366-3429-4f77-a080-a41a39c99270} + + + {1a8c6b14-fb28-4485-8417-9b6838fbc4ef} + + + {42f1ce3f-46ab-4a16-a96e-9eb076c873f7} + + + {f8271f80-1663-4425-91c8-7365ec3af017} + + + {48f28446-ffe4-4aa1-a34c-8968c3367ae6} + + + {ad9b4fd1-dc17-4704-9c60-7709eb916f13} + + + {55c682b3-7a48-4fab-ad5a-eb979f3c305e} + + + {c6464479-e0ab-4afc-96fc-1ffc73e40232} + + + {023e3440-1259-4981-ba54-24390d1df447} + + + {e8d09ad5-8816-4724-a10b-04263868ed7c} + + + + + action + + + action + + + action + + + action + + + action + + + components + + + components + + + components + + + components + + + components + + + json + + + json + + + reader + + + reader + + + armature\animation + + + armature\animation + + + armature\animation + + + armature\datas + + + armature\display + + + armature\display + + + armature\display + + + armature\display + + + armature\display + + + armature\utils + + + armature\utils + + + armature\utils + + + armature\utils + + + armature\utils + + + armature\utils + + + armature\utils + + + armature\physics + + + armature + + + armature + + + json\libjson + + + json\libjson + + + json\libjson + + + + + action + + + action + + + action + + + action + + + action + + + components + + + components + + + components + + + components + + + components + + + json + + + json + + + reader + + + reader + + + armature\animation + + + armature\animation + + + armature\animation + + + armature\datas + + + armature\display + + + armature\display + + + armature\display + + + armature\display + + + armature\display + + + armature\utils + + + armature\utils + + + armature\utils + + + armature\utils + + + armature\utils + + + armature\utils + + + armature\utils + + + armature\physics + + + armature + + + armature + + + json\libjson + + + json\libjson + + + json\libjson + + + json\libjson + + + json\libjson + + + json\libjson + + + json\libjson + + + json\libjson + + + json\libjson + + + + + json\libjson + + + json\libjson + + + json\libjson + + + json\libjson + + + \ No newline at end of file diff --git a/cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj.user b/cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj.user new file mode 100644 index 0000000000..a375ae3527 --- /dev/null +++ b/cocos/editor-support/cocostudio/proj.win32/libCocosStudio.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/cocos/editor-support/spine/proj.win32/libSpine.vcxproj b/cocos/editor-support/spine/proj.win32/libSpine.vcxproj new file mode 100644 index 0000000000..b4fc436abf --- /dev/null +++ b/cocos/editor-support/spine/proj.win32/libSpine.vcxproj @@ -0,0 +1,134 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {B7C2A162-DEC9-4418-972E-240AB3CBFCAE} + libSpine + + + + StaticLibrary + true + v110_xp + Unicode + + + StaticLibrary + false + v110_xp + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + + + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + + + + Level3 + Disabled + + + $(EngineRoot);$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\editor-support;$(EngineRoot)extensions;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_LIB;COCOS2DXWIN32_EXPORTS;GL_GLEXT_PROTOTYPES;COCOS2D_DEBUG=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + 4267;4251;4244;%(DisableSpecificWarnings) + false + + + true + + + + + Level3 + MaxSpeed + true + true + + + WIN32;_WINDOWS;_LIB;COCOS2DXWIN32_EXPORTS;GL_GLEXT_PROTOTYPES;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(EngineRoot);$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\editor-support;$(EngineRoot)extensions;%(AdditionalIncludeDirectories) + + + true + true + true + + + + + + \ No newline at end of file diff --git a/cocos/editor-support/spine/proj.win32/libSpine.vcxproj.filters b/cocos/editor-support/spine/proj.win32/libSpine.vcxproj.filters new file mode 100644 index 0000000000..d6ed5b1506 --- /dev/null +++ b/cocos/editor-support/spine/proj.win32/libSpine.vcxproj.filters @@ -0,0 +1,146 @@ + + + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/cocos/editor-support/spine/proj.win32/libSpine.vcxproj.user b/cocos/editor-support/spine/proj.win32/libSpine.vcxproj.user new file mode 100644 index 0000000000..a375ae3527 --- /dev/null +++ b/cocos/editor-support/spine/proj.win32/libSpine.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/cocos/gui/proj.win32/libGUI.vcxproj b/cocos/gui/proj.win32/libGUI.vcxproj new file mode 100644 index 0000000000..1e483d4b85 --- /dev/null +++ b/cocos/gui/proj.win32/libGUI.vcxproj @@ -0,0 +1,136 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {7E06E92C-537A-442B-9E4A-4761C84F8A1A} + libGUI + + + + StaticLibrary + true + v110_xp + Unicode + + + StaticLibrary + false + v110_xp + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + + + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + + + + Level3 + Disabled + + + $(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\editor-support;$(EngineRoot)external;$(EngineRoot)extensions;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_LIB;COCOS2DXWIN32_EXPORTS;GL_GLEXT_PROTOTYPES;COCOS2D_DEBUG=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + 4267;4251;4244;%(DisableSpecificWarnings) + false + + + true + + + + + Level3 + MaxSpeed + true + true + + + WIN32;_WINDOWS;_LIB;COCOS2DXWIN32_EXPORTS;GL_GLEXT_PROTOTYPES;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\editor-support;$(EngineRoot)external;$(EngineRoot)extensions;%(AdditionalIncludeDirectories) + + + true + true + true + + + + + + \ No newline at end of file diff --git a/cocos/gui/proj.win32/libGUI.vcxproj.filters b/cocos/gui/proj.win32/libGUI.vcxproj.filters new file mode 100644 index 0000000000..12f0d385ab --- /dev/null +++ b/cocos/gui/proj.win32/libGUI.vcxproj.filters @@ -0,0 +1,159 @@ + + + + + {e31ab7d3-b8b2-467f-9e08-fd5fe168b491} + + + {f9d13563-9e5e-4b35-b0e7-d41f587efa42} + + + {ed8a2ae0-5690-4d0d-829b-7c07164c0597} + + + {5f6e9e52-fbe7-4073-ac71-98632f9e6781} + + + {b59b178a-b7e0-4826-ba07-44c46cd29a10} + + + + + UIWidgets\ScrollWidget + + + UIWidgets\ScrollWidget + + + UIWidgets\ScrollWidget + + + UIWidgets\ScrollWidget + + + UIWidgets\ScrollWidget + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + System + + + System + + + System + + + System + + + Layouts + + + Layouts + + + Layouts + + + BaseClasses + + + BaseClasses + + + + + UIWidgets\ScrollWidget + + + UIWidgets\ScrollWidget + + + UIWidgets\ScrollWidget + + + UIWidgets\ScrollWidget + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + UIWidgets + + + System + + + System + + + System + + + System + + + Layouts + + + Layouts + + + Layouts + + + BaseClasses + + + BaseClasses + + + \ No newline at end of file diff --git a/cocos/gui/proj.win32/libGUI.vcxproj.user b/cocos/gui/proj.win32/libGUI.vcxproj.user new file mode 100644 index 0000000000..a375ae3527 --- /dev/null +++ b/cocos/gui/proj.win32/libGUI.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/cocos/network/proj.win32/libNetwork.vcxproj b/cocos/network/proj.win32/libNetwork.vcxproj new file mode 100644 index 0000000000..088538dfed --- /dev/null +++ b/cocos/network/proj.win32/libNetwork.vcxproj @@ -0,0 +1,131 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + libNetwork + {DF2638C0-8128-4847-867C-6EAFE3DEE7B5} + network.win32 + Win32Proj + + + + StaticLibrary + Unicode + v100 + v110 + v110_xp + + + StaticLibrary + NotSet + v100 + v110 + v110_xp + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + false + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + false + AllRules.ruleset + + + AllRules.ruleset + + + + + $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;$(LibraryPath) + + + $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;$(LibraryPath) + + + + Disabled + $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\include;..\Include;$(EngineRoot)cocos;$(EngineRoot)external\websockets\include\win32;$(EngineRoot)external\curl\include\win32;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + false + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + EditAndContinue + 4251 + true + + + winmm.lib;libcocos2d.lib;%(AdditionalDependencies) + $(OutDir)$(ProjectName).dll + true + Windows + $(TargetDir)$(TargetName).lib + MachineX86 + $(OutDir) + + + + + $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\include;..\Include;$(EngineRoot)cocos;$(EngineRoot)external\websockets\include\win32;$(EngineRoot)external\curl\include\win32;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreadedDLL + + + Level3 + ProgramDatabase + 4251 + true + + + winmm.lib;libcocos2d.lib;%(AdditionalDependencies) + $(OutDir)$(ProjectName).dll + true + Windows + true + true + $(TargetDir)$(TargetName).lib + MachineX86 + $(OutDir) + + + + + + \ No newline at end of file diff --git a/cocos/network/proj.win32/libNetwork.vcxproj.filters b/cocos/network/proj.win32/libNetwork.vcxproj.filters new file mode 100644 index 0000000000..bbfe567f42 --- /dev/null +++ b/cocos/network/proj.win32/libNetwork.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/cocos/network/proj.win32/libNetwork.vcxproj.user b/cocos/network/proj.win32/libNetwork.vcxproj.user new file mode 100644 index 0000000000..ace9a86acb --- /dev/null +++ b/cocos/network/proj.win32/libNetwork.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes.cpp.REMOVED.git-id b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes.cpp.REMOVED.git-id new file mode 100644 index 0000000000..c8c345c32c --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes.cpp.REMOVED.git-id @@ -0,0 +1 @@ +6558be4f421be9227dc4fabf1b682d479825bd18 \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes.h b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes.h new file mode 100644 index 0000000000..42c8840236 --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes.h @@ -0,0 +1,66 @@ +/* +* AUTOGENERATED FILE. DO NOT EDIT IT +* Generated by "generate_js_bindings.py -c chipmunk_jsb.ini" on 2012-11-07 +* Script version: v0.3 +*/ +#include "js_bindings_config.h" +#ifdef JSB_INCLUDE_CHIPMUNK + +#include "js_bindings_chipmunk_manual.h" +extern JSObject *JSB_cpConstraint_object; +extern JSClass *JSB_cpConstraint_class; +void JSB_cpConstraint_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpGrooveJoint_object; +extern JSClass *JSB_cpGrooveJoint_class; +void JSB_cpGrooveJoint_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpSimpleMotor_object; +extern JSClass *JSB_cpSimpleMotor_class; +void JSB_cpSimpleMotor_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpPivotJoint_object; +extern JSClass *JSB_cpPivotJoint_class; +void JSB_cpPivotJoint_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpPinJoint_object; +extern JSClass *JSB_cpPinJoint_class; +void JSB_cpPinJoint_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpSlideJoint_object; +extern JSClass *JSB_cpSlideJoint_class; +void JSB_cpSlideJoint_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpGearJoint_object; +extern JSClass *JSB_cpGearJoint_class; +void JSB_cpGearJoint_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpDampedRotarySpring_object; +extern JSClass *JSB_cpDampedRotarySpring_class; +void JSB_cpDampedRotarySpring_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpDampedSpring_object; +extern JSClass *JSB_cpDampedSpring_class; +void JSB_cpDampedSpring_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpRatchetJoint_object; +extern JSClass *JSB_cpRatchetJoint_class; +void JSB_cpRatchetJoint_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpRotaryLimitJoint_object; +extern JSClass *JSB_cpRotaryLimitJoint_class; +void JSB_cpRotaryLimitJoint_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpArbiter_object; +extern JSClass *JSB_cpArbiter_class; +void JSB_cpArbiter_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpSpace_object; +extern JSClass *JSB_cpSpace_class; +void JSB_cpSpace_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpBody_object; +extern JSClass *JSB_cpBody_class; +void JSB_cpBody_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpShape_object; +extern JSClass *JSB_cpShape_class; +void JSB_cpShape_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpCircleShape_object; +extern JSClass *JSB_cpCircleShape_class; +void JSB_cpCircleShape_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpSegmentShape_object; +extern JSClass *JSB_cpSegmentShape_class; +void JSB_cpSegmentShape_createClass(JSContext *cx, JSObject* globalObj, const char* name ); +extern JSObject *JSB_cpPolyShape_object; +extern JSClass *JSB_cpPolyShape_class; +void JSB_cpPolyShape_createClass(JSContext *cx, JSObject* globalObj, const char* name ); + + +#endif // JSB_INCLUDE_CHIPMUNK diff --git a/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes_registration.h b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes_registration.h new file mode 100644 index 0000000000..da26c49bb3 --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_auto_classes_registration.h @@ -0,0 +1,29 @@ +/* +* AUTOGENERATED FILE. DO NOT EDIT IT +* Generated by "generate_js_bindings.py -c chipmunk_jsb.ini" on 2012-11-07 +* Script version: v0.3 +*/ +#include "js_bindings_config.h" +#ifdef JSB_INCLUDE_CHIPMUNK + +JSB_cpConstraint_createClass(_cx, chipmunk, "Constraint"); +JSB_cpGrooveJoint_createClass(_cx, chipmunk, "GrooveJoint"); +JSB_cpSimpleMotor_createClass(_cx, chipmunk, "SimpleMotor"); +JSB_cpPivotJoint_createClass(_cx, chipmunk, "PivotJoint"); +JSB_cpPinJoint_createClass(_cx, chipmunk, "PinJoint"); +JSB_cpSlideJoint_createClass(_cx, chipmunk, "SlideJoint"); +JSB_cpGearJoint_createClass(_cx, chipmunk, "GearJoint"); +JSB_cpDampedRotarySpring_createClass(_cx, chipmunk, "DampedRotarySpring"); +JSB_cpDampedSpring_createClass(_cx, chipmunk, "DampedSpring"); +JSB_cpRatchetJoint_createClass(_cx, chipmunk, "RatchetJoint"); +JSB_cpRotaryLimitJoint_createClass(_cx, chipmunk, "RotaryLimitJoint"); +JSB_cpArbiter_createClass(_cx, chipmunk, "Arbiter"); +JSB_cpSpace_createClass(_cx, chipmunk, "Space"); +JSB_cpBody_createClass(_cx, chipmunk, "Body"); +JSB_cpShape_createClass(_cx, chipmunk, "Shape"); +JSB_cpCircleShape_createClass(_cx, chipmunk, "CircleShape"); +JSB_cpSegmentShape_createClass(_cx, chipmunk, "SegmentShape"); +JSB_cpPolyShape_createClass(_cx, chipmunk, "PolyShape"); + + +#endif // JSB_INCLUDE_CHIPMUNK diff --git a/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions.cpp.REMOVED.git-id b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions.cpp.REMOVED.git-id new file mode 100644 index 0000000000..5cf2a4495d --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions.cpp.REMOVED.git-id @@ -0,0 +1 @@ +1c5eb9cd58c82de77374cdfa5c9ff647cc8b2f02 \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions.h b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions.h new file mode 100644 index 0000000000..accf523d5e --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions.h @@ -0,0 +1,292 @@ +/* +* AUTOGENERATED FILE. DO NOT EDIT IT +* Generated by "generate_js_bindings.py -c chipmunk_jsb.ini" on 2012-11-07 +* Script version: v0.3 +*/ +#include "js_bindings_config.h" +#ifdef JSB_INCLUDE_CHIPMUNK +#include "js_bindings_chipmunk_manual.h" + +#ifdef __cplusplus +extern "C" { +#endif +JSBool JSB_cpArbiterGetCount(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterGetDepth(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterGetElasticity(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterGetFriction(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterGetNormal(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterGetPoint(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterGetSurfaceVelocity(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterIgnore(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterIsFirstContact(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterSetElasticity(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterSetFriction(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterSetSurfaceVelocity(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterTotalImpulse(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterTotalImpulseWithFriction(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterTotalKE(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpAreaForCircle(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpAreaForSegment(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBArea(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBClampVect(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBContainsBB(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBContainsVect(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBExpand(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBIntersects(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBIntersectsSegment(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBMerge(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBMergedArea(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBNewForCircle(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBSegmentQuery(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBBWrapVect(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyActivate(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyActivateStatic(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyApplyForce(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyApplyImpulse(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyDestroy(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyFree(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetAngVel(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetAngVelLimit(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetAngle(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetForce(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetMass(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetMoment(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetPos(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetRot(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetSpace(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetTorque(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetVel(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetVelAtLocalPoint(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetVelAtWorldPoint(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyGetVelLimit(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyInit(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyInitStatic(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyIsRogue(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyIsSleeping(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyIsStatic(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyKineticEnergy(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyLocal2World(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyNewStatic(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyResetForces(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySetAngVel(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySetAngVelLimit(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySetAngle(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySetForce(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySetMass(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySetMoment(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySetPos(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySetTorque(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySetVel(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySetVelLimit(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySleep(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySleepWithGroup(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyUpdatePosition(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyUpdateVelocity(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodyWorld2Local(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBoxShapeNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBoxShapeNew2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpCircleShapeGetOffset(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpCircleShapeGetRadius(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpCircleShapeNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintActivateBodies(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintDestroy(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintFree(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintGetA(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintGetB(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintGetErrorBias(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintGetImpulse(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintGetMaxBias(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintGetMaxForce(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintGetSpace(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintSetErrorBias(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintSetMaxBias(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpConstraintSetMaxForce(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedRotarySpringGetDamping(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedRotarySpringGetRestAngle(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedRotarySpringGetStiffness(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedRotarySpringNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedRotarySpringSetDamping(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedRotarySpringSetRestAngle(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedRotarySpringSetStiffness(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedSpringGetAnchr1(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedSpringGetAnchr2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedSpringGetDamping(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedSpringGetRestLength(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedSpringGetStiffness(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedSpringNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedSpringSetAnchr1(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedSpringSetAnchr2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedSpringSetDamping(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedSpringSetRestLength(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpDampedSpringSetStiffness(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGearJointGetPhase(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGearJointGetRatio(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGearJointNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGearJointSetPhase(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGearJointSetRatio(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGrooveJointGetAnchr2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGrooveJointGetGrooveA(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGrooveJointGetGrooveB(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGrooveJointNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGrooveJointSetAnchr2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGrooveJointSetGrooveA(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpGrooveJointSetGrooveB(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpInitChipmunk(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpMomentForBox(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpMomentForBox2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpMomentForCircle(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpMomentForSegment(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPinJointGetAnchr1(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPinJointGetAnchr2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPinJointGetDist(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPinJointNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPinJointSetAnchr1(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPinJointSetAnchr2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPinJointSetDist(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPivotJointGetAnchr1(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPivotJointGetAnchr2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPivotJointNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPivotJointNew2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPivotJointSetAnchr1(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPivotJointSetAnchr2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPolyShapeGetNumVerts(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpPolyShapeGetVert(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRatchetJointGetAngle(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRatchetJointGetPhase(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRatchetJointGetRatchet(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRatchetJointNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRatchetJointSetAngle(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRatchetJointSetPhase(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRatchetJointSetRatchet(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpResetShapeIdCounter(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRotaryLimitJointGetMax(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRotaryLimitJointGetMin(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRotaryLimitJointNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRotaryLimitJointSetMax(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRotaryLimitJointSetMin(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSegmentShapeGetA(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSegmentShapeGetB(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSegmentShapeGetNormal(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSegmentShapeGetRadius(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSegmentShapeNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSegmentShapeSetNeighbors(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeCacheBB(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeDestroy(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeFree(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeGetBB(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeGetBody(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeGetCollisionType(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeGetElasticity(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeGetFriction(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeGetGroup(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeGetLayers(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeGetSensor(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeGetSpace(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeGetSurfaceVelocity(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapePointQuery(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeSetBody(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeSetCollisionType(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeSetElasticity(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeSetFriction(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeSetGroup(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeSetLayers(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeSetSensor(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeSetSurfaceVelocity(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpShapeUpdate(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSimpleMotorGetRate(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSimpleMotorNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSimpleMotorSetRate(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSlideJointGetAnchr1(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSlideJointGetAnchr2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSlideJointGetMax(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSlideJointGetMin(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSlideJointNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSlideJointSetAnchr1(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSlideJointSetAnchr2(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSlideJointSetMax(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSlideJointSetMin(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceActivateShapesTouchingShape(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceAddBody(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceAddConstraint(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceAddShape(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceAddStaticShape(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceContainsBody(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceContainsConstraint(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceContainsShape(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceDestroy(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceFree(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceGetCollisionBias(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceGetCollisionPersistence(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceGetCollisionSlop(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceGetCurrentTimeStep(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceGetDamping(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceGetEnableContactGraph(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceGetGravity(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceGetIdleSpeedThreshold(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceGetIterations(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceGetSleepTimeThreshold(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceGetStaticBody(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceInit(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceIsLocked(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceNew(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpacePointQueryFirst(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceReindexShape(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceReindexShapesForBody(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceReindexStatic(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceRemoveBody(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceRemoveConstraint(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceRemoveShape(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceRemoveStaticShape(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceSetCollisionBias(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceSetCollisionPersistence(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceSetCollisionSlop(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceSetDamping(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceSetEnableContactGraph(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceSetGravity(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceSetIdleSpeedThreshold(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceSetIterations(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceSetSleepTimeThreshold(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceStep(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceUseSpatialHash(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpfabs(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpfclamp(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpfclamp01(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpflerp(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpflerpconst(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpfmax(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpfmin(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvadd(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvclamp(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvcross(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvdist(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvdistsq(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvdot(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpveql(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvforangle(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvlength(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvlengthsq(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvlerp(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvlerpconst(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvmult(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvnear(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvneg(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvnormalize(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvnormalize_safe(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvperp(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvproject(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvrotate(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvrperp(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvslerp(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvslerpconst(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvsub(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvtoangle(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpvunrotate(JSContext *cx, uint32_t argc, jsval *vp); + +#ifdef __cplusplus +} +#endif + + +#endif // JSB_INCLUDE_CHIPMUNK diff --git a/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions_registration.h b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions_registration.h new file mode 100644 index 0000000000..2d84087c28 --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_functions_registration.h @@ -0,0 +1,285 @@ +/* +* AUTOGENERATED FILE. DO NOT EDIT IT +* Generated by "generate_js_bindings.py -c chipmunk_jsb.ini" on 2012-10-18 +* Script version: v0.3 +*/ +#include "js_bindings_config.h" +#ifdef JSB_INCLUDE_CHIPMUNK + +#include "js_bindings_chipmunk_manual.h" +JS_DefineFunction(_cx, chipmunk, "arbiterGetCount", JSB_cpArbiterGetCount, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterGetDepth", JSB_cpArbiterGetDepth, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterGetElasticity", JSB_cpArbiterGetElasticity, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterGetFriction", JSB_cpArbiterGetFriction, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterGetNormal", JSB_cpArbiterGetNormal, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterGetPoint", JSB_cpArbiterGetPoint, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterGetSurfaceVelocity", JSB_cpArbiterGetSurfaceVelocity, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterIgnore", JSB_cpArbiterIgnore, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterIsFirstContact", JSB_cpArbiterIsFirstContact, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterSetElasticity", JSB_cpArbiterSetElasticity, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterSetFriction", JSB_cpArbiterSetFriction, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterSetSurfaceVelocity", JSB_cpArbiterSetSurfaceVelocity, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterTotalImpulse", JSB_cpArbiterTotalImpulse, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterTotalImpulseWithFriction", JSB_cpArbiterTotalImpulseWithFriction, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "arbiterTotalKE", JSB_cpArbiterTotalKE, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "areaForCircle", JSB_cpAreaForCircle, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "areaForSegment", JSB_cpAreaForSegment, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBArea", JSB_cpBBArea, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBClampVect", JSB_cpBBClampVect, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBContainsBB", JSB_cpBBContainsBB, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBContainsVect", JSB_cpBBContainsVect, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBExpand", JSB_cpBBExpand, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBIntersects", JSB_cpBBIntersects, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBIntersectsSegment", JSB_cpBBIntersectsSegment, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBMerge", JSB_cpBBMerge, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBMergedArea", JSB_cpBBMergedArea, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBNew", JSB_cpBBNew, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBNewForCircle", JSB_cpBBNewForCircle, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBSegmentQuery", JSB_cpBBSegmentQuery, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bBWrapVect", JSB_cpBBWrapVect, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyActivate", JSB_cpBodyActivate, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyActivateStatic", JSB_cpBodyActivateStatic, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyApplyForce", JSB_cpBodyApplyForce, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyApplyImpulse", JSB_cpBodyApplyImpulse, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyDestroy", JSB_cpBodyDestroy, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyFree", JSB_cpBodyFree, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetAngVel", JSB_cpBodyGetAngVel, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetAngVelLimit", JSB_cpBodyGetAngVelLimit, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetAngle", JSB_cpBodyGetAngle, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetForce", JSB_cpBodyGetForce, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetMass", JSB_cpBodyGetMass, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetMoment", JSB_cpBodyGetMoment, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetPos", JSB_cpBodyGetPos, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetRot", JSB_cpBodyGetRot, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetSpace", JSB_cpBodyGetSpace, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetTorque", JSB_cpBodyGetTorque, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetVel", JSB_cpBodyGetVel, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetVelAtLocalPoint", JSB_cpBodyGetVelAtLocalPoint, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetVelAtWorldPoint", JSB_cpBodyGetVelAtWorldPoint, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyGetVelLimit", JSB_cpBodyGetVelLimit, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyInit", JSB_cpBodyInit, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyInitStatic", JSB_cpBodyInitStatic, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyIsRogue", JSB_cpBodyIsRogue, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyIsSleeping", JSB_cpBodyIsSleeping, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyIsStatic", JSB_cpBodyIsStatic, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyKineticEnergy", JSB_cpBodyKineticEnergy, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyLocal2World", JSB_cpBodyLocal2World, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyNew", JSB_cpBodyNew, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyNewStatic", JSB_cpBodyNewStatic, 0, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyResetForces", JSB_cpBodyResetForces, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySetAngVel", JSB_cpBodySetAngVel, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySetAngVelLimit", JSB_cpBodySetAngVelLimit, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySetAngle", JSB_cpBodySetAngle, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySetForce", JSB_cpBodySetForce, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySetMass", JSB_cpBodySetMass, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySetMoment", JSB_cpBodySetMoment, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySetPos", JSB_cpBodySetPos, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySetTorque", JSB_cpBodySetTorque, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySetVel", JSB_cpBodySetVel, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySetVelLimit", JSB_cpBodySetVelLimit, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySleep", JSB_cpBodySleep, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodySleepWithGroup", JSB_cpBodySleepWithGroup, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyUpdatePosition", JSB_cpBodyUpdatePosition, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyUpdateVelocity", JSB_cpBodyUpdateVelocity, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "bodyWorld2Local", JSB_cpBodyWorld2Local, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "boxShapeNew", JSB_cpBoxShapeNew, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "boxShapeNew2", JSB_cpBoxShapeNew2, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "circleShapeGetOffset", JSB_cpCircleShapeGetOffset, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "circleShapeGetRadius", JSB_cpCircleShapeGetRadius, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "circleShapeNew", JSB_cpCircleShapeNew, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintActivateBodies", JSB_cpConstraintActivateBodies, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintDestroy", JSB_cpConstraintDestroy, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintFree", JSB_cpConstraintFree, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintGetA", JSB_cpConstraintGetA, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintGetB", JSB_cpConstraintGetB, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintGetErrorBias", JSB_cpConstraintGetErrorBias, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintGetImpulse", JSB_cpConstraintGetImpulse, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintGetMaxBias", JSB_cpConstraintGetMaxBias, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintGetMaxForce", JSB_cpConstraintGetMaxForce, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintGetSpace", JSB_cpConstraintGetSpace, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintSetErrorBias", JSB_cpConstraintSetErrorBias, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintSetMaxBias", JSB_cpConstraintSetMaxBias, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "constraintSetMaxForce", JSB_cpConstraintSetMaxForce, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedRotarySpringGetDamping", JSB_cpDampedRotarySpringGetDamping, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedRotarySpringGetRestAngle", JSB_cpDampedRotarySpringGetRestAngle, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedRotarySpringGetStiffness", JSB_cpDampedRotarySpringGetStiffness, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedRotarySpringNew", JSB_cpDampedRotarySpringNew, 5, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedRotarySpringSetDamping", JSB_cpDampedRotarySpringSetDamping, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedRotarySpringSetRestAngle", JSB_cpDampedRotarySpringSetRestAngle, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedRotarySpringSetStiffness", JSB_cpDampedRotarySpringSetStiffness, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedSpringGetAnchr1", JSB_cpDampedSpringGetAnchr1, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedSpringGetAnchr2", JSB_cpDampedSpringGetAnchr2, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedSpringGetDamping", JSB_cpDampedSpringGetDamping, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedSpringGetRestLength", JSB_cpDampedSpringGetRestLength, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedSpringGetStiffness", JSB_cpDampedSpringGetStiffness, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedSpringNew", JSB_cpDampedSpringNew, 7, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedSpringSetAnchr1", JSB_cpDampedSpringSetAnchr1, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedSpringSetAnchr2", JSB_cpDampedSpringSetAnchr2, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedSpringSetDamping", JSB_cpDampedSpringSetDamping, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedSpringSetRestLength", JSB_cpDampedSpringSetRestLength, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "dampedSpringSetStiffness", JSB_cpDampedSpringSetStiffness, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "gearJointGetPhase", JSB_cpGearJointGetPhase, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "gearJointGetRatio", JSB_cpGearJointGetRatio, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "gearJointNew", JSB_cpGearJointNew, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "gearJointSetPhase", JSB_cpGearJointSetPhase, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "gearJointSetRatio", JSB_cpGearJointSetRatio, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "grooveJointGetAnchr2", JSB_cpGrooveJointGetAnchr2, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "grooveJointGetGrooveA", JSB_cpGrooveJointGetGrooveA, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "grooveJointGetGrooveB", JSB_cpGrooveJointGetGrooveB, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "grooveJointNew", JSB_cpGrooveJointNew, 5, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "grooveJointSetAnchr2", JSB_cpGrooveJointSetAnchr2, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "grooveJointSetGrooveA", JSB_cpGrooveJointSetGrooveA, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "grooveJointSetGrooveB", JSB_cpGrooveJointSetGrooveB, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "initChipmunk", JSB_cpInitChipmunk, 0, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "momentForBox", JSB_cpMomentForBox, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "momentForBox2", JSB_cpMomentForBox2, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "momentForCircle", JSB_cpMomentForCircle, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "momentForSegment", JSB_cpMomentForSegment, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pinJointGetAnchr1", JSB_cpPinJointGetAnchr1, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pinJointGetAnchr2", JSB_cpPinJointGetAnchr2, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pinJointGetDist", JSB_cpPinJointGetDist, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pinJointNew", JSB_cpPinJointNew, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pinJointSetAnchr1", JSB_cpPinJointSetAnchr1, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pinJointSetAnchr2", JSB_cpPinJointSetAnchr2, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pinJointSetDist", JSB_cpPinJointSetDist, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pivotJointGetAnchr1", JSB_cpPivotJointGetAnchr1, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pivotJointGetAnchr2", JSB_cpPivotJointGetAnchr2, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pivotJointNew", JSB_cpPivotJointNew, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pivotJointNew2", JSB_cpPivotJointNew2, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pivotJointSetAnchr1", JSB_cpPivotJointSetAnchr1, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "pivotJointSetAnchr2", JSB_cpPivotJointSetAnchr2, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "polyShapeGetNumVerts", JSB_cpPolyShapeGetNumVerts, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "polyShapeGetVert", JSB_cpPolyShapeGetVert, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "ratchetJointGetAngle", JSB_cpRatchetJointGetAngle, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "ratchetJointGetPhase", JSB_cpRatchetJointGetPhase, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "ratchetJointGetRatchet", JSB_cpRatchetJointGetRatchet, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "ratchetJointNew", JSB_cpRatchetJointNew, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "ratchetJointSetAngle", JSB_cpRatchetJointSetAngle, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "ratchetJointSetPhase", JSB_cpRatchetJointSetPhase, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "ratchetJointSetRatchet", JSB_cpRatchetJointSetRatchet, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "resetShapeIdCounter", JSB_cpResetShapeIdCounter, 0, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "rotaryLimitJointGetMax", JSB_cpRotaryLimitJointGetMax, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "rotaryLimitJointGetMin", JSB_cpRotaryLimitJointGetMin, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "rotaryLimitJointNew", JSB_cpRotaryLimitJointNew, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "rotaryLimitJointSetMax", JSB_cpRotaryLimitJointSetMax, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "rotaryLimitJointSetMin", JSB_cpRotaryLimitJointSetMin, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "segmentShapeGetA", JSB_cpSegmentShapeGetA, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "segmentShapeGetB", JSB_cpSegmentShapeGetB, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "segmentShapeGetNormal", JSB_cpSegmentShapeGetNormal, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "segmentShapeGetRadius", JSB_cpSegmentShapeGetRadius, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "segmentShapeNew", JSB_cpSegmentShapeNew, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "segmentShapeSetNeighbors", JSB_cpSegmentShapeSetNeighbors, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeCacheBB", JSB_cpShapeCacheBB, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeDestroy", JSB_cpShapeDestroy, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeFree", JSB_cpShapeFree, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeGetBB", JSB_cpShapeGetBB, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeGetBody", JSB_cpShapeGetBody, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeGetCollisionType", JSB_cpShapeGetCollisionType, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeGetElasticity", JSB_cpShapeGetElasticity, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeGetFriction", JSB_cpShapeGetFriction, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeGetGroup", JSB_cpShapeGetGroup, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeGetLayers", JSB_cpShapeGetLayers, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeGetSensor", JSB_cpShapeGetSensor, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeGetSpace", JSB_cpShapeGetSpace, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeGetSurfaceVelocity", JSB_cpShapeGetSurfaceVelocity, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapePointQuery", JSB_cpShapePointQuery, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeSetBody", JSB_cpShapeSetBody, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeSetCollisionType", JSB_cpShapeSetCollisionType, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeSetElasticity", JSB_cpShapeSetElasticity, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeSetFriction", JSB_cpShapeSetFriction, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeSetGroup", JSB_cpShapeSetGroup, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeSetLayers", JSB_cpShapeSetLayers, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeSetSensor", JSB_cpShapeSetSensor, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeSetSurfaceVelocity", JSB_cpShapeSetSurfaceVelocity, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "shapeUpdate", JSB_cpShapeUpdate, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "simpleMotorGetRate", JSB_cpSimpleMotorGetRate, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "simpleMotorNew", JSB_cpSimpleMotorNew, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "simpleMotorSetRate", JSB_cpSimpleMotorSetRate, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "slideJointGetAnchr1", JSB_cpSlideJointGetAnchr1, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "slideJointGetAnchr2", JSB_cpSlideJointGetAnchr2, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "slideJointGetMax", JSB_cpSlideJointGetMax, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "slideJointGetMin", JSB_cpSlideJointGetMin, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "slideJointNew", JSB_cpSlideJointNew, 6, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "slideJointSetAnchr1", JSB_cpSlideJointSetAnchr1, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "slideJointSetAnchr2", JSB_cpSlideJointSetAnchr2, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "slideJointSetMax", JSB_cpSlideJointSetMax, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "slideJointSetMin", JSB_cpSlideJointSetMin, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceActivateShapesTouchingShape", JSB_cpSpaceActivateShapesTouchingShape, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceAddBody", JSB_cpSpaceAddBody, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceAddConstraint", JSB_cpSpaceAddConstraint, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceAddShape", JSB_cpSpaceAddShape, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceAddStaticShape", JSB_cpSpaceAddStaticShape, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceContainsBody", JSB_cpSpaceContainsBody, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceContainsConstraint", JSB_cpSpaceContainsConstraint, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceContainsShape", JSB_cpSpaceContainsShape, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceDestroy", JSB_cpSpaceDestroy, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceFree", JSB_cpSpaceFree, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceGetCollisionBias", JSB_cpSpaceGetCollisionBias, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceGetCollisionPersistence", JSB_cpSpaceGetCollisionPersistence, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceGetCollisionSlop", JSB_cpSpaceGetCollisionSlop, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceGetCurrentTimeStep", JSB_cpSpaceGetCurrentTimeStep, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceGetDamping", JSB_cpSpaceGetDamping, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceGetEnableContactGraph", JSB_cpSpaceGetEnableContactGraph, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceGetGravity", JSB_cpSpaceGetGravity, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceGetIdleSpeedThreshold", JSB_cpSpaceGetIdleSpeedThreshold, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceGetIterations", JSB_cpSpaceGetIterations, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceGetSleepTimeThreshold", JSB_cpSpaceGetSleepTimeThreshold, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceGetStaticBody", JSB_cpSpaceGetStaticBody, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceInit", JSB_cpSpaceInit, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceIsLocked", JSB_cpSpaceIsLocked, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceNew", JSB_cpSpaceNew, 0, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spacePointQueryFirst", JSB_cpSpacePointQueryFirst, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceReindexShape", JSB_cpSpaceReindexShape, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceReindexShapesForBody", JSB_cpSpaceReindexShapesForBody, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceReindexStatic", JSB_cpSpaceReindexStatic, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceRemoveBody", JSB_cpSpaceRemoveBody, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceRemoveConstraint", JSB_cpSpaceRemoveConstraint, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceRemoveShape", JSB_cpSpaceRemoveShape, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceRemoveStaticShape", JSB_cpSpaceRemoveStaticShape, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceSetCollisionBias", JSB_cpSpaceSetCollisionBias, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceSetCollisionPersistence", JSB_cpSpaceSetCollisionPersistence, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceSetCollisionSlop", JSB_cpSpaceSetCollisionSlop, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceSetDamping", JSB_cpSpaceSetDamping, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceSetEnableContactGraph", JSB_cpSpaceSetEnableContactGraph, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceSetGravity", JSB_cpSpaceSetGravity, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceSetIdleSpeedThreshold", JSB_cpSpaceSetIdleSpeedThreshold, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceSetIterations", JSB_cpSpaceSetIterations, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceSetSleepTimeThreshold", JSB_cpSpaceSetSleepTimeThreshold, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceStep", JSB_cpSpaceStep, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "spaceUseSpatialHash", JSB_cpSpaceUseSpatialHash, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "fabs", JSB_cpfabs, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "fclamp", JSB_cpfclamp, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "fclamp01", JSB_cpfclamp01, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "flerp", JSB_cpflerp, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "flerpconst", JSB_cpflerpconst, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "fmax", JSB_cpfmax, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "fmin", JSB_cpfmin, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vadd", JSB_cpvadd, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vclamp", JSB_cpvclamp, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vcross", JSB_cpvcross, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vdist", JSB_cpvdist, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vdistsq", JSB_cpvdistsq, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vdot", JSB_cpvdot, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "veql", JSB_cpveql, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vforangle", JSB_cpvforangle, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vlength", JSB_cpvlength, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vlengthsq", JSB_cpvlengthsq, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vlerp", JSB_cpvlerp, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vlerpconst", JSB_cpvlerpconst, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vmult", JSB_cpvmult, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vnear", JSB_cpvnear, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vneg", JSB_cpvneg, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vnormalize", JSB_cpvnormalize, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vnormalize_safe", JSB_cpvnormalize_safe, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vperp", JSB_cpvperp, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vproject", JSB_cpvproject, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vrotate", JSB_cpvrotate, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vrperp", JSB_cpvrperp, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vslerp", JSB_cpvslerp, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vslerpconst", JSB_cpvslerpconst, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vsub", JSB_cpvsub, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vtoangle", JSB_cpvtoangle, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, chipmunk, "vunrotate", JSB_cpvunrotate, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + + +#endif // JSB_INCLUDE_CHIPMUNK diff --git a/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_manual.cpp b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_manual.cpp new file mode 100644 index 0000000000..14a88c87bb --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_manual.cpp @@ -0,0 +1,1624 @@ +/* + * JS Bindings: https://github.com/zynga/jsbindings + * + * Copyright (c) 2012 Zynga Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "extensions/cocos-ext.h" +#include "js_bindings_config.h" +#ifdef JSB_INCLUDE_CHIPMUNK + +#include "jsapi.h" +#include "jsfriendapi.h" + +#include "js_bindings_chipmunk_manual.h" +#include "js_manual_conversions.h" + +USING_NS_CC_EXT; +// Function declarations +void static freeSpaceChildren(cpSpace *space); + +template +static JSBool dummy_constructor(JSContext *cx, uint32_t argc, jsval *vp) { + TypeTest t; + T* cobj = new T(); + cobj->autorelease(); + js_type_class_t *p; + uint32_t typeId = t.s_id(); + HASH_FIND_INT(_js_global_type_ht, &typeId, p); + assert(p); + JSObject *_tmp = JS_NewObject(cx, p->jsclass, p->proto, p->parentProto); + js_proxy_t *pp = jsb_new_proxy(cobj, _tmp); + JS_AddObjectRoot(cx, &pp->obj); + JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(_tmp)); + + return JS_TRUE; +} + +#pragma mark - convertions + +/* + * PhysicsSprite + */ +#pragma mark - PhysicsSprite + +JSClass* JSPROXY_CCPhysicsSprite_class = NULL; +JSObject* JSPROXY_CCPhysicsSprite_object = NULL; +// Constructor + +// Destructor +void JSPROXY_CCPhysicsSprite_finalize(JSFreeOp *fop, JSObject *obj) +{ + CCLOGINFO("jsbindings: finalizing JS object %p (PhysicsSprite)", obj); +} + +// Arguments: +// Ret value: cpBody* (N/A) +JSBool JSPROXY_CCPhysicsSprite_getCPBody(JSContext *cx, uint32_t argc, jsval *vp) { + + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + PhysicsSprite* real = (PhysicsSprite *)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, real) + cpBody* ret_val; + + ret_val = real->getCPBody(); + jsval ret_jsval = c_class_to_jsval( cx, ret_val, JSB_cpBody_object, JSB_cpBody_class, "cpBody" ); + JS_SET_RVAL(cx, vp, ret_jsval); + + return JS_TRUE; +} + +// Arguments: +// Ret value: BOOL (b) +JSBool JSPROXY_CCPhysicsSprite_ignoreBodyRotation(JSContext *cx, uint32_t argc, jsval *vp) { + + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + PhysicsSprite* real = (PhysicsSprite *)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, real) + + bool ret_val; + + ret_val = real->isIgnoreBodyRotation(); + JS_SET_RVAL(cx, vp, BOOLEAN_TO_JSVAL(ret_val)); + return JS_TRUE; +} + +// Arguments: cpBody* +// Ret value: void (None) +JSBool JSPROXY_CCPhysicsSprite_setCPBody_(JSContext *cx, uint32_t argc, jsval *vp) { + + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + PhysicsSprite* real = (PhysicsSprite *)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, real) + + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + + cpBody* arg0; + + ok &= jsval_to_opaque( cx, *argvp++, (void**)&arg0 ); + if( ! ok ) return JS_FALSE; + + real->setCPBody((cpBody*)arg0); + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} + +// Arguments: BOOL +// Ret value: void (None) +JSBool JSPROXY_CCPhysicsSprite_setIgnoreBodyRotation_(JSContext *cx, uint32_t argc, jsval *vp) { + + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + PhysicsSprite* real = (PhysicsSprite *)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, real) + + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + JSBool arg0; + + ok &= JS_ValueToBoolean( cx, *argvp++, &arg0 ); + if( ! ok ) return JS_FALSE; + + real->setIgnoreBodyRotation((bool)arg0); + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} + +/* + * PhysicsDebugNode + */ +//#pragma mark - PhysicsDebugNode + +JSClass* JSB_CCPhysicsDebugNode_class = NULL; +JSObject* JSB_CCPhysicsDebugNode_object = NULL; +extern JSObject *js_cocos2dx_CCDrawNode_prototype; + +// Constructor + +// Destructor +void JSB_CCPhysicsDebugNode_finalize(JSFreeOp *fop, JSObject *obj) +{ + CCLOGINFO("jsbindings: finalizing JS object %p (PhysicsDebugNode)", obj); +} + +// Arguments: cpSpace* +// Ret value: PhysicsDebugNode* (o) +JSBool JSB_CCPhysicsDebugNode_debugNodeForCPSpace__static(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2( argc == 1, cx, JS_FALSE, "Invalid number of arguments" ); + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpSpace* arg0; + + ok &= jsval_to_opaque( cx, *argvp++, (void**)&arg0 ); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + PhysicsDebugNode* ret = PhysicsDebugNode::create(arg0); + jsval jsret; + do { + if (ret) { + TypeTest t; + js_type_class_t *typeClass; + uint32_t typeId = t.s_id(); + HASH_FIND_INT(_js_global_type_ht, &typeId, typeClass); + assert(typeClass); + JSObject *obj = JS_NewObject(cx, typeClass->jsclass, typeClass->proto, typeClass->parentProto); + jsret = OBJECT_TO_JSVAL(obj); + js_proxy_t *p = jsb_new_proxy(ret, obj); + JS_AddNamedObjectRoot(cx, &p->obj, "CCDebugNode"); + } else { + jsret = JSVAL_NULL; + } + } while (0); + JS_SET_RVAL(cx, vp, jsret); + + return JS_TRUE; +} + +// Arguments: cpSpace* +// Ret value: void (None) +JSBool JSB_CCPhysicsDebugNode_setSpace_(JSContext *cx, uint32_t argc, jsval *vp) { + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(jsthis); + PhysicsDebugNode* real = (PhysicsDebugNode *)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, real) + + JSB_PRECONDITION2( argc == 1, cx, JS_FALSE, "Invalid number of arguments" ); + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpSpace* arg0; + + ok &= jsval_to_opaque( cx, *argvp++, (void**)&arg0 ); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + real->setSpace(arg0); + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} + +// Arguments: +// Ret value: cpSpace* (N/A) +JSBool JSB_CCPhysicsDebugNode_space(JSContext *cx, uint32_t argc, jsval *vp) { + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(jsthis); + PhysicsDebugNode* real = (PhysicsDebugNode *)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, real) + JSB_PRECONDITION2( argc == 0, cx, JS_FALSE, "Invalid number of arguments" ); + cpSpace* ret_val; + + ret_val = real->getSpace(); + + jsval ret_jsval = opaque_to_jsval( cx, ret_val ); + JS_SET_RVAL(cx, vp, ret_jsval); + + return JS_TRUE; +} + +void JSB_CCPhysicsDebugNode_createClass(JSContext *cx, JSObject* globalObj, const char* name ) +{ + JSB_CCPhysicsDebugNode_class = (JSClass *)calloc(1, sizeof(JSClass)); + JSB_CCPhysicsDebugNode_class->name = name; + JSB_CCPhysicsDebugNode_class->addProperty = JS_PropertyStub; + JSB_CCPhysicsDebugNode_class->delProperty = JS_DeletePropertyStub; + JSB_CCPhysicsDebugNode_class->getProperty = JS_PropertyStub; + JSB_CCPhysicsDebugNode_class->setProperty = JS_StrictPropertyStub; + JSB_CCPhysicsDebugNode_class->enumerate = JS_EnumerateStub; + JSB_CCPhysicsDebugNode_class->resolve = JS_ResolveStub; + JSB_CCPhysicsDebugNode_class->convert = JS_ConvertStub; + JSB_CCPhysicsDebugNode_class->finalize = JSB_CCPhysicsDebugNode_finalize; + JSB_CCPhysicsDebugNode_class->flags = 0; + + static JSPropertySpec properties[] = { + {0, 0, 0, 0, 0} + }; + static JSFunctionSpec funcs[] = { + JS_FN("_setSpace", JSB_CCPhysicsDebugNode_setSpace_, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FN("getSpace", JSB_CCPhysicsDebugNode_space, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FS_END + }; + static JSFunctionSpec st_funcs[] = { + JS_FN("_create", JSB_CCPhysicsDebugNode_debugNodeForCPSpace__static, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FS_END + }; + + TypeTest t1; + js_type_class_t *typeClass; + uint32_t typeId = t1.s_id(); + HASH_FIND_INT(_js_global_type_ht, &typeId, typeClass); + assert(typeClass); + + JSB_CCPhysicsDebugNode_object = JS_InitClass(cx, globalObj, typeClass->proto, JSB_CCPhysicsDebugNode_class, dummy_constructor, 0,properties,funcs,NULL,st_funcs); + + TypeTest t; + js_type_class_t *p; + typeId = t.s_id(); + HASH_FIND_INT(_js_global_type_ht, &typeId, p); + if (!p) { + p = (js_type_class_t *)malloc(sizeof(js_type_class_t)); + p->type = typeId; + p->jsclass = JSB_CCPhysicsDebugNode_class; + p->proto = JSB_CCPhysicsDebugNode_object; + p->parentProto = typeClass->proto; + HASH_ADD_INT(_js_global_type_ht, type, p); + } +} + +// Arguments: NSString*, CGRect +// Ret value: PhysicsSprite* (o) +JSBool JSPROXY_CCPhysicsSprite_spriteWithFile_rect__static(JSContext *cx, uint32_t argc, jsval *vp) { + + jsval *argv = JS_ARGV(cx, vp); + JSBool ok = JS_TRUE; + if (argc == 2) { + const char* arg0; + std::string arg0_tmp; ok &= jsval_to_std_string(cx, argv[0], &arg0_tmp); arg0 = arg0_tmp.c_str(); + cocos2d::Rect arg1; + ok &= jsval_to_ccrect(cx, argv[1], &arg1); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + PhysicsSprite* ret = PhysicsSprite::create(arg0, arg1); + + jsval jsret; + do { + if (ret) { + TypeTest t; + js_type_class_t *typeClass; + uint32_t typeId = t.s_id(); + HASH_FIND_INT(_js_global_type_ht, &typeId, typeClass); + assert(typeClass); + JSObject *obj = JS_NewObject(cx, typeClass->jsclass, typeClass->proto, typeClass->parentProto); + jsret = OBJECT_TO_JSVAL(obj); + js_proxy_t *p = jsb_new_proxy(ret, obj); + JS_AddNamedObjectRoot(cx, &p->obj, "CCPhysicsSprite"); + } else { + jsret = JSVAL_NULL; + } + } while (0); + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; + } + if (argc == 1) { + const char* arg0; + std::string arg0_tmp; ok &= jsval_to_std_string(cx, argv[0], &arg0_tmp); arg0 = arg0_tmp.c_str(); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + PhysicsSprite* ret = PhysicsSprite::create(arg0); + + jsval jsret; + do { + if (ret) { + TypeTest t; + js_type_class_t *typeClass; + uint32_t typeId = t.s_id(); + HASH_FIND_INT(_js_global_type_ht, &typeId, typeClass); + assert(typeClass); + JSObject *obj = JS_NewObject(cx, typeClass->jsclass, typeClass->proto, typeClass->parentProto); + jsret = OBJECT_TO_JSVAL(obj); + js_proxy_t *p = jsb_new_proxy(ret, obj); + JS_AddNamedObjectRoot(cx, &p->obj, "CCPhysicsSprite"); + } else { + jsret = JSVAL_NULL; + } + } while (0); + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; + } + return JS_FALSE; + +} + +// Arguments: SpriteFrame* +// Ret value: PhysicsSprite* (o) +JSBool JSPROXY_CCPhysicsSprite_spriteWithSpriteFrame__static(JSContext *cx, uint32_t argc, jsval *vp) { + jsval *argv = JS_ARGV(cx, vp); + cocos2d::SpriteFrame* arg0; + if (argc >= 1) { + do { + js_proxy_t *proxy; + JSObject *tmpObj = JSVAL_TO_OBJECT(argv[0]); + proxy = jsb_get_js_proxy(tmpObj); + arg0 = (cocos2d::SpriteFrame*)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, arg0) + } while (0); + } + PhysicsSprite* ret = PhysicsSprite::createWithSpriteFrame(arg0); + + jsval jsret; + do { + if (ret) { + TypeTest t; + js_type_class_t *typeClass; + uint32_t typeId = t.s_id(); + HASH_FIND_INT(_js_global_type_ht, &typeId, typeClass); + assert(typeClass); + JSObject *obj = JS_NewObject(cx, typeClass->jsclass, typeClass->proto, typeClass->parentProto); + jsret = OBJECT_TO_JSVAL(obj); + js_proxy_t *p = jsb_new_proxy(ret, obj); + JS_AddNamedObjectRoot(cx, &p->obj, "CCPhysicsSprite"); + } else { + jsret = JSVAL_NULL; + } + } while (0); + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; +} + +// Arguments: NSString* +// Ret value: PhysicsSprite* (o) +JSBool JSPROXY_CCPhysicsSprite_spriteWithSpriteFrameName__static(JSContext *cx, uint32_t argc, jsval *vp) { + jsval *argv = JS_ARGV(cx, vp); + JSBool ok = JS_TRUE; + const char* arg0; + std::string arg0_tmp; + if (argc >= 1) { + ok &= jsval_to_std_string(cx, argv[0], &arg0_tmp); arg0 = arg0_tmp.c_str(); + } + PhysicsSprite* ret = PhysicsSprite::createWithSpriteFrameName(arg0); + + jsval jsret; + do { + if (ret) { + TypeTest t; + js_type_class_t *typeClass; + uint32_t typeId = t.s_id(); + HASH_FIND_INT(_js_global_type_ht, &typeId, typeClass); + assert(typeClass); + JSObject *obj = JS_NewObject(cx, typeClass->jsclass, typeClass->proto, typeClass->parentProto); + jsret = OBJECT_TO_JSVAL(obj); + js_proxy_t *p = jsb_new_proxy(ret, obj); + JS_AddNamedObjectRoot(cx, &p->obj, "CCPhysicsSprite"); + } else { + jsret = JSVAL_NULL; + } + } while (0); + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; +} + +void JSPROXY_CCPhysicsSprite_createClass(JSContext *cx, JSObject* globalObj) +{ + JSPROXY_CCPhysicsSprite_class = (JSClass *)calloc(1, sizeof(JSClass)); + JSPROXY_CCPhysicsSprite_class->name = "PhysicsSprite"; + JSPROXY_CCPhysicsSprite_class->addProperty = JS_PropertyStub; + JSPROXY_CCPhysicsSprite_class->delProperty = JS_DeletePropertyStub; + JSPROXY_CCPhysicsSprite_class->getProperty = JS_PropertyStub; + JSPROXY_CCPhysicsSprite_class->setProperty = JS_StrictPropertyStub; + JSPROXY_CCPhysicsSprite_class->enumerate = JS_EnumerateStub; + JSPROXY_CCPhysicsSprite_class->resolve = JS_ResolveStub; + JSPROXY_CCPhysicsSprite_class->convert = JS_ConvertStub; + JSPROXY_CCPhysicsSprite_class->finalize = JSPROXY_CCPhysicsSprite_finalize; + JSPROXY_CCPhysicsSprite_class->flags = 0; + + static JSPropertySpec properties[] = { + {0, 0, 0, 0, 0} + }; + static JSFunctionSpec funcs[] = { + JS_FN("getCPBody", JSPROXY_CCPhysicsSprite_getCPBody, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FN("getIgnoreBodyRotation", JSPROXY_CCPhysicsSprite_ignoreBodyRotation, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FN("_setCPBody", JSPROXY_CCPhysicsSprite_setCPBody_, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FN("setIgnoreBodyRotation", JSPROXY_CCPhysicsSprite_setIgnoreBodyRotation_, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FS_END + }; + static JSFunctionSpec st_funcs[] = { + JS_FN("create", JSPROXY_CCPhysicsSprite_spriteWithFile_rect__static, 2, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FN("createWithSpriteFrame", JSPROXY_CCPhysicsSprite_spriteWithSpriteFrame__static, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FN("createWithSpriteFrameName", JSPROXY_CCPhysicsSprite_spriteWithSpriteFrameName__static, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FS_END + }; + + TypeTest t1; + js_type_class_t *typeClass; + uint32_t typeId = t1.s_id(); + HASH_FIND_INT(_js_global_type_ht, &typeId, typeClass); + assert(typeClass); + + JSPROXY_CCPhysicsSprite_object = JS_InitClass(cx, globalObj, typeClass->proto, JSPROXY_CCPhysicsSprite_class, dummy_constructor, 0,properties,funcs,NULL,st_funcs); + + TypeTest t; + js_type_class_t *p; + typeId = t.s_id(); + HASH_FIND_INT(_js_global_type_ht, &typeId, p); + if (!p) { + p = (js_type_class_t *)malloc(sizeof(js_type_class_t)); + p->type = typeId; + p->jsclass = JSPROXY_CCPhysicsSprite_class; + p->proto = JSPROXY_CCPhysicsSprite_object; + p->parentProto = typeClass->proto; + HASH_ADD_INT(_js_global_type_ht, type, p); + } +} + + +void register_CCPhysicsSprite(JSContext *cx, JSObject *obj) { + jsval nsval; + JSObject *ns; + JS_GetProperty(cx, obj, "cc", &nsval); + if (nsval == JSVAL_VOID) { + ns = JS_NewObject(cx, NULL, NULL, NULL); + nsval = OBJECT_TO_JSVAL(ns); + JS_SetProperty(cx, obj, "cc", &nsval); + } else { + JS_ValueToObject(cx, nsval, &ns); + } + obj = ns; + JSPROXY_CCPhysicsSprite_createClass(cx, obj); +} + +void register_CCPhysicsDebugNode(JSContext *cx, JSObject *obj) { + jsval nsval; + JSObject *ns; + JS_GetProperty(cx, obj, "cc", &nsval); + if (nsval == JSVAL_VOID) { + ns = JS_NewObject(cx, NULL, NULL, NULL); + nsval = OBJECT_TO_JSVAL(ns); + JS_SetProperty(cx, obj, "cc", &nsval); + } else { + JS_ValueToObject(cx, nsval, &ns); + } + obj = ns; + JSB_CCPhysicsDebugNode_createClass(cx, obj, "PhysicsDebugNode"); +} + +JSBool jsval_to_cpBB( JSContext *cx, jsval vp, cpBB *ret ) +{ + JSObject *jsobj; + JSBool ok = JS_ValueToObject( cx, vp, &jsobj ); + JSB_PRECONDITION( ok, "Error converting value to object"); + JSB_PRECONDITION( jsobj, "Not a valid JS object"); + + jsval vall, valb, valr, valt; + ok = JS_TRUE; + ok &= JS_GetProperty(cx, jsobj, "l", &vall); + ok &= JS_GetProperty(cx, jsobj, "b", &valb); + ok &= JS_GetProperty(cx, jsobj, "r", &valr); + ok &= JS_GetProperty(cx, jsobj, "t", &valt); + JSB_PRECONDITION( ok, "Error obtaining point properties"); + + double l, b, r, t; + ok &= JS_ValueToNumber(cx, vall, &l); + ok &= JS_ValueToNumber(cx, valb, &b); + ok &= JS_ValueToNumber(cx, valr, &r); + ok &= JS_ValueToNumber(cx, valt, &t); + JSB_PRECONDITION( ok, "Error converting value to numbers"); + + ret->l = l; + ret->b = b; + ret->r = r; + ret->t = t; + + return JS_TRUE; +} + +jsval cpBB_to_jsval(JSContext *cx, cpBB bb ) +{ + JSObject *object = JS_NewObject(cx, NULL, NULL, NULL ); + if (!object) + return JSVAL_VOID; + + if (!JS_DefineProperty(cx, object, "l", DOUBLE_TO_JSVAL(bb.l), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) || + !JS_DefineProperty(cx, object, "b", DOUBLE_TO_JSVAL(bb.b), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) || + !JS_DefineProperty(cx, object, "r", DOUBLE_TO_JSVAL(bb.r), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) || + !JS_DefineProperty(cx, object, "t", DOUBLE_TO_JSVAL(bb.t), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) ) + return JSVAL_VOID; + + return OBJECT_TO_JSVAL(object); +} + +// In order to be compatible with Chipmunk-JS API, +// this function expect to receive an array of numbers, and not an array of vects +// OK: [1,2, 3,4, 5,6] <- expected +// BAD: [{x:1, y:2}, {x:3,y:4}, {x:5, y:6}] <- not expected +JSBool jsval_to_array_of_cpvect( JSContext *cx, jsval vp, cpVect**verts, int *numVerts) +{ + // Parsing sequence + JSObject *jsobj; + JSBool ok = JS_ValueToObject( cx, vp, &jsobj ); + JSB_PRECONDITION( ok, "Error converting value to object"); + + JSB_PRECONDITION( jsobj && JS_IsArrayObject( cx, jsobj), "Object must be an array"); + + uint32_t len; + JS_GetArrayLength(cx, jsobj, &len); + + JSB_PRECONDITION( len%2==0, "Array lenght should be even"); + + cpVect *array = (cpVect*)malloc( sizeof(cpVect) * len/2); + + for( uint32_t i=0; i< len;i++ ) { + jsval valarg; + JS_GetElement(cx, jsobj, i, &valarg); + + double value; + ok = JS_ValueToNumber(cx, valarg, &value); + JSB_PRECONDITION( ok, "Error converting value to nsobject"); + + if(i%2==0) + array[i/2].x = value; + else + array[i/2].y = value; + } + + *numVerts = len/2; + *verts = array; + + return JS_TRUE; +} + +#pragma mark - Collision Handler + +struct collision_handler { + cpCollisionType typeA; + cpCollisionType typeB; + + JSObject *begin; + JSObject *pre; + JSObject *post; + JSObject *separate; + JSObject *jsthis; + JSContext *cx; + + // "owner" of the collision handler + // Needed when the space goes out of scope, it will remove all the allocated collision handlers for him. + cpSpace *space; + + unsigned long hash_key; + + unsigned int is_oo; // Objected oriented API ? + UT_hash_handle hh; +}; + +// hash +struct collision_handler* collision_handler_hash = NULL; + +// helper pair +static unsigned long pair_ints( unsigned long A, unsigned long B ) +{ + // order is not important + unsigned long k1 = MIN(A, B ); + unsigned long k2 = MAX(A, B ); + + return (k1 + k2) * (k1 + k2 + 1) /2 + k2; +} + +static cpBool myCollisionBegin(cpArbiter *arb, cpSpace *space, void *data) +{ + struct collision_handler *handler = (struct collision_handler*) data; + + jsval args[2]; + if( handler->is_oo ) { + args[0] = c_class_to_jsval(handler->cx, arb, JSB_cpArbiter_object, JSB_cpArbiter_class, "cpArbiter"); + args[1] = c_class_to_jsval(handler->cx, space, JSB_cpSpace_object, JSB_cpSpace_class, "cpArbiter"); + } else { + args[0] = opaque_to_jsval( handler->cx, arb); + args[1] = opaque_to_jsval( handler->cx, space ); + } + + jsval rval; + JSBool ok = JS_CallFunctionValue( handler->cx, handler->jsthis, OBJECT_TO_JSVAL(handler->begin), 2, args, &rval); + JSB_PRECONDITION2(ok, handler->cx, cpFalse, "Error calling collision callback: begin"); + + if( JSVAL_IS_BOOLEAN(rval) ) { + JSBool ret = JSVAL_TO_BOOLEAN(rval); + return (cpBool)ret; + } + return cpTrue; +} + +static cpBool myCollisionPre(cpArbiter *arb, cpSpace *space, void *data) +{ + struct collision_handler *handler = (struct collision_handler*) data; + + jsval args[2]; + if( handler->is_oo ) { + args[0] = c_class_to_jsval(handler->cx, arb, JSB_cpArbiter_object, JSB_cpArbiter_class, "cpArbiter"); + args[1] = c_class_to_jsval(handler->cx, space, JSB_cpSpace_object, JSB_cpSpace_class, "cpArbiter"); + } else { + args[0] = opaque_to_jsval( handler->cx, arb); + args[1] = opaque_to_jsval( handler->cx, space ); + } + + jsval rval; + JSBool ok = JS_CallFunctionValue( handler->cx, handler->jsthis, OBJECT_TO_JSVAL(handler->pre), 2, args, &rval); + JSB_PRECONDITION2(ok, handler->cx, JS_FALSE, "Error calling collision callback: pre"); + + if( JSVAL_IS_BOOLEAN(rval) ) { + JSBool ret = JSVAL_TO_BOOLEAN(rval); + return (cpBool)ret; + } + return cpTrue; +} + +static void myCollisionPost(cpArbiter *arb, cpSpace *space, void *data) +{ + struct collision_handler *handler = (struct collision_handler*) data; + + jsval args[2]; + + if( handler->is_oo ) { + args[0] = c_class_to_jsval(handler->cx, arb, JSB_cpArbiter_object, JSB_cpArbiter_class, "cpArbiter"); + args[1] = c_class_to_jsval(handler->cx, space, JSB_cpSpace_object, JSB_cpSpace_class, "cpArbiter"); + } else { + args[0] = opaque_to_jsval( handler->cx, arb); + args[1] = opaque_to_jsval( handler->cx, space ); + } + + jsval ignore; + JSBool ok = JS_CallFunctionValue( handler->cx, handler->jsthis, OBJECT_TO_JSVAL(handler->post), 2, args, &ignore); + JSB_PRECONDITION2(ok, handler->cx, , "Error calling collision callback: Post"); +} + +static void myCollisionSeparate(cpArbiter *arb, cpSpace *space, void *data) +{ + struct collision_handler *handler = (struct collision_handler*) data; + + jsval args[2]; + if( handler->is_oo ) { + args[0] = c_class_to_jsval(handler->cx, arb, JSB_cpArbiter_object, JSB_cpArbiter_class, "cpArbiter"); + args[1] = c_class_to_jsval(handler->cx, space, JSB_cpSpace_object, JSB_cpSpace_class, "cpArbiter"); + } else { + args[0] = opaque_to_jsval( handler->cx, arb); + args[1] = opaque_to_jsval( handler->cx, space ); + } + + jsval ignore; + JSBool ok = JS_CallFunctionValue( handler->cx, handler->jsthis, OBJECT_TO_JSVAL(handler->separate), 2, args, &ignore); + JSB_PRECONDITION2(ok, handler->cx, , "Error calling collision callback: Separate");} + +#pragma mark - cpSpace + +#pragma mark constructor / destructor + +void JSB_cpSpace_finalize(JSFreeOp *fop, JSObject *jsthis) +{ + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); + if( proxy ) { + CCLOGINFO("jsbindings: finalizing JS object %p (cpSpace), handle: %p", jsthis, proxy->handle); + + // space + cpSpace *space = (cpSpace*) proxy->handle; + + + // Remove collision handlers, since the user might have forgotten to manually remove them + struct collision_handler *current, *tmp; + HASH_ITER(hh, collision_handler_hash, current, tmp) { + if( current->space == space ) { + + JSContext *cx = current->cx; + + // unroot it + if( current->begin ) { + JS_RemoveObjectRoot(cx, ¤t->begin); + } + if( current->pre ) + JS_RemoveObjectRoot(cx, ¤t->pre); + if( current->post ) + JS_RemoveObjectRoot(cx, ¤t->post); + if( current->separate ) + JS_RemoveObjectRoot(cx, ¤t->separate); + + HASH_DEL(collision_handler_hash,current); /* delete; users advances to next */ + free(current); /* optional- if you want to free */ + } + } + + // Free Space Children + freeSpaceChildren(space); + + jsb_del_jsobject_for_proxy(space); + if(proxy->flags == JSB_C_FLAG_CALL_FREE) + cpSpaceFree(space); + jsb_del_c_proxy_for_jsobject(jsthis); + } +} + + +#pragma mark addCollisionHandler + +static +JSBool __jsb_cpSpace_addCollisionHandler(JSContext *cx, jsval *vp, jsval *argvp, cpSpace *space, unsigned int is_oo) +{ + struct collision_handler *handler = (struct collision_handler*) malloc( sizeof(*handler) ); + + JSB_PRECONDITION(handler, "Error allocating memory"); + + JSBool ok = JS_TRUE; + + // args + ok &= jsval_to_int(cx, *argvp++, (int32_t*) &handler->typeA ); + ok &= jsval_to_int(cx, *argvp++, (int32_t*) &handler->typeB ); + + // this is no longer passed, so "this" is going to be "this". +// ok &= JS_ValueToObject(cx, *argvp++, &handler->jsthis ); + handler->jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + + handler->begin = !JSVAL_IS_NULL(*argvp) ? JSVAL_TO_OBJECT(*argvp) : NULL; + argvp++; + handler->pre = !JSVAL_IS_NULL(*argvp) ? JSVAL_TO_OBJECT(*argvp) : NULL; + argvp++; + handler->post = !JSVAL_IS_NULL(*argvp) ? JSVAL_TO_OBJECT(*argvp) : NULL; + argvp++; + handler->separate = !JSVAL_IS_NULL(*argvp) ? JSVAL_TO_OBJECT(*argvp) : NULL; + argvp++; + + JSB_PRECONDITION(ok, "Error parsing arguments"); + + // Object Oriented API ? + handler->is_oo = is_oo; + + // owner of the collision handler + handler->space = space; + + // Root it + if( handler->begin ) + JS_AddNamedObjectRoot(cx, &handler->begin, "begin collision_handler"); + if( handler->pre ) + JS_AddNamedObjectRoot(cx, &handler->pre, "pre collision_handler"); + if( handler->post ) + JS_AddNamedObjectRoot(cx, &handler->post, "post collision_handler"); + if( handler->separate ) + JS_AddNamedObjectRoot(cx, &handler->separate, "separate collision_handler"); + + handler->cx = cx; + + cpSpaceAddCollisionHandler(space, handler->typeA, handler->typeB, + !handler->begin ? NULL : &myCollisionBegin, + !handler->pre ? NULL : &myCollisionPre, + !handler->post ? NULL : &myCollisionPost, + !handler->separate ? NULL : &myCollisionSeparate, + handler ); + + + // + // Already added ? If so, remove it. + // Then add new entry + // + struct collision_handler *hashElement = NULL; + unsigned long paired_key = pair_ints(handler->typeA, handler->typeB ); + HASH_FIND_INT(collision_handler_hash, &paired_key, hashElement); + if( hashElement ) { + HASH_DEL( collision_handler_hash, hashElement ); + free( hashElement ); + } + + handler->hash_key = paired_key; + HASH_ADD_INT( collision_handler_hash, hash_key, handler ); + + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} + +JSBool JSB_cpSpaceAddCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==7, cx, JS_FALSE, "Invalid number of arguments"); + + + jsval *argvp = JS_ARGV(cx,vp); + + // args + cpSpace *space; + JSBool ok = jsval_to_opaque( cx, *argvp++, (void**)&space); + JSB_PRECONDITION(ok, "Error parsing arguments"); + + return __jsb_cpSpace_addCollisionHandler(cx, vp, argvp, space, 0); +} + +// method +JSBool JSB_cpSpace_addCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==6, cx, JS_FALSE, "Invalid number of arguments"); + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + JSB_PRECONDITION( jsthis, "Invalid jsthis object"); + + struct jsb_c_proxy_s* proxy = jsb_get_c_proxy_for_jsobject(jsthis); + void *handle = proxy->handle; + + return __jsb_cpSpace_addCollisionHandler(cx, vp, JS_ARGV(cx,vp), (cpSpace*)handle, 1); +} + +#pragma mark removeCollisionHandler + +static +JSBool __jsb_cpSpace_removeCollisionHandler(JSContext *cx, jsval *vp, jsval *argvp, cpSpace *space) +{ + JSBool ok = JS_TRUE; + + cpCollisionType typeA; + cpCollisionType typeB; + ok &= jsval_to_int(cx, *argvp++, (int32_t*) &typeA ); + ok &= jsval_to_int(cx, *argvp++, (int32_t*) &typeB ); + + JSB_PRECONDITION(ok, "Error parsing arguments"); + + cpSpaceRemoveCollisionHandler(space, typeA, typeB ); + + // Remove it + struct collision_handler *hashElement = NULL; + unsigned long key = pair_ints(typeA, typeB ); + HASH_FIND_INT(collision_handler_hash, &key, hashElement); + if( hashElement ) { + + // unroot it + if( hashElement->begin ) + JS_RemoveObjectRoot(cx, &hashElement->begin); + if( hashElement->pre ) + JS_RemoveObjectRoot(cx, &hashElement->pre); + if( hashElement->post ) + JS_RemoveObjectRoot(cx, &hashElement->post); + if( hashElement->separate ) + JS_RemoveObjectRoot(cx, &hashElement->separate); + + HASH_DEL( collision_handler_hash, hashElement ); + free( hashElement ); + } + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} + +// Free function +JSBool JSB_cpSpaceRemoveCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==3, cx, JS_FALSE, "Invalid number of arguments"); + + jsval *argvp = JS_ARGV(cx,vp); + + cpSpace* space; + JSBool ok = jsval_to_opaque( cx, *argvp++, (void**)&space); + + JSB_PRECONDITION(ok, "Error parsing arguments"); + + return __jsb_cpSpace_removeCollisionHandler(cx, vp, argvp, space); +} + +// method +JSBool JSB_cpSpace_removeCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==2, cx, JS_FALSE, "Invalid number of arguments"); + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + JSB_PRECONDITION( jsthis, "Invalid jsthis object"); + + struct jsb_c_proxy_s* proxy = jsb_get_c_proxy_for_jsobject(jsthis); + void *handle = proxy->handle; + + return __jsb_cpSpace_removeCollisionHandler(cx, vp, JS_ARGV(cx,vp), (cpSpace*)handle); +} + +#pragma mark Add functios. Root JSObjects + +// Arguments: cpBody* +// Ret value: cpBody* +JSBool JSB_cpSpace_addBody(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); + cpSpace* arg0 = (cpSpace*) proxy->handle; + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpBody* arg1; + + jsval retval = *argvp; struct jsb_c_proxy_s *retproxy; + ok &= jsval_to_c_class( cx, *argvp++, (void**)&arg1, &retproxy ); + JSB_PRECONDITION(ok, "Error processing arguments"); + + cpSpaceAddBody((cpSpace*)arg0 , (cpBody*)arg1 ); + + // Root it: + JS_AddNamedObjectRoot(cx, &retproxy->jsobj, "cpBody"); + + // addBody returns the same object that was added, so return it without conversions + JS_SET_RVAL(cx, vp, retval); + + return JS_TRUE; +} + +// Arguments: cpConstraint* +// Ret value: cpConstraint* +JSBool JSB_cpSpace_addConstraint(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); + cpSpace* arg0 = (cpSpace*) proxy->handle; + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpConstraint* arg1; + + jsval retval = *argvp; struct jsb_c_proxy_s *retproxy; + ok &= jsval_to_c_class( cx, *argvp++, (void**)&arg1, &retproxy ); + JSB_PRECONDITION(ok, "Error processing arguments"); + + cpSpaceAddConstraint((cpSpace*)arg0 , (cpConstraint*)arg1 ); + + // Root it: + JS_AddNamedObjectRoot(cx, &retproxy->jsobj, "cpConstraint"); + + // addConstraint returns the same object that was added, so return it without conversions + JS_SET_RVAL(cx, vp, retval); + + return JS_TRUE; +} + +// Arguments: cpShape* +// Ret value: cpShape* +JSBool JSB_cpSpace_addShape(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); + cpSpace* arg0 = (cpSpace*) proxy->handle; + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpShape* arg1; + + jsval retval = *argvp; struct jsb_c_proxy_s *retproxy; + ok &= jsval_to_c_class( cx, *argvp++, (void**)&arg1, &retproxy ); + JSB_PRECONDITION(ok, "Error processing arguments"); + + cpSpaceAddShape((cpSpace*)arg0 , (cpShape*)arg1 ); + + // Root it: + JS_AddNamedObjectRoot(cx, &retproxy->jsobj, "cpShape"); + + // addShape returns the same object that was added, so return it without conversions + JS_SET_RVAL(cx, vp, retval); + + return JS_TRUE; +} + +// Arguments: cpShape* +// Ret value: cpShape* +JSBool JSB_cpSpace_addStaticShape(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); + cpSpace* arg0 = (cpSpace*) proxy->handle; + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpShape* arg1; + + jsval retval = *argvp; struct jsb_c_proxy_s *retproxy; + ok &= jsval_to_c_class( cx, *argvp++, (void**)&arg1, &retproxy ); + JSB_PRECONDITION(ok, "Error processing arguments"); + + cpSpaceAddStaticShape((cpSpace*)arg0 , (cpShape*)arg1 ); + + // Root it: + JS_AddNamedObjectRoot(cx, &retproxy->jsobj, "cpShape (static)"); + + // addStaticShape returns the same object that was added, so return it without conversions + JS_SET_RVAL(cx, vp, retval); + + return JS_TRUE; +} + +#pragma mark Remove functios. Untoot JSObjects + +// Arguments: cpBody* +// Ret value: void +JSBool JSB_cpSpace_removeBody(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); + cpSpace* arg0 = (cpSpace*) proxy->handle; + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpBody* arg1; + + struct jsb_c_proxy_s *retproxy; + ok &= jsval_to_c_class( cx, *argvp++, (void**)&arg1, &retproxy ); + JSB_PRECONDITION(ok, "Error processing arguments"); + + cpSpaceRemoveBody((cpSpace*)arg0 , (cpBody*)arg1 ); + JS_RemoveObjectRoot(cx, &retproxy->jsobj); + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} + +// Arguments: cpConstraint* +// Ret value: void +JSBool JSB_cpSpace_removeConstraint(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); + cpSpace* arg0 = (cpSpace*) proxy->handle; + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpConstraint* arg1; + + struct jsb_c_proxy_s *retproxy; + ok &= jsval_to_c_class( cx, *argvp++, (void**)&arg1, &retproxy ); + JSB_PRECONDITION(ok, "Error processing arguments"); + + cpSpaceRemoveConstraint((cpSpace*)arg0 , (cpConstraint*)arg1 ); + JS_RemoveObjectRoot(cx, &retproxy->jsobj); + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} + +// Arguments: cpShape* +// Ret value: void +JSBool JSB_cpSpace_removeShape(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); + cpSpace* arg0 = (cpSpace*) proxy->handle; + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpShape* arg1; + + struct jsb_c_proxy_s *retproxy; + ok &= jsval_to_c_class( cx, *argvp++, (void**)&arg1, &retproxy ); + JSB_PRECONDITION(ok, "Error processing arguments"); + + cpSpaceRemoveShape((cpSpace*)arg0 , (cpShape*)arg1 ); + JS_RemoveObjectRoot(cx, &retproxy->jsobj); + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} + +// Arguments: cpShape* +// Ret value: void +JSBool JSB_cpSpace_removeStaticShape(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsthis); + cpSpace* arg0 = (cpSpace*) proxy->handle; + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpShape* arg1; + + struct jsb_c_proxy_s *retproxy; + ok &= jsval_to_c_class( cx, *argvp++, (void**)&arg1, &retproxy ); + JSB_PRECONDITION(ok, "Error processing arguments"); + + cpSpaceRemoveStaticShape((cpSpace*)arg0 , (cpShape*)arg1 ); + JS_RemoveObjectRoot(cx, &retproxy->jsobj); + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} +#pragma mark - Arbiter + +#pragma mark getBodies +static +JSBool __jsb_cpArbiter_getBodies(JSContext *cx, jsval *vp, jsval *argvp, cpArbiter *arbiter, unsigned int is_oo) +{ + cpBody *bodyA; + cpBody *bodyB; + cpArbiterGetBodies(arbiter, &bodyA, &bodyB); + + jsval valA, valB; + if( is_oo ) { + valA = c_class_to_jsval(cx, bodyA, JSB_cpBody_object, JSB_cpBody_class, "cpArbiter"); + valB = c_class_to_jsval(cx, bodyB, JSB_cpBody_object, JSB_cpBody_class, "cpArbiter"); + } else { + valA = opaque_to_jsval(cx, bodyA); + valB = opaque_to_jsval(cx, bodyB); + } + + JSObject *jsobj = JS_NewArrayObject(cx, 2, NULL); + JS_SetElement(cx, jsobj, 0, &valA); + JS_SetElement(cx, jsobj, 1, &valB); + + JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(jsobj)); + + return JS_TRUE; +} + +// Free function +JSBool JSB_cpArbiterGetBodies(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + jsval *argvp = JS_ARGV(cx,vp); + + cpArbiter* arbiter; + if( ! jsval_to_opaque( cx, *argvp++, (void**)&arbiter ) ) + return JS_FALSE; + + return __jsb_cpArbiter_getBodies(cx, vp, argvp, arbiter, 0); +} + +// Method +JSBool JSB_cpArbiter_getBodies(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==0, cx, JS_FALSE, "Invalid number of arguments"); + + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + JSB_PRECONDITION( jsthis, "Invalid jsthis object"); + + struct jsb_c_proxy_s* proxy = jsb_get_c_proxy_for_jsobject(jsthis); + JSB_PRECONDITION( proxy, "Invalid private object"); + void *handle = proxy->handle; + + return __jsb_cpArbiter_getBodies(cx, vp, JS_ARGV(cx,vp), (cpArbiter*)handle, 1); +} + +#pragma mark getShapes +static +JSBool __jsb_cpArbiter_getShapes(JSContext *cx, jsval *vp, jsval *argvp, cpArbiter *arbiter, unsigned int is_oo) +{ + cpShape *shapeA; + cpShape *shapeB; + cpArbiterGetShapes(arbiter, &shapeA, &shapeB); + + jsval valA, valB; + if( is_oo ) { + valA = c_class_to_jsval(cx, shapeA, JSB_cpShape_object, JSB_cpShape_class, "cpShape"); + valB = c_class_to_jsval(cx, shapeB, JSB_cpShape_object, JSB_cpShape_class, "cpShape"); + } else { + valA = opaque_to_jsval(cx, shapeA); + valB = opaque_to_jsval(cx, shapeB); + } + + JSObject *jsobj = JS_NewArrayObject(cx, 2, NULL); + JS_SetElement(cx, jsobj, 0, &valA); + JS_SetElement(cx, jsobj, 1, &valB); + + JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(jsobj)); + + return JS_TRUE; +} + +// function +JSBool JSB_cpArbiterGetShapes(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + jsval *argvp = JS_ARGV(cx,vp); + + cpArbiter* arbiter; + if( ! jsval_to_opaque( cx, *argvp++, (void**) &arbiter ) ) + return JS_FALSE; + + return __jsb_cpArbiter_getShapes(cx, vp, argvp, arbiter, 0); +} + +// method +JSBool JSB_cpArbiter_getShapes(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==0, cx, JS_FALSE, "Invalid number of arguments"); + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + JSB_PRECONDITION( jsthis, "Invalid jsthis object"); + + struct jsb_c_proxy_s* proxy = jsb_get_c_proxy_for_jsobject(jsthis); + void *handle = proxy->handle; + + return __jsb_cpArbiter_getShapes(cx, vp, JS_ARGV(cx,vp), (cpArbiter*)handle, 1); +} + +#pragma mark - Body + +#pragma mark constructor + +// Manually added to identify static vs dynamic bodies +JSBool JSB_cpBody_constructor(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==2, cx, JS_FALSE, "Invalid number of arguments"); + JSObject *jsobj = JS_NewObject(cx, JSB_cpBody_class, JSB_cpBody_object, NULL); + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + double m; double i; + + ok &= JS_ValueToNumber( cx, *argvp++, &m ); + ok &= JS_ValueToNumber( cx, *argvp++, &i ); + JSB_PRECONDITION(ok, "Error processing arguments"); + + cpBody *ret_body = NULL; + if( m == INFINITY && i == INFINITY) { + ret_body = cpBodyNewStatic(); + + // XXX: Hack. IT WILL LEAK "rogue" objects., But at least it prevents a crash. + // The thing is that "rogue" bodies needs to be freed after the its shape, and I am not sure + // how to do it in a "js" way. + jsb_set_c_proxy_for_jsobject(jsobj, ret_body, JSB_C_FLAG_DO_NOT_CALL_FREE); + } else { + ret_body = cpBodyNew((cpFloat)m , (cpFloat)i ); + jsb_set_c_proxy_for_jsobject(jsobj, ret_body, JSB_C_FLAG_CALL_FREE); + } + + jsb_set_jsobject_for_proxy(jsobj, ret_body); + + JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(jsobj)); + return JS_TRUE; +} + +#pragma mark getUserData + +static +JSBool __jsb_cpBody_getUserData(JSContext *cx, jsval *vp, jsval *argvp, cpBody *body) +{ + JSObject *data = (JSObject*) cpBodyGetUserData(body); + JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(data)); + + return JS_TRUE; +} + +// free function +JSBool JSB_cpBodyGetUserData(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + jsval *argvp = JS_ARGV(cx,vp); + cpBody *body; + if( ! jsval_to_opaque( cx, *argvp++, (void**) &body ) ) + return JS_FALSE; + + return __jsb_cpBody_getUserData(cx, vp, argvp, body); +} + +// method +JSBool JSB_cpBody_getUserData(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==0, cx, JS_FALSE, "Invalid number of arguments"); + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + JSB_PRECONDITION( jsthis, "Invalid jsthis object"); + + struct jsb_c_proxy_s* proxy = jsb_get_c_proxy_for_jsobject(jsthis); + void *handle = proxy->handle; + + return __jsb_cpBody_getUserData(cx, vp, JS_ARGV(cx,vp), (cpBody*)handle); +} + + +#pragma mark setUserData + +static +JSBool __jsb_cpBody_setUserData(JSContext *cx, jsval *vp, jsval *argvp, cpBody *body) +{ + JSObject *jsobj; + + JSBool ok = JS_ValueToObject(cx, *argvp++, &jsobj); + + JSB_PRECONDITION(ok, "Error parsing arguments"); + + cpBodySetUserData(body, jsobj); + JS_SET_RVAL(cx, vp, JSVAL_VOID); + + return JS_TRUE; +} + +// free function +JSBool JSB_cpBodySetUserData(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==2, cx, JS_FALSE, "Invalid number of arguments"); + + jsval *argvp = JS_ARGV(cx,vp); + cpBody *body; + JSBool ok = jsval_to_opaque( cx, *argvp++, (void**) &body ); + JSB_PRECONDITION(ok, "Error parsing arguments"); + return __jsb_cpBody_setUserData(cx, vp, argvp, body); +} + +// method +JSBool JSB_cpBody_setUserData(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + JSB_PRECONDITION( jsthis, "Invalid jsthis object"); + + struct jsb_c_proxy_s* proxy = jsb_get_c_proxy_for_jsobject(jsthis); + void *handle = proxy->handle; + + return __jsb_cpBody_setUserData(cx, vp, JS_ARGV(cx,vp), (cpBody*)handle); +} + +#pragma mark - Poly related + +// cpFloat cpAreaForPoly(const int numVerts, const cpVect *verts); +JSBool JSB_cpAreaForPoly(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpVect *verts; + int numVerts; + + ok &= jsval_to_array_of_cpvect( cx, *argvp++, &verts, &numVerts); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error parsing array"); + + cpFloat area = cpAreaForPoly(numVerts, verts); + + free(verts); + + JS_SET_RVAL(cx, vp, DOUBLE_TO_JSVAL(area)); + return JS_TRUE; +} + +// cpFloat cpMomentForPoly(cpFloat m, int numVerts, const cpVect *verts, cpVect offset); +JSBool JSB_cpMomentForPoly(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==3, cx, JS_FALSE, "Invalid number of arguments"); + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpVect *verts; cpVect offset; + int numVerts; + double m; + + ok &= JS_ValueToNumber(cx, *argvp++, &m); + ok &= jsval_to_array_of_cpvect( cx, *argvp++, &verts, &numVerts); + ok &= jsval_to_cpVect( cx, *argvp++, (cpVect*) &offset ); + + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error parsing args"); + + cpFloat moment = cpMomentForPoly((cpFloat)m, numVerts, verts, offset); + + free(verts); + + JS_SET_RVAL(cx, vp, DOUBLE_TO_JSVAL(moment)); + return JS_TRUE; +} + +// cpVect cpCentroidForPoly(const int numVerts, const cpVect *verts); +JSBool JSB_cpCentroidForPoly(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpVect *verts; + int numVerts; + + ok &= jsval_to_array_of_cpvect( cx, *argvp++, &verts, &numVerts); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error parsing args"); + + cpVect centroid = cpCentroidForPoly(numVerts, verts); + + free(verts); + + JS_SET_RVAL(cx, vp, cpVect_to_jsval(cx, (cpVect)centroid)); + return JS_TRUE; +} + +// void cpRecenterPoly(const int numVerts, cpVect *verts); +JSBool JSB_cpRecenterPoly(JSContext *cx, uint32_t argc, jsval *vp) +{ + CCASSERT(false, "NOT IMPLEMENTED"); + return JS_FALSE; +} + +#pragma mark - Object Oriented Chipmunk + +/* + * Chipmunk Base Object + */ + +JSClass* JSB_cpBase_class = NULL; +JSObject* JSB_cpBase_object = NULL; +// Constructor +JSBool JSB_cpBase_constructor(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2( argc==1, cx, JS_FALSE, "Invalid arguments. Expecting 1"); + + JSObject *jsobj = JS_NewObject(cx, JSB_cpBase_class, JSB_cpBase_object, NULL); + + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + + void *handle = NULL; + + ok = jsval_to_opaque(cx, *argvp++, &handle); + + JSB_PRECONDITION(ok, "Error converting arguments for JSB_cpBase_constructor"); + + jsb_set_c_proxy_for_jsobject(jsobj, handle, JSB_C_FLAG_DO_NOT_CALL_FREE); + jsb_set_jsobject_for_proxy(jsobj, handle); + + JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(jsobj)); + return JS_TRUE; +} + +// Destructor +void JSB_cpBase_finalize(JSFreeOp *fop, JSObject *obj) +{ + CCLOGINFO("jsbindings: finalizing JS object %p (cpBase)", obj); + + // should not delete the handle since it was manually added +} + +JSBool JSB_cpBase_getHandle(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + JSB_PRECONDITION( jsthis, "Invalid jsthis object"); + JSB_PRECONDITION2(argc==0, cx, JS_FALSE, "Invalid number of arguments"); + + struct jsb_c_proxy_s* proxy = jsb_get_c_proxy_for_jsobject(jsthis); + void *handle = proxy->handle; + + jsval ret_val = opaque_to_jsval(cx, handle); + JS_SET_RVAL(cx, vp, ret_val); + return JS_TRUE; +} + +JSBool JSB_cpBase_setHandle(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSObject* jsthis = (JSObject *)JS_THIS_OBJECT(cx, vp); + JSB_PRECONDITION( jsthis, "Invalid jsthis object"); + JSB_PRECONDITION2(argc==1, cx, JS_FALSE, "Invalid number of arguments"); + + jsval *argvp = JS_ARGV(cx,vp); + + void *handle; + JSBool ok = jsval_to_opaque(cx, *argvp++, &handle); + JSB_PRECONDITION( ok, "Invalid parsing arguments"); + + jsb_set_c_proxy_for_jsobject(jsthis, handle, JSB_C_FLAG_DO_NOT_CALL_FREE); + jsb_set_jsobject_for_proxy(jsthis, handle); + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} + + +void JSB_cpBase_createClass(JSContext *cx, JSObject* globalObj, const char* name ) +{ + JSB_cpBase_class = (JSClass *)calloc(1, sizeof(JSClass)); + JSB_cpBase_class->name = name; + JSB_cpBase_class->addProperty = JS_PropertyStub; + JSB_cpBase_class->delProperty = JS_DeletePropertyStub; + JSB_cpBase_class->getProperty = JS_PropertyStub; + JSB_cpBase_class->setProperty = JS_StrictPropertyStub; + JSB_cpBase_class->enumerate = JS_EnumerateStub; + JSB_cpBase_class->resolve = JS_ResolveStub; + JSB_cpBase_class->convert = JS_ConvertStub; + JSB_cpBase_class->finalize = JSB_cpBase_finalize; + JSB_cpBase_class->flags = JSCLASS_HAS_PRIVATE; + + static JSPropertySpec properties[] = { + {0, 0, 0, 0, 0} + }; + static JSFunctionSpec funcs[] = { + JS_FN("getHandle", JSB_cpBase_getHandle, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FN("setHandle", JSB_cpBase_setHandle, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FS_END + }; + static JSFunctionSpec st_funcs[] = { + JS_FS_END + }; + + JSB_cpBase_object = JS_InitClass(cx, globalObj, NULL, JSB_cpBase_class, JSB_cpBase_constructor,0,properties,funcs,NULL,st_funcs); + JSBool found; + JS_SetPropertyAttributes(cx, globalObj, name, JSPROP_ENUMERATE | JSPROP_READONLY, &found); +} + +// Manual "methods" +// Constructor +JSBool JSB_cpPolyShape_constructor(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSB_PRECONDITION2(argc==3, cx, JS_FALSE, "Invalid number of arguments"); + JSObject *jsobj = JS_NewObject(cx, JSB_cpPolyShape_class, JSB_cpPolyShape_object, NULL); + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + cpBody* body; cpVect *verts; cpVect offset; + int numVerts; + + ok &= jsval_to_c_class( cx, *argvp++, (void**)&body, NULL ); + ok &= jsval_to_array_of_cpvect( cx, *argvp++, &verts, &numVerts); + ok &= jsval_to_cpVect( cx, *argvp++, (cpVect*) &offset ); + JSB_PRECONDITION(ok, "Error processing arguments"); + cpShape *shape = cpPolyShapeNew(body, numVerts, verts, offset); + + jsb_set_c_proxy_for_jsobject(jsobj, shape, JSB_C_FLAG_DO_NOT_CALL_FREE); + jsb_set_jsobject_for_proxy(jsobj, shape); + + JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(jsobj)); + + free(verts); + + return JS_TRUE; +} + + +#pragma mark Space Free functions +// +// When the space is removed, it should all remove its children. But not "free" them. +// "free" will be performed by the JS Garbage Collector +// +// Functions copied & pasted from ChipmunkDemo.c +// https://github.com/slembcke/Chipmunk-Physics/blob/master/Demo/ChipmunkDemo.c#L89 +// + +static void unroot_jsobject_from_handle(void *handle) +{ + JSObject *jsobj = jsb_get_jsobject_for_proxy(handle); + struct jsb_c_proxy_s *proxy = jsb_get_c_proxy_for_jsobject(jsobj); + + // HACK context from global + JSContext *cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_RemoveObjectRoot(cx, &proxy->jsobj); + +} +static void shapeFreeWrap(cpSpace *space, cpShape *shape, void *unused){ + cpSpaceRemoveShape(space, shape); + unroot_jsobject_from_handle(shape); +// cpShapeFree(shape); +} + +static void postShapeFree(cpShape *shape, cpSpace *space){ + cpSpaceAddPostStepCallback(space, (cpPostStepFunc)shapeFreeWrap, shape, NULL); +} + +static void constraintFreeWrap(cpSpace *space, cpConstraint *constraint, void *unused){ + cpSpaceRemoveConstraint(space, constraint); + unroot_jsobject_from_handle(constraint); +// cpConstraintFree(constraint); +} + +static void postConstraintFree(cpConstraint *constraint, cpSpace *space){ + cpSpaceAddPostStepCallback(space, (cpPostStepFunc)constraintFreeWrap, constraint, NULL); +} + +static void bodyFreeWrap(cpSpace *space, cpBody *body, void *unused){ + cpSpaceRemoveBody(space, body); + unroot_jsobject_from_handle(body); +// cpBodyFree(body); +} + +static void postBodyFree(cpBody *body, cpSpace *space){ + cpSpaceAddPostStepCallback(space, (cpPostStepFunc)bodyFreeWrap, body, NULL); +} + +// Safe and future proof way to remove and free all objects that have been added to the space. +void static freeSpaceChildren(cpSpace *space) +{ + // Must remove these BEFORE freeing the body or you will access dangling pointers. + cpSpaceEachShape(space, (cpSpaceShapeIteratorFunc)postShapeFree, space); + cpSpaceEachConstraint(space, (cpSpaceConstraintIteratorFunc)postConstraintFree, space); + + cpSpaceEachBody(space, (cpSpaceBodyIteratorFunc)postBodyFree, space); +} + +#endif // JSB_INCLUDE_CHIPMUNK diff --git a/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_manual.h b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_manual.h new file mode 100644 index 0000000000..c6b40ca757 --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_manual.h @@ -0,0 +1,103 @@ +/* + * JS Bindings: https://github.com/zynga/jsbindings + * + * Copyright (c) 2012 Zynga Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +#ifndef __js_bindings_chipmunk_manual +#define __js_bindings_chipmunk_manual + +#include "js_bindings_config.h" +#include "cocosjs_manual_conversions.h" +#include "js_manual_conversions.h" +#include "ScriptingCore.h" +#ifdef JSB_INCLUDE_CHIPMUNK + +#include "chipmunk.h" +#include "jsapi.h" + +#include "js_bindings_chipmunk_auto_classes.h" + +// Free Functions +JSBool JSB_cpSpaceAddCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpaceRemoveCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp); + +JSBool JSB_cpArbiterGetBodies(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiterGetShapes(JSContext *cx, uint32_t argc, jsval *vp); + +JSBool JSB_cpBodyGetUserData(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBodySetUserData(JSContext *cx, uint32_t argc, jsval *vp); + +// poly related +JSBool JSB_cpAreaForPoly(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpMomentForPoly(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpCentroidForPoly(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpRecenterPoly(JSContext *cx, uint32_t argc, jsval *vp); + +// "Methods" from the OO API +JSBool JSB_cpSpace_addCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpace_removeCollisionHandler(JSContext *cx, uint32_t argc, jsval *vp); + +// manually wrapped for rooting/unrooting purposes +JSBool JSB_cpSpace_addBody(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpace_addConstraint(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpace_addShape(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpace_addStaticShape(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpace_removeBody(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpace_removeConstraint(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpace_removeShape(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpSpace_removeStaticShape(JSContext *cx, uint32_t argc, jsval *vp); + + +JSBool JSB_cpArbiter_getBodies(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpArbiter_getShapes(JSContext *cx, uint32_t argc, jsval *vp); + +JSBool JSB_cpBody_constructor(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBody_getUserData(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_cpBody_setUserData(JSContext *cx, uint32_t argc, jsval *vp); + + +// convertions + +jsval cpBB_to_jsval(JSContext *cx, cpBB bb ); +JSBool jsval_to_cpBB( JSContext *cx, jsval vp, cpBB *ret ); +JSBool jsval_to_array_of_cpvect( JSContext *cx, jsval vp, cpVect**verts, int *numVerts); + +// requires cocos2d +#define cpVect_to_jsval CGPoint_to_jsval +#define jsval_to_cpVect jsval_to_CGPoint + + +// Object Oriented Chipmunk +void JSB_cpBase_createClass(JSContext* cx, JSObject* globalObj, const char * name ); +extern JSObject* JSB_cpBase_object; +extern JSClass* JSB_cpBase_class; +extern void register_CCPhysicsSprite(JSContext *cx, JSObject *obj); +extern void register_CCPhysicsDebugNode(JSContext *cx, JSObject *obj); + +// Manual constructor / destructors +JSBool JSB_cpPolyShape_constructor(JSContext *cx, uint32_t argc, jsval *vp); +void JSB_cpSpace_finalize(JSFreeOp *fop, JSObject *obj); + +#endif // JSB_INCLUDE_CHIPMUNK + +#endif // __js_bindings_chipmunk_manual diff --git a/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_registration.cpp b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_registration.cpp new file mode 100644 index 0000000000..a96434eace --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_registration.cpp @@ -0,0 +1,67 @@ +/* + * JS Bindings: https://github.com/zynga/jsbindings + * + * Copyright (c) 2012 Zynga Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef JSB_INCLUDE_CHIPMUNK +#define JSB_INCLUDE_CHIPMUNK +#endif + +#include "js_bindings_config.h" +#include "ScriptingCore.h" + + +// chipmunk +#include "js_bindings_chipmunk_auto_classes.h" +#include "js_bindings_chipmunk_functions.h" +#include "js_bindings_chipmunk_manual.h" + + +void jsb_register_chipmunk(JSContext *_cx, JSObject *object) +{ + // + // Chipmunk + // + JSObject *chipmunk = JS_NewObject(_cx, NULL, NULL, NULL); + jsval chipmunkVal = OBJECT_TO_JSVAL(chipmunk); + JS_SetProperty(_cx, object, "cp", &chipmunkVal); + + JSB_cpBase_createClass(_cx, chipmunk, "Base"); // manual base class registration +#include "js_bindings_chipmunk_auto_classes_registration.h" +#include "js_bindings_chipmunk_functions_registration.h" + + // manual + JS_DefineFunction(_cx, chipmunk, "spaceAddCollisionHandler", JSB_cpSpaceAddCollisionHandler, 8, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + JS_DefineFunction(_cx, chipmunk, "spaceRemoveCollisionHandler", JSB_cpSpaceRemoveCollisionHandler, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + JS_DefineFunction(_cx, chipmunk, "arbiterGetBodies", JSB_cpArbiterGetBodies, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + JS_DefineFunction(_cx, chipmunk, "arbiterGetShapes", JSB_cpArbiterGetShapes, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + JS_DefineFunction(_cx, chipmunk, "bodyGetUserData", JSB_cpBodyGetUserData, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + JS_DefineFunction(_cx, chipmunk, "bodySetUserData", JSB_cpBodySetUserData, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + + JS_DefineFunction(_cx, chipmunk, "areaForPoly", JSB_cpAreaForPoly, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + JS_DefineFunction(_cx, chipmunk, "momentForPoly", JSB_cpMomentForPoly, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + JS_DefineFunction(_cx, chipmunk, "centroidForPoly", JSB_cpCentroidForPoly, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + JS_DefineFunction(_cx, chipmunk, "recenterPoly", JSB_cpRecenterPoly, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + register_CCPhysicsSprite(_cx, object); + register_CCPhysicsDebugNode(_cx, object); +} + diff --git a/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_registration.h b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_registration.h new file mode 100644 index 0000000000..90bc320b87 --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/js_bindings_chipmunk_registration.h @@ -0,0 +1,31 @@ +/* + * JS Bindings: https://github.com/zynga/jsbindings + * + * Copyright (c) 2012 Zynga Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +#ifndef __JSB_CHIPMUNK_REGISTRATION +#define __JSB_CHIPMUNK_REGISTRATION + +void jsb_register_chipmunk( JSContext *globalC, JSObject *globalO); + +#endif // __JSB_CHIPMUNK_REGISTRATION diff --git a/cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj b/cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj new file mode 100644 index 0000000000..9148f9376f --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj @@ -0,0 +1,121 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + + + {21070E58-EEC6-4E16-8B4F-6D083DF55790} + Win32Proj + libJSBindingForChipmunk + + + + StaticLibrary + true + Unicode + v100 + v110 + v110_xp + + + StaticLibrary + false + Unicode + v100 + v110 + v110_xp + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + + + + Level3 + Disabled + WIN32;_WINDOWS;_DEBUG;_LIB;DEBUG;COCOS2D_DEBUG=1;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external\spidermonkey\include\win32;$(EngineRoot)external\chipmunk\include\chipmunk;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + false + + + Windows + true + + + if not exist "$(OutDir)" mkdir "$(OutDir)" +xcopy /Y /Q "$(ProjectDir)..\..\..\..\..\external\sqlite3\libraries\win32\*.*" "$(OutDir)" + + + + + Level3 + + + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;_LIB;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external\spidermonkey\include\win32;$(EngineRoot)external\chipmunk\include\chipmunk;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + + + Windows + true + true + true + + + + + + + + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj.filters b/cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj.filters new file mode 100644 index 0000000000..43253970bc --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj.filters @@ -0,0 +1,47 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + manual + + + manual + + + manual + + + manual + + + manual + + + manual + + + + + manual + + + manual + + + manual + + + manual + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj.user b/cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj.user new file mode 100644 index 0000000000..3f03091124 --- /dev/null +++ b/cocos/scripting/javascript/bindings/chipmunk/libJSBindingForChipmunk.vcxproj.user @@ -0,0 +1,6 @@ + + + + false + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/cocosbuilder/cocosbuilder_specifics.hpp b/cocos/scripting/javascript/bindings/cocosbuilder/cocosbuilder_specifics.hpp new file mode 100644 index 0000000000..f6b3252c57 --- /dev/null +++ b/cocos/scripting/javascript/bindings/cocosbuilder/cocosbuilder_specifics.hpp @@ -0,0 +1,23 @@ +#ifndef __JS_COCOSBUILDER_SPECIFICS_H__ +#define __JS_COCOSBUILDER_SPECIFICS_H__ + +#include "../cocos2d_specifics.hpp" + +class JSCCBAnimationWrapper: public JSCallbackWrapper { +public: + JSCCBAnimationWrapper() {} + virtual ~JSCCBAnimationWrapper() {} + + void animationCompleteCallback() { + + JSContext *cx = ScriptingCore::getInstance()->getGlobalContext(); + jsval retval = JSVAL_NULL; + + if(!JSVAL_IS_VOID(_jsCallback) && !JSVAL_IS_VOID(_jsThisObj)) { + JS_CallFunctionValue(cx, JSVAL_TO_OBJECT(_jsThisObj), _jsCallback, 0, NULL, &retval); + } + } + +}; + +#endif diff --git a/cocos/scripting/javascript/bindings/cocosbuilder/js_bindings_ccbreader.cpp b/cocos/scripting/javascript/bindings/cocosbuilder/js_bindings_ccbreader.cpp new file mode 100644 index 0000000000..733ac47b45 --- /dev/null +++ b/cocos/scripting/javascript/bindings/cocosbuilder/js_bindings_ccbreader.cpp @@ -0,0 +1,324 @@ +// +// js_bindings_ccbreader.cpp +// watermelon +// +// Created by Rohan Kuruvilla on 14/08/2012. +// +// + +#include "js_bindings_ccbreader.h" +#include "ScriptingCore.h" +#include "js_bindings_config.h" + +USING_NS_CC; +USING_NS_CC_EXT; +using namespace cocosbuilder; + +static void removeSelector(std::string &str) { + size_t found; + found = str.find(":"); + while (found!=std::string::npos){ + str.replace(found, found+1, ""); + found = str.find(":"); + } +} + +SEL_MenuHandler CCBScriptCallbackProxy::onResolveCCBCCMenuItemSelector(cocos2d::Object * pTarget, + const char * pSelectorName) { + this->callBackProp = pSelectorName; + removeSelector(this->callBackProp); + return menu_selector(CCBScriptCallbackProxy::menuItemCallback); +} + +Control::Handler CCBScriptCallbackProxy::onResolveCCBCCControlSelector(Object * pTarget, + const char * pSelectorName) { + + this->callBackProp = pSelectorName; + removeSelector(this->callBackProp); + return cccontrol_selector(CCBScriptCallbackProxy::controlCallback); +} + +bool CCBScriptCallbackProxy::onAssignCCBMemberVariable(Object * pTarget, + const char * pMemberVariableName, + Node * pNode) { + return true; +} + +void CCBScriptCallbackProxy::onNodeLoaded(Node * pNode, + NodeLoader * pNodeLoader) {} + +CCBSelectorResolver * CCBScriptCallbackProxy::createNew() { + CCBScriptCallbackProxy * ret = new CCBScriptCallbackProxy(); + ret->setJSOwner(this->owner); + return dynamic_cast(ret); +} + +void CCBScriptCallbackProxy::menuItemCallback(Object *pSender) { + ScriptingCore::getInstance()->executeFunctionWithOwner(owner, callBackProp.c_str() ); +} + +void CCBScriptCallbackProxy::controlCallback(Object *pSender, Control::EventType event) { + ScriptingCore::getInstance()->executeFunctionWithOwner(owner, callBackProp.c_str() ); +} + +void CCBScriptCallbackProxy::setCallbackProperty(const char *prop) { + callBackProp = prop; +} + +void CCBScriptCallbackProxy::setJSOwner(jsval ownr) { + owner = ownr; +} + +jsval CCBScriptCallbackProxy::getJSOwner() { + return owner; +} + +JSBool js_cocos2dx_CCBAnimationManager_animationCompleteCallback(JSContext *cx, uint32_t argc, jsval *vp) +{ + if (argc >= 1) { + jsval *argv = JS_ARGV(cx, vp); + + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cocosbuilder::CCBAnimationManager *node = (cocosbuilder::CCBAnimationManager *)(proxy ? proxy->ptr : NULL); + + JSCCBAnimationWrapper *tmpCobj = new JSCCBAnimationWrapper(); + tmpCobj->autorelease(); + + tmpCobj->setJSCallbackThis(argv[0]); + if(argc >= 2) { + tmpCobj->setJSCallbackFunc(argv[1]); + } + + node->setAnimationCompletedCallback(tmpCobj, callfunc_selector(JSCCBAnimationWrapper::animationCompleteCallback)); + + JS_SetReservedSlot(proxy->obj, 0, argv[0]); + JS_SetReservedSlot(proxy->obj, 1, argv[1]); + return JS_TRUE; + } + return JS_FALSE; +} + +JSBool js_cocos2dx_CCBReader_readNodeGraphFromFile(JSContext *cx, uint32_t argc, jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + JSBool ok = JS_TRUE; + JSObject *obj; + cocosbuilder::CCBReader* cobj; + obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cobj = (cocosbuilder::CCBReader *)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, cobj) + + if (argc == 2) { + const char* arg0; + std::string arg0_tmp; ok &= jsval_to_std_string(cx, argv[0], &arg0_tmp); arg0 = arg0_tmp.c_str(); + cocos2d::Object* arg1; + do { + js_proxy_t *proxy; + JSObject *tmpObj = JSVAL_TO_OBJECT(argv[1]); + proxy = jsb_get_js_proxy(tmpObj); + arg1 = (cocos2d::Object*)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, arg1) + } while (0); + + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + cocos2d::Node* ret = cobj->readNodeGraphFromFile(arg0, arg1); + jsval jsret; do { + if (ret) { + js_proxy_t *proxy = js_get_or_create_proxy(cx, ret); + jsret = OBJECT_TO_JSVAL(proxy->obj); + } else { + jsret = JSVAL_NULL; + } + } while (0); + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; + } + if (argc == 1) { + const char* arg0; + std::string arg0_tmp; ok &= jsval_to_std_string(cx, argv[0], &arg0_tmp); arg0 = arg0_tmp.c_str(); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + cocos2d::Node* ret = cobj->readNodeGraphFromFile(arg0); + jsval jsret; do { + if (ret) { + js_proxy_t *proxy = js_get_or_create_proxy(cx, ret); + jsret = OBJECT_TO_JSVAL(proxy->obj); + } else { + jsret = JSVAL_NULL; + } + } while (0); + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; + } + if (argc == 3) { + const char* arg0; + std::string arg0_tmp; ok &= jsval_to_std_string(cx, argv[0], &arg0_tmp); arg0 = arg0_tmp.c_str(); + cocos2d::Object* arg1; + do { + js_proxy_t *proxy; + JSObject *tmpObj = JSVAL_TO_OBJECT(argv[1]); + proxy = jsb_get_js_proxy(tmpObj); + arg1 = (cocos2d::Object*)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, arg1) + } while (0); + cocos2d::Size arg2; + ok &= jsval_to_ccsize(cx, argv[2], &arg2); + + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + cocos2d::Node* ret = cobj->readNodeGraphFromFile(arg0, arg1, arg2); + jsval jsret; do { + if (ret) { + js_proxy_t *proxy = js_get_or_create_proxy(cx, ret); + jsret = OBJECT_TO_JSVAL(proxy->obj); + } else { + jsret = JSVAL_NULL; + } + } while (0); + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; + } + return JS_FALSE; +} + +JSBool js_cocos2dx_CCBReader_createSceneWithNodeGraphFromFile(JSContext *cx, uint32_t argc, jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + JSBool ok = JS_TRUE; + JSObject *obj; + cocosbuilder::CCBReader* cobj; + obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cobj = (cocosbuilder::CCBReader *)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, cobj) + + if (argc == 2) { + const char* arg0; + std::string arg0_tmp; ok &= jsval_to_std_string(cx, argv[0], &arg0_tmp); arg0 = arg0_tmp.c_str(); + cocos2d::Object* arg1; + do { + js_proxy_t *proxy; + JSObject *tmpObj = JSVAL_TO_OBJECT(argv[1]); + proxy = jsb_get_js_proxy(tmpObj); + arg1 = (cocos2d::Object*)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, arg1) + } while (0); + + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + cocos2d::Scene* ret = cobj->createSceneWithNodeGraphFromFile(arg0, arg1); + jsval jsret; do { + if (ret) { + js_proxy_t *proxy = js_get_or_create_proxy(cx, ret); + jsret = OBJECT_TO_JSVAL(proxy->obj); + } else { + jsret = JSVAL_NULL; + } + } while (0); + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; + } + if (argc == 1) { + const char* arg0; + std::string arg0_tmp; ok &= jsval_to_std_string(cx, argv[0], &arg0_tmp); arg0 = arg0_tmp.c_str(); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + cocos2d::Scene* ret = cobj->createSceneWithNodeGraphFromFile(arg0); + jsval jsret; do { + if (ret) { + js_proxy_t *proxy = js_get_or_create_proxy(cx, ret); + jsret = OBJECT_TO_JSVAL(proxy->obj); + } else { + jsret = JSVAL_NULL; + } + } while (0); + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; + } + if (argc == 3) { + const char* arg0; + std::string arg0_tmp; ok &= jsval_to_std_string(cx, argv[0], &arg0_tmp); arg0 = arg0_tmp.c_str(); + cocos2d::Object* arg1; + do { + js_proxy_t *proxy; + JSObject *tmpObj = JSVAL_TO_OBJECT(argv[1]); + proxy = jsb_get_js_proxy(tmpObj); + arg1 = (cocos2d::Object*)(proxy ? proxy->ptr : NULL); + TEST_NATIVE_OBJECT(cx, arg1) + } while (0); + cocos2d::Size arg2; + ok &= jsval_to_ccsize(cx, argv[2], &arg2); + + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + cocos2d::Scene* ret = cobj->createSceneWithNodeGraphFromFile(arg0, arg1, arg2); + jsval jsret; do { + if (ret) { + js_proxy_t *proxy = js_get_or_create_proxy(cx, ret); + jsret = OBJECT_TO_JSVAL(proxy->obj); + } else { + jsret = JSVAL_NULL; + } + } while (0); + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; + } + + return JS_FALSE; +} + + +JSBool js_CocosBuilder_create(JSContext *cx, uint32_t argc, jsval *vp) +{ + + NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::getInstance(); + + ccNodeLoaderLibrary->registerNodeLoader("", JSLayerLoader::loader()); + + CCBReader * ret = new CCBReader(ccNodeLoaderLibrary); + ret->autorelease(); + + jsval jsret; + if (ret) { + js_proxy_t *proxy = jsb_get_native_proxy(ret); + if (proxy) { + jsret = OBJECT_TO_JSVAL(proxy->obj); + } else { + // create a new js obj of that class + proxy = js_get_or_create_proxy(cx, ret); + jsret = OBJECT_TO_JSVAL(proxy->obj); + } + } else { + jsret = JSVAL_NULL; + } + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; + +} + +extern JSObject* jsb_CCBReader_prototype; +extern JSObject* jsb_CCBAnimationManager_prototype; + +void register_CCBuilderReader(JSContext *cx, JSObject *obj) { + jsval nsval; + JSObject *ns; + JS_GetProperty(cx, obj, "cc", &nsval); + if (nsval == JSVAL_VOID) { + ns = JS_NewObject(cx, NULL, NULL, NULL); + nsval = OBJECT_TO_JSVAL(ns); + JS_SetProperty(cx, obj, "cc", &nsval); + } else { + JS_ValueToObject(cx, nsval, &ns); + } + obj = ns; + + JSObject *tmpObj = JSVAL_TO_OBJECT(anonEvaluate(cx, obj, "(function () { return cc._Reader; })()")); + JS_DefineFunction(cx, tmpObj, "create", js_CocosBuilder_create, 2, JSPROP_READONLY | JSPROP_PERMANENT); + JS_DefineFunction(cx, tmpObj, "loadScene", js_cocos2dx_CCBReader_createSceneWithNodeGraphFromFile, 2, JSPROP_READONLY | JSPROP_PERMANENT); + + JS_DefineFunction(cx, jsb_CCBReader_prototype, "load", js_cocos2dx_CCBReader_readNodeGraphFromFile, 2, JSPROP_READONLY | JSPROP_PERMANENT); + JS_DefineFunction(cx, jsb_CCBAnimationManager_prototype, "setCompletedAnimationCallback", js_cocos2dx_CCBAnimationManager_animationCompleteCallback, 2, JSPROP_READONLY | JSPROP_PERMANENT); +} diff --git a/cocos/scripting/javascript/bindings/cocosbuilder/js_bindings_ccbreader.h b/cocos/scripting/javascript/bindings/cocosbuilder/js_bindings_ccbreader.h new file mode 100644 index 0000000000..b1b3b187cc --- /dev/null +++ b/cocos/scripting/javascript/bindings/cocosbuilder/js_bindings_ccbreader.h @@ -0,0 +1,60 @@ +// +// js_bindings_ccbreader.h +// watermelon +// +// Created by Rohan Kuruvilla on 14/08/2012. +// +// +#ifndef __JS_BINDINGS_CCBREADER_H__ +#define __JS_BINDINGS_CCBREADER_H__ + +#include "jsapi.h" +#include "cocosbuilder_specifics.hpp" +#include "cocosbuilder/CocosBuilder.h" + +class CCBScriptCallbackProxy: public cocos2d::Layer +, public cocosbuilder::CCBSelectorResolver +, public cocosbuilder::CCBMemberVariableAssigner { + + std::string callBackProp; + jsval owner; + +public: + + + CCBScriptCallbackProxy () {} + virtual ~CCBScriptCallbackProxy() {} + + CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(CCBScriptCallbackProxy, create); + virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(cocos2d::Object * pTarget, + const char * pSelectorName); + + virtual cocos2d::extension::Control::Handler onResolveCCBCCControlSelector(cocos2d::Object * pTarget, + const char * pSelectorName); + virtual bool onAssignCCBMemberVariable(cocos2d::Object * pTarget, const char * pMemberVariableName, + cocos2d::Node * pNode); + virtual void onNodeLoaded(cocos2d::Node * pNode, + cocosbuilder::NodeLoader * pNodeLoader); + + virtual CCBSelectorResolver * createNew(); + void menuItemCallback(Object *pSender); + void controlCallback(Object *pSender, cocos2d::extension::Control::EventType event); + void setCallbackProperty(const char *prop); + void setJSOwner(jsval ownr); + jsval getJSOwner(); +}; + + +class JSLayerLoader : public cocosbuilder::LayerLoader { +public: + CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(JSLayerLoader, loader); + +protected: + CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(CCBScriptCallbackProxy); +}; + +void register_CCBuilderReader(JSContext *cx, JSObject *global); +JSBool js_CocosBuilder_Run(JSContext *cx, uint32_t argc, jsval *vp); + +#endif /* __JS_BINDINGS_CCBREADER_H__ */ + diff --git a/cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj b/cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj new file mode 100644 index 0000000000..d6f2eb8d12 --- /dev/null +++ b/cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj @@ -0,0 +1,119 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + + {F9DA0FC1-651B-457B-962E-A4D61CEBF5FD} + Win32Proj + libJSBindingForBuilder + + + + StaticLibrary + true + Unicode + v100 + v110 + v110_xp + + + StaticLibrary + false + Unicode + v100 + v110 + v110_xp + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + + + + Level3 + Disabled + WIN32;_WINDOWS;_DEBUG;_LIB;DEBUG;COCOS2D_DEBUG=1;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\editor-support;$(EngineRoot)cocos\editor-support\cocosbuilder;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external\spidermonkey\include\win32;$(EngineRoot)external\chipmunk\include\chipmunk;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + false + + + Windows + true + + + if not exist "$(OutDir)" mkdir "$(OutDir)" +xcopy /Y /Q "$(ProjectDir)..\..\..\..\..\external\sqlite3\libraries\win32\*.*" "$(OutDir)" + + + + + Level3 + + + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;_LIB;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\editor-support;$(EngineRoot)cocos\editor-support\cocosbuilder;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external\spidermonkey\include\win32;$(EngineRoot)external\chipmunk\include\chipmunk;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + + + Windows + true + true + true + + + + + + + + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj.filters b/cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj.filters new file mode 100644 index 0000000000..6746ab6be9 --- /dev/null +++ b/cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj.filters @@ -0,0 +1,37 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + generated + + + manual + + + + + generated + + + manual + + + manual + + + + + generated + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj.user b/cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj.user new file mode 100644 index 0000000000..3f03091124 --- /dev/null +++ b/cocos/scripting/javascript/bindings/cocosbuilder/libJSBindingForBuilder.vcxproj.user @@ -0,0 +1,6 @@ + + + + false + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/cocostudio/jsb_cocos2dx_studio_manual.cpp b/cocos/scripting/javascript/bindings/cocostudio/jsb_cocos2dx_studio_manual.cpp new file mode 100644 index 0000000000..34ecbca985 --- /dev/null +++ b/cocos/scripting/javascript/bindings/cocostudio/jsb_cocos2dx_studio_manual.cpp @@ -0,0 +1,229 @@ +// +// jsb_cocos2dx_studio_manual.h +// +// Created by LinWenhai on 20/10/13. +// +// +#include "jsb_cocos2dx_studio_manual.h" +#include "ScriptingCore.h" +#include "cocos2d_specifics.hpp" +#include "cocostudio/CocoStudio.h" + +class JSArmatureWrapper: public JSCallbackWrapper { +public: + JSArmatureWrapper(); + virtual ~JSArmatureWrapper(); + + virtual void setJSCallbackThis(jsval thisObj); + + void movementCallbackFunc(cocostudio::Armature * pArmature, cocostudio::MovementEventType pMovementEventType, const char *pMovementId); + void frameCallbackFunc(cocostudio::Bone *pBone, const char *frameEventName, int originFrameIndex, int currentFrameIndex); + void addArmatureFileInfoAsyncCallbackFunc(float percent); + +private: + bool m_bNeedUnroot; +}; + +JSArmatureWrapper::JSArmatureWrapper() + : m_bNeedUnroot(false) +{ + +} + +JSArmatureWrapper::~JSArmatureWrapper() +{ + if (m_bNeedUnroot) + { + JSObject *thisObj = JSVAL_TO_OBJECT(_jsThisObj); + JSContext *cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_RemoveObjectRoot(cx, &thisObj); + } +} + +void JSArmatureWrapper::setJSCallbackThis(jsval _jsThisObj) +{ + JSCallbackWrapper::setJSCallbackThis(_jsThisObj); + + JSObject *thisObj = JSVAL_TO_OBJECT(_jsThisObj); + js_proxy *p = jsb_get_js_proxy(thisObj); + if (!p) + { + JSContext *cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_AddObjectRoot(cx, &thisObj); + m_bNeedUnroot = true; + } +} + +void JSArmatureWrapper::movementCallbackFunc(cocostudio::Armature *pArmature, cocostudio::MovementEventType pMovementEventType, const char *pMovementId) +{ + JSContext *cx = ScriptingCore::getInstance()->getGlobalContext(); + JSObject *thisObj = JSVAL_IS_VOID(_jsThisObj) ? NULL : JSVAL_TO_OBJECT(_jsThisObj); + js_proxy_t *proxy = js_get_or_create_proxy(cx, pArmature); + jsval retval; + if (_jsCallback != JSVAL_VOID) + { + int movementEventType = (int)pMovementEventType; + jsval movementVal = INT_TO_JSVAL(movementEventType); + + jsval idVal = c_string_to_jsval(cx, pMovementId); + + jsval valArr[3]; + valArr[0] = OBJECT_TO_JSVAL(proxy->obj); + valArr[1] = movementVal; + valArr[2] = idVal; + + JS_AddValueRoot(cx, valArr); + JS_CallFunctionValue(cx, thisObj, _jsCallback, 3, valArr, &retval); + JS_RemoveValueRoot(cx, valArr); + } +} + +void JSArmatureWrapper::addArmatureFileInfoAsyncCallbackFunc(float percent) +{ + JSContext *cx = ScriptingCore::getInstance()->getGlobalContext(); + JSObject *thisObj = JSVAL_IS_VOID(_jsThisObj) ? NULL : JSVAL_TO_OBJECT(_jsThisObj); + jsval retval; + if (_jsCallback != JSVAL_VOID) + { + jsval percentVal = DOUBLE_TO_JSVAL(percent); + + JS_AddValueRoot(cx, &percentVal); + JS_CallFunctionValue(cx, thisObj, _jsCallback, 1, &percentVal, &retval); + JS_RemoveValueRoot(cx, &percentVal); + } +} + + +void JSArmatureWrapper::frameCallbackFunc(cocostudio::Bone *pBone, const char *frameEventName, int originFrameIndex, int currentFrameIndex) +{ + JSContext *cx = ScriptingCore::getInstance()->getGlobalContext(); + JSObject *thisObj = JSVAL_IS_VOID(_jsThisObj) ? NULL : JSVAL_TO_OBJECT(_jsThisObj); + js_proxy_t *proxy = js_get_or_create_proxy(cx, pBone); + jsval retval; + if (_jsCallback != JSVAL_VOID) + { + jsval nameVal = c_string_to_jsval(cx, frameEventName); + jsval originIndexVal = INT_TO_JSVAL(originFrameIndex); + jsval currentIndexVal = INT_TO_JSVAL(currentFrameIndex); + + jsval valArr[4]; + valArr[0] = OBJECT_TO_JSVAL(proxy->obj); + valArr[1] = nameVal; + valArr[2] = originIndexVal; + valArr[3] = currentIndexVal; + + JS_AddValueRoot(cx, valArr); + JS_CallFunctionValue(cx, thisObj, _jsCallback, 4, valArr, &retval); + JS_RemoveValueRoot(cx, valArr); + } +} + +static JSBool js_cocos2dx_ArmatureAnimation_setMovementEventCallFunc(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cocostudio::ArmatureAnimation* cobj = (cocostudio::ArmatureAnimation *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + + if (argc == 2) { + jsval *argv = JS_ARGV(cx, vp); + + JSArmatureWrapper *tmpObj = new JSArmatureWrapper(); + tmpObj->autorelease(); + + tmpObj->setJSCallbackFunc(argv[0]); + tmpObj->setJSCallbackThis(argv[1]); + + cobj->setMovementEventCallFunc(tmpObj, movementEvent_selector(JSArmatureWrapper::movementCallbackFunc)); + + return JS_TRUE; + } + JS_ReportError(cx, "Invalid number of arguments"); + return JS_FALSE; +} + +static JSBool js_cocos2dx_ArmatureAnimation_setFrameEventCallFunc(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cocostudio::ArmatureAnimation* cobj = (cocostudio::ArmatureAnimation *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + + if (argc == 2) { + jsval *argv = JS_ARGV(cx, vp); + + JSArmatureWrapper *tmpObj = new JSArmatureWrapper(); + tmpObj->autorelease(); + + tmpObj->setJSCallbackFunc(argv[0]); + tmpObj->setJSCallbackThis(argv[1]); + + cobj->setFrameEventCallFunc(tmpObj, frameEvent_selector(JSArmatureWrapper::frameCallbackFunc)); + + return JS_TRUE; + } + JS_ReportError(cx, "Invalid number of arguments"); + return JS_FALSE; +} + +static JSBool jsb_Animation_addArmatureFileInfoAsyncCallFunc(JSContext *cx, uint32_t argc, jsval *vp) +{ + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cocostudio::ArmatureDataManager* cobj = (cocostudio::ArmatureDataManager *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + + if (argc == 3) { + jsval *argv = JS_ARGV(cx, vp); + + JSArmatureWrapper *tmpObj = new JSArmatureWrapper(); + tmpObj->autorelease(); + + tmpObj->setJSCallbackFunc(argv[2]); + tmpObj->setJSCallbackThis(argv[1]); + + std::string ret; + jsval_to_std_string(cx, argv[0], &ret); + + cobj->addArmatureFileInfoAsync(ret.c_str(), tmpObj, schedule_selector(JSArmatureWrapper::addArmatureFileInfoAsyncCallbackFunc)); + + return JS_TRUE; + } + + if(argc == 5){ + jsval *argv = JS_ARGV(cx, vp); + + JSArmatureWrapper *tmpObj = new JSArmatureWrapper(); + tmpObj->autorelease(); + + tmpObj->setJSCallbackFunc(argv[4]); + tmpObj->setJSCallbackThis(argv[3]); + + std::string imagePath; + jsval_to_std_string(cx ,argv[0] , &imagePath); + + std::string plistPath; + jsval_to_std_string(cx ,argv[1] , &plistPath); + + std::string configFilePath; + jsval_to_std_string(cx ,argv[2] , &configFilePath); + + cobj->addArmatureFileInfoAsync(imagePath.c_str(), plistPath.c_str(), configFilePath.c_str(), tmpObj, schedule_selector(JSArmatureWrapper::addArmatureFileInfoAsyncCallbackFunc)); + + return JS_TRUE; + } + JS_ReportError(cx, "Invalid number of arguments"); + return JS_FALSE; +} + +extern JSObject* jsb_ArmatureAnimation_prototype; +extern JSObject* jsb_ArmatureDataManager_prototype; + +void register_all_cocos2dx_studio_manual(JSContext* cx, JSObject* global) +{ + JS_DefineFunction(cx, jsb_ArmatureAnimation_prototype, "setMovementEventCallFunc", js_cocos2dx_ArmatureAnimation_setMovementEventCallFunc, 2, JSPROP_READONLY | JSPROP_PERMANENT); + + JS_DefineFunction(cx, jsb_ArmatureAnimation_prototype, "setFrameEventCallFunc", js_cocos2dx_ArmatureAnimation_setFrameEventCallFunc, 2, JSPROP_READONLY | JSPROP_PERMANENT); + + JS_DefineFunction(cx, jsb_ArmatureDataManager_prototype, "addArmatureFileInfoAsync", jsb_Animation_addArmatureFileInfoAsyncCallFunc, 3, JSPROP_READONLY | JSPROP_PERMANENT); +} \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/cocostudio/jsb_cocos2dx_studio_manual.h b/cocos/scripting/javascript/bindings/cocostudio/jsb_cocos2dx_studio_manual.h new file mode 100644 index 0000000000..35ebd55755 --- /dev/null +++ b/cocos/scripting/javascript/bindings/cocostudio/jsb_cocos2dx_studio_manual.h @@ -0,0 +1,16 @@ +// +// jsb_cocos2dx_studio_manual.h +// +// Created by LinWenhai on 20/10/13. +// +// + +#ifndef __jsb_cocos2dx_studio_manual__ +#define __jsb_cocos2dx_studio_manual__ + +#include "jsapi.h" +#include "jsfriendapi.h" + +void register_all_cocos2dx_studio_manual(JSContext* cx, JSObject* global); + +#endif /* defined(__jsb_cocos2dx_studio_manual__) */ diff --git a/cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj b/cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj new file mode 100644 index 0000000000..2212730521 --- /dev/null +++ b/cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj @@ -0,0 +1,118 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + {79D34511-E54E-410A-8BBA-EF175AD6C695} + Win32Proj + libJSBindingForStudio + + + + StaticLibrary + true + Unicode + v100 + v110 + v110_xp + + + StaticLibrary + false + Unicode + v100 + v110 + v110_xp + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + + + + Level3 + Disabled + WIN32;_WINDOWS;_DEBUG;_LIB;DEBUG;COCOS2D_DEBUG=1;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\editor-support;$(EngineRoot)cocos\editor-support\cocostudio;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external;$(EngineRoot)external\spidermonkey\include\win32;$(EngineRoot)external\chipmunk\include\chipmunk;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + false + + + Windows + true + + + if not exist "$(OutDir)" mkdir "$(OutDir)" +xcopy /Y /Q "$(ProjectDir)..\..\..\..\..\external\sqlite3\libraries\win32\*.*" "$(OutDir)" + + + + + Level3 + + + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;_LIB;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\editor-support;$(EngineRoot)cocos\editor-support\cocostudio;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external;$(EngineRoot)external\spidermonkey\include\win32;$(EngineRoot)external\chipmunk\include\chipmunk;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + + + Windows + true + true + true + + + + + + + + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj.filters b/cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj.filters new file mode 100644 index 0000000000..16be2bb316 --- /dev/null +++ b/cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj.filters @@ -0,0 +1,34 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + generated + + + manual + + + + + generated + + + manual + + + + + generated + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj.user b/cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj.user new file mode 100644 index 0000000000..3f03091124 --- /dev/null +++ b/cocos/scripting/javascript/bindings/cocostudio/libJSBindingForStudio.vcxproj.user @@ -0,0 +1,6 @@ + + + + false + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/extension/jsb_cocos2dx_extension_manual.cpp b/cocos/scripting/javascript/bindings/extension/jsb_cocos2dx_extension_manual.cpp new file mode 100644 index 0000000000..9f2ab82470 --- /dev/null +++ b/cocos/scripting/javascript/bindings/extension/jsb_cocos2dx_extension_manual.cpp @@ -0,0 +1,799 @@ +// +// jsb_cocos2d_extension_manual.cpp +// +// Created by James Chen on 3/11/13. +// +// + +#include "jsb_cocos2dx_extension_manual.h" +#include "extensions/cocos-ext.h" +#include "ScriptingCore.h" +#include "cocos2d_specifics.hpp" + +USING_NS_CC; +USING_NS_CC_EXT; + + +class JSB_ScrollViewDelegate +: public Object +, public ScrollViewDelegate +{ +public: + JSB_ScrollViewDelegate() + : _JSDelegate(NULL) + , _needUnroot(false) + {} + + virtual ~JSB_ScrollViewDelegate() + { + if (_needUnroot) + { + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_RemoveObjectRoot(cx, &_JSDelegate); + } + } + + virtual void scrollViewDidScroll(ScrollView* view) + { + js_proxy_t * p = jsb_get_native_proxy(view); + if (!p) return; + + jsval arg = OBJECT_TO_JSVAL(p->obj); + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), "scrollViewDidScroll", 1, &arg, NULL); + } + + virtual void scrollViewDidZoom(ScrollView* view) + { + js_proxy_t * p = jsb_get_native_proxy(view); + if (!p) return; + + jsval arg = OBJECT_TO_JSVAL(p->obj); + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), "scrollViewDidZoom", 1, &arg, NULL); + } + + void setJSDelegate(JSObject* pJSDelegate) + { + _JSDelegate = pJSDelegate; + + // Check whether the js delegate is a pure js object. + js_proxy_t* p = jsb_get_js_proxy(_JSDelegate); + if (!p) + { + _needUnroot = true; + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_AddNamedObjectRoot(cx, &_JSDelegate, "TableViewDelegate"); + } + } +private: + JSObject* _JSDelegate; + bool _needUnroot; +}; + +static JSBool js_cocos2dx_CCScrollView_setDelegate(JSContext *cx, uint32_t argc, jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cocos2d::extension::ScrollView* cobj = (cocos2d::extension::ScrollView *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + + if (argc == 1) + { + // save the delegate + JSObject *jsDelegate = JSVAL_TO_OBJECT(argv[0]); + JSB_ScrollViewDelegate* nativeDelegate = new JSB_ScrollViewDelegate(); + nativeDelegate->setJSDelegate(jsDelegate); + + cobj->setUserObject(nativeDelegate); + cobj->setDelegate(nativeDelegate); + + nativeDelegate->release(); + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; + } + JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 1); + return JS_FALSE; +} + + +#define KEY_TABLEVIEW_DATA_SOURCE "TableViewDataSource" +#define KEY_TABLEVIEW_DELEGATE "TableViewDelegate" + +class JSB_TableViewDelegate +: public Object +, public TableViewDelegate +{ +public: + JSB_TableViewDelegate() + : _JSDelegate(NULL) + , _needUnroot(false) + {} + + virtual ~JSB_TableViewDelegate() + { + if (_needUnroot) + { + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_RemoveObjectRoot(cx, &_JSDelegate); + } + } + + virtual void scrollViewDidScroll(ScrollView* view) + { + callJSDelegate(view, "scrollViewDidScroll"); + } + + virtual void scrollViewDidZoom(ScrollView* view) + { + callJSDelegate(view, "scrollViewDidZoom"); + } + + virtual void tableCellTouched(TableView* table, TableViewCell* cell) + { + callJSDelegate(table, cell, "tableCellTouched"); + } + + virtual void tableCellHighlight(TableView* table, TableViewCell* cell) + { + callJSDelegate(table, cell, "tableCellHighlight"); + } + + virtual void tableCellUnhighlight(TableView* table, TableViewCell* cell) + { + callJSDelegate(table, cell, "tableCellUnhighlight"); + } + + virtual void tableCellWillRecycle(TableView* table, TableViewCell* cell) + { + callJSDelegate(table, cell, "tableCellWillRecycle"); + } + + void setJSDelegate(JSObject* pJSDelegate) + { + _JSDelegate = pJSDelegate; + + // Check whether the js delegate is a pure js object. + js_proxy_t* p = jsb_get_js_proxy(_JSDelegate); + if (!p) + { + _needUnroot = true; + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_AddNamedObjectRoot(cx, &_JSDelegate, "TableViewDelegate"); + } + } + + +private: + void callJSDelegate(ScrollView* view, std::string jsFunctionName) + { + js_proxy_t * p = jsb_get_native_proxy(view); + if (!p) return; + + jsval arg = OBJECT_TO_JSVAL(p->obj); + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), jsFunctionName.c_str(), 1, &arg, NULL); + } + + void callJSDelegate(TableView* table, TableViewCell* cell, std::string jsFunctionName) + { + js_proxy_t * p = jsb_get_native_proxy(table); + if (!p) return; + + js_proxy_t * pCellProxy = jsb_get_native_proxy(cell); + if (!pCellProxy) return; + + jsval args[2]; + args[0] = OBJECT_TO_JSVAL(p->obj); + args[1] = OBJECT_TO_JSVAL(pCellProxy->obj); + + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), jsFunctionName.c_str(), 2, args, NULL); + } + + JSObject* _JSDelegate; + bool _needUnroot; +}; + +static JSBool js_cocos2dx_CCTableView_setDelegate(JSContext *cx, uint32_t argc, jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cocos2d::extension::TableView* cobj = (cocos2d::extension::TableView *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + + if (argc == 1) + { + // save the delegate + JSObject *jsDelegate = JSVAL_TO_OBJECT(argv[0]); + JSB_TableViewDelegate* nativeDelegate = new JSB_TableViewDelegate(); + nativeDelegate->setJSDelegate(jsDelegate); + + Dictionary* userDict = static_cast(cobj->getUserObject()); + if (NULL == userDict) + { + userDict = new Dictionary(); + cobj->setUserObject(userDict); + userDict->release(); + } + + userDict->setObject(nativeDelegate, KEY_TABLEVIEW_DELEGATE); + + cobj->setDelegate(nativeDelegate); + + nativeDelegate->release(); + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; + } + JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 1); + return JS_FALSE; +} + +class JSB_TableViewDataSource +: public Object +, public TableViewDataSource +{ +public: + JSB_TableViewDataSource() + : _JSTableViewDataSource(NULL) + , _needUnroot(false) + {} + + virtual ~JSB_TableViewDataSource() + { + if (_needUnroot) + { + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_RemoveObjectRoot(cx, &_JSTableViewDataSource); + } + } + + virtual Size tableCellSizeForIndex(TableView *table, unsigned int idx) + { + jsval ret; + bool ok = callJSDelegate(table, idx, "tableCellSizeForIndex", ret); + if (!ok) + { + ok = callJSDelegate(table, "cellSizeForTable", ret); + } + if (ok) + { + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + Size size; + JSBool isSucceed = jsval_to_ccsize(cx, ret, &size); + if (isSucceed) return size; + } + return Size::ZERO; + + } + + virtual TableViewCell* tableCellAtIndex(TableView *table, unsigned int idx) + { + jsval ret; + bool ok = callJSDelegate(table, idx, "tableCellAtIndex", ret); + if (ok) + { + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + cocos2d::extension::TableViewCell* arg0; + do { + js_proxy_t *proxy; + JSObject *tmpObj = JSVAL_TO_OBJECT(ret); + proxy = jsb_get_js_proxy(tmpObj); + arg0 = (cocos2d::extension::TableViewCell*)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( arg0, cx, NULL, "Invalid Native Object"); + } while (0); + return arg0; + } + return NULL; + } + + virtual unsigned int numberOfCellsInTableView(TableView *table) + { + jsval ret; + bool ok = callJSDelegate(table, "numberOfCellsInTableView", ret); + if (ok) + { + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + uint32_t count = 0; + JSBool isSucceed = jsval_to_uint32(cx, ret, &count); + if (isSucceed) return count; + } + return 0; + } + + + void setTableViewDataSource(JSObject* pJSSource) + { + _JSTableViewDataSource = pJSSource; + + // Check whether the js delegate is a pure js object. + js_proxy_t* p = jsb_get_js_proxy(_JSTableViewDataSource); + if (!p) + { + _needUnroot = true; + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_AddNamedObjectRoot(cx, &_JSTableViewDataSource, "TableViewDataSource"); + } + } + +private: + bool callJSDelegate(TableView* table, std::string jsFunctionName, jsval& retVal) + { + js_proxy_t * p = jsb_get_native_proxy(table); + if (!p) return false; + + JSBool hasAction; + jsval temp_retval; + jsval dataVal = OBJECT_TO_JSVAL(p->obj); + + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JSObject* obj = _JSTableViewDataSource; + + if (JS_HasProperty(cx, obj, jsFunctionName.c_str(), &hasAction) && hasAction) + { + if(!JS_GetProperty(cx, obj, jsFunctionName.c_str(), &temp_retval)) + { + return false; + } + if(temp_retval == JSVAL_VOID) + { + return false; + } + + JSAutoCompartment ac(cx, obj); + JS_CallFunctionName(cx, obj, jsFunctionName.c_str(), + 1, &dataVal, &retVal); + return true; + } + return false; + } + + bool callJSDelegate(TableView* table, int idx, std::string jsFunctionName, jsval& retVal) + { + js_proxy_t * p = jsb_get_native_proxy(table); + if (!p) return false; + + + JSBool hasAction; + jsval temp_retval; + jsval dataVal[2]; + dataVal[0] = OBJECT_TO_JSVAL(p->obj); + dataVal[1] = INT_TO_JSVAL(idx); + + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JSObject* obj = _JSTableViewDataSource; + + if (JS_HasProperty(cx, obj, jsFunctionName.c_str(), &hasAction) && hasAction) + { + if(!JS_GetProperty(cx, obj, jsFunctionName.c_str(), &temp_retval)) + { + return false; + } + + if(temp_retval == JSVAL_VOID) + { + return false; + } + + JSAutoCompartment ac(cx, obj); + JS_CallFunctionName(cx, obj, jsFunctionName.c_str(), + 2, dataVal, &retVal); + return true; + } + return false; + } + +private: + JSObject* _JSTableViewDataSource; + bool _needUnroot; +}; + +static JSBool js_cocos2dx_CCTableView_setDataSource(JSContext *cx, uint32_t argc, jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cocos2d::extension::TableView* cobj = (cocos2d::extension::TableView *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + if (argc == 1) + { + JSB_TableViewDataSource* pNativeSource = new JSB_TableViewDataSource(); + pNativeSource->setTableViewDataSource(JSVAL_TO_OBJECT(argv[0])); + + Dictionary* userDict = static_cast(cobj->getUserObject()); + if (NULL == userDict) + { + userDict = new Dictionary(); + cobj->setUserObject(userDict); + userDict->release(); + } + + userDict->setObject(pNativeSource, KEY_TABLEVIEW_DATA_SOURCE); + + cobj->setDataSource(pNativeSource); + + pNativeSource->release(); + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; + } + + JS_ReportError(cx, "wrong number of arguments"); + return JS_FALSE; +} + +static JSBool js_cocos2dx_CCTableView_create(JSContext *cx, uint32_t argc, jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + JSBool ok = JS_TRUE; + if (argc == 3 || argc == 2) + { + + JSB_TableViewDataSource* pNativeSource = new JSB_TableViewDataSource(); + pNativeSource->setTableViewDataSource(JSVAL_TO_OBJECT(argv[0])); + + cocos2d::Size arg1; + ok &= jsval_to_ccsize(cx, argv[1], &arg1); + cocos2d::extension::TableView* ret = NULL; + ret = new TableView(); + ret->autorelease(); + + ret->setDataSource(pNativeSource); + + jsval jsret; + do { + if (ret) + { + js_proxy_t *proxy = js_get_or_create_proxy(cx, ret); + jsret = OBJECT_TO_JSVAL(proxy->obj); + } + else + { + jsret = JSVAL_NULL; + } + } while (0); + + if (argc == 2) + { + ret->initWithViewSize(arg1); + } + else + { + cocos2d::Node* arg2; + do + { + js_proxy_t *proxy; + JSObject *tmpObj = JSVAL_TO_OBJECT(argv[2]); + proxy = jsb_get_js_proxy(tmpObj); + arg2 = (cocos2d::Node*)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( arg2, cx, JS_FALSE, "Invalid Native Object"); + } while (0); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + ret->initWithViewSize(arg1, arg2); + } + ret->reloadData(); + + Dictionary* userDict = new Dictionary(); + userDict->setObject(pNativeSource, KEY_TABLEVIEW_DATA_SOURCE); + ret->setUserObject(userDict); + userDict->release(); + + pNativeSource->release(); + + JS_SET_RVAL(cx, vp, jsret); + return JS_TRUE; + } + + JS_ReportError(cx, "wrong number of arguments"); + return JS_FALSE; +} + +class JSB_EditBoxDelegate +: public Object +, public EditBoxDelegate +{ +public: + JSB_EditBoxDelegate() + : _JSDelegate(NULL) + , _needUnroot(false) + {} + + virtual ~JSB_EditBoxDelegate() + { + if (_needUnroot) + { + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_RemoveObjectRoot(cx, &_JSDelegate); + } + } + + virtual void editBoxEditingDidBegin(EditBox* editBox) + { + js_proxy_t * p = jsb_get_native_proxy(editBox); + if (!p) return; + + jsval arg = OBJECT_TO_JSVAL(p->obj); + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), "editBoxEditingDidBegin", 1, &arg, NULL); + } + + virtual void editBoxEditingDidEnd(EditBox* editBox) + { + js_proxy_t * p = jsb_get_native_proxy(editBox); + if (!p) return; + + jsval arg = OBJECT_TO_JSVAL(p->obj); + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), "editBoxEditingDidEnd", 1, &arg, NULL); + } + + virtual void editBoxTextChanged(EditBox* editBox, const std::string& text) + { + js_proxy_t * p = jsb_get_native_proxy(editBox); + if (!p) return; + + jsval dataVal[2]; + dataVal[0] = OBJECT_TO_JSVAL(p->obj); + std::string arg1 = text; + dataVal[1] = std_string_to_jsval(ScriptingCore::getInstance()->getGlobalContext(), arg1); + + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), "editBoxTextChanged", 2, dataVal, NULL); + } + + virtual void editBoxReturn(EditBox* editBox) + { + js_proxy_t * p = jsb_get_native_proxy(editBox); + if (!p) return; + + jsval arg = OBJECT_TO_JSVAL(p->obj); + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), "editBoxReturn", 1, &arg, NULL); + } + + void setJSDelegate(JSObject* pJSDelegate) + { + _JSDelegate = pJSDelegate; + + // Check whether the js delegate is a pure js object. + js_proxy_t* p = jsb_get_js_proxy(_JSDelegate); + if (!p) + { + _needUnroot = true; + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_AddNamedObjectRoot(cx, &_JSDelegate, "TableViewDelegate"); + } + } +private: + JSObject* _JSDelegate; + bool _needUnroot; +}; + +static JSBool js_cocos2dx_CCEditBox_setDelegate(JSContext *cx, uint32_t argc, jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cocos2d::extension::EditBox* cobj = (cocos2d::extension::EditBox *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + + if (argc == 1) + { + // save the delegate + JSObject *jsDelegate = JSVAL_TO_OBJECT(argv[0]); + JSB_EditBoxDelegate* nativeDelegate = new JSB_EditBoxDelegate(); + nativeDelegate->setJSDelegate(jsDelegate); + + cobj->setUserObject(nativeDelegate); + cobj->setDelegate(nativeDelegate); + + nativeDelegate->release(); + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; + } + JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 1); + return JS_FALSE; +} + + + +class JSB_ControlButtonTarget : public Object +{ +public: + JSB_ControlButtonTarget() + : _jsFunc(nullptr), + _type(Control::EventType::TOUCH_DOWN), + _jsTarget(nullptr), + _needUnroot(false) + {} + + virtual ~JSB_ControlButtonTarget() + { + CCLOGINFO("In the destruction of JSB_ControlButtonTarget ..."); + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + if (_needUnroot) + { + JS_RemoveObjectRoot(cx, &_jsTarget); + } + + JS_RemoveObjectRoot(cx, &_jsFunc); + + for (auto iter = _jsNativeTargetMap.begin(); iter != _jsNativeTargetMap.end(); ++iter) + { + if (this == iter->second) + { + _jsNativeTargetMap.erase(iter); + break; + } + } + } + + virtual void onEvent(Object *controlButton, Control::EventType event) + { + js_proxy_t * p; + JS_GET_PROXY(p, controlButton); + if (!p) + { + log("Failed to get proxy for control button"); + return; + } + + jsval dataVal[2]; + dataVal[0] = OBJECT_TO_JSVAL(p->obj); + int arg1 = (int)event; + dataVal[1] = INT_TO_JSVAL(arg1); + jsval jsRet; + + ScriptingCore::getInstance()->executeJSFunctionWithThisObj(OBJECT_TO_JSVAL(_jsTarget), OBJECT_TO_JSVAL(_jsFunc), 2, dataVal, &jsRet); + } + + void setJSTarget(JSObject* pJSTarget) + { + _jsTarget = pJSTarget; + + js_proxy_t* p = jsb_get_js_proxy(_jsTarget); + if (!p) + { + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_AddNamedObjectRoot(cx, &_jsTarget, "JSB_ControlButtonTarget, target"); + _needUnroot = true; + } + } + + void setJSAction(JSObject* jsFunc) + { + _jsFunc = jsFunc; + + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JS_AddNamedObjectRoot(cx, &_jsFunc, "JSB_ControlButtonTarget, func"); + } + + void setEventType(Control::EventType type) + { + _type = type; + } +public: + + static std::multimap _jsNativeTargetMap; + JSObject* _jsFunc; + Control::EventType _type; +private: + JSObject* _jsTarget; + bool _needUnroot; +}; + +std::multimap JSB_ControlButtonTarget::_jsNativeTargetMap; + +static JSBool js_cocos2dx_CCControl_addTargetWithActionForControlEvents(JSContext *cx, uint32_t argc, jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cocos2d::extension::Control* cobj = (cocos2d::extension::Control *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + + JSBool ok = JS_TRUE; + if (argc == 3) + { + JSObject* jsDelegate = JSVAL_TO_OBJECT(argv[0]); + JSObject* jsFunc = JSVAL_TO_OBJECT(argv[1]); + Control::EventType arg2; + ok &= jsval_to_int32(cx, argv[2], (int32_t *)&arg2); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing control event"); + + // Check whether the target already exists. + auto range = JSB_ControlButtonTarget::_jsNativeTargetMap.equal_range(jsDelegate); + for (auto it = range.first; it != range.second; ++it) + { + if (it->second->_jsFunc == jsFunc && arg2 == it->second->_type) + { + // Return true directly. + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; + } + } + + // save the delegate + JSB_ControlButtonTarget* nativeDelegate = new JSB_ControlButtonTarget(); + + nativeDelegate->setJSTarget(jsDelegate); + nativeDelegate->setJSAction(jsFunc); + nativeDelegate->setEventType(arg2); + + Array* nativeDelegateArray = static_cast(cobj->getUserObject()); + if (nullptr == nativeDelegateArray) + { + nativeDelegateArray = new Array(); + nativeDelegateArray->init(); + cobj->setUserObject(nativeDelegateArray); // The reference of nativeDelegateArray is added to 2 + nativeDelegateArray->release(); // Release nativeDelegateArray to make the reference to 1 + } + + nativeDelegateArray->addObject(nativeDelegate); // The reference of nativeDelegate is added to 2 + nativeDelegate->release(); // Release nativeDelegate to make the reference to 1 + + cobj->addTargetWithActionForControlEvents(nativeDelegate, cccontrol_selector(JSB_ControlButtonTarget::onEvent), arg2); + + JSB_ControlButtonTarget::_jsNativeTargetMap.insert(std::make_pair(jsDelegate, nativeDelegate)); + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + + return JS_TRUE; + } + JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 3); + return JS_FALSE; +} + +static JSBool js_cocos2dx_CCControl_removeTargetWithActionForControlEvents(JSContext *cx, uint32_t argc, jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + cocos2d::extension::Control* cobj = (cocos2d::extension::Control *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + + JSBool ok = JS_TRUE; + if (argc == 3) + { + Control::EventType arg2; + ok &= jsval_to_int32(cx, argv[2], (int32_t *)&arg2); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing control event"); + + obj = JSVAL_TO_OBJECT(argv[0]); + JSObject* jsFunc = JSVAL_TO_OBJECT(argv[1]); + + JSB_ControlButtonTarget* nativeTargetToRemoved = nullptr; + + auto range = JSB_ControlButtonTarget::_jsNativeTargetMap.equal_range(obj); + for (auto it = range.first; it != range.second; ++it) + { + if (it->second->_jsFunc == jsFunc && arg2 == it->second->_type) + { + nativeTargetToRemoved = it->second; + JSB_ControlButtonTarget::_jsNativeTargetMap.erase(it); + break; + } + } + + cobj->removeTargetWithActionForControlEvents(nativeTargetToRemoved, cccontrol_selector(JSB_ControlButtonTarget::onEvent), arg2); + + return JS_TRUE; + } + JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 3); + return JS_FALSE; +} + +extern JSObject* jsb_ScrollView_prototype; +extern JSObject* jsb_TableView_prototype; +extern JSObject* jsb_EditBox_prototype; +extern JSObject* jsb_Control_prototype; + +void register_all_cocos2dx_extension_manual(JSContext* cx, JSObject* global) +{ + JS_DefineFunction(cx, jsb_ScrollView_prototype, "setDelegate", js_cocos2dx_CCScrollView_setDelegate, 1, JSPROP_READONLY | JSPROP_PERMANENT); + JS_DefineFunction(cx, jsb_TableView_prototype, "setDelegate", js_cocos2dx_CCTableView_setDelegate, 1, JSPROP_READONLY | JSPROP_PERMANENT); + JS_DefineFunction(cx, jsb_TableView_prototype, "setDataSource", js_cocos2dx_CCTableView_setDataSource, 1, JSPROP_READONLY | JSPROP_PERMANENT); + JS_DefineFunction(cx, jsb_EditBox_prototype, "setDelegate", js_cocos2dx_CCEditBox_setDelegate, 1, JSPROP_READONLY | JSPROP_PERMANENT); + JS_DefineFunction(cx, jsb_Control_prototype, "addTargetWithActionForControlEvents", js_cocos2dx_CCControl_addTargetWithActionForControlEvents, 3, JSPROP_READONLY | JSPROP_PERMANENT); + JS_DefineFunction(cx, jsb_Control_prototype, "removeTargetWithActionForControlEvents", js_cocos2dx_CCControl_removeTargetWithActionForControlEvents, 3, JSPROP_READONLY | JSPROP_PERMANENT); + + JSObject *tmpObj = JSVAL_TO_OBJECT(anonEvaluate(cx, global, "(function () { return cc.TableView; })()")); + JS_DefineFunction(cx, tmpObj, "create", js_cocos2dx_CCTableView_create, 3, JSPROP_READONLY | JSPROP_PERMANENT); +} \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/extension/jsb_cocos2dx_extension_manual.h b/cocos/scripting/javascript/bindings/extension/jsb_cocos2dx_extension_manual.h new file mode 100644 index 0000000000..e8822b1370 --- /dev/null +++ b/cocos/scripting/javascript/bindings/extension/jsb_cocos2dx_extension_manual.h @@ -0,0 +1,16 @@ +// +// jsb_cocos2d_extension_manual.h +// +// Created by James Chen on 3/11/13. +// +// + +#ifndef __jsb_cocos2dx_extension_manual__ +#define __jsb_cocos2dx_extension_manual__ + +#include "jsapi.h" +#include "jsfriendapi.h" + +void register_all_cocos2dx_extension_manual(JSContext* cx, JSObject* global); + +#endif /* defined(__jsb_cocos2dx_extension_manual__) */ diff --git a/cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj b/cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj new file mode 100644 index 0000000000..b9ea3695d9 --- /dev/null +++ b/cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj @@ -0,0 +1,118 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + + + {625F7391-9A91-48A1-8CFC-79508C822637} + Win32Proj + libJSBindingForExtension + + + + StaticLibrary + true + Unicode + v100 + v110 + v110_xp + + + StaticLibrary + false + Unicode + v100 + v110 + v110_xp + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + + + + Level3 + Disabled + WIN32;_WINDOWS;_DEBUG;_LIB;DEBUG;COCOS2D_DEBUG=1;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\network;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external\spidermonkey\include\win32;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)extensions;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + false + + + Windows + true + + + if not exist "$(OutDir)" mkdir "$(OutDir)" +xcopy /Y /Q "$(ProjectDir)..\..\..\..\..\external\sqlite3\libraries\win32\*.*" "$(OutDir)" + + + + + Level3 + + + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;_LIB;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\network;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external\spidermonkey\include\win32;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)extensions;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + + + Windows + true + true + true + + + + + + + + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj.filters b/cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj.filters new file mode 100644 index 0000000000..805e94fc71 --- /dev/null +++ b/cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj.filters @@ -0,0 +1,34 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + generated + + + manual + + + + + generated + + + manual + + + + + generated + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj.user b/cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj.user new file mode 100644 index 0000000000..3f03091124 --- /dev/null +++ b/cocos/scripting/javascript/bindings/extension/libJSBindingForExtension.vcxproj.user @@ -0,0 +1,6 @@ + + + + false + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions.cpp b/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions.cpp new file mode 100644 index 0000000000..7d1a819fc8 --- /dev/null +++ b/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions.cpp @@ -0,0 +1,75 @@ +/* +* AUTOGENERATED FILE. DO NOT EDIT IT +* Generated by "generate_js_bindings.py -c system_jsb.ini" on 2012-12-17 +* Script version: v0.5 +*/ +#include "cocos2d.h" +#include "js_bindings_config.h" +//#ifdef JSB_INCLUDE_SYSTEM + +#include "local-storage/LocalStorage.h" + +#include "jsfriendapi.h" +#include "js_bindings_config.h" +#include "js_bindings_core.h" +#include "js_manual_conversions.h" +#include "js_bindings_system_functions.h" +#include "ScriptingCore.h" + +USING_NS_CC; + +// Arguments: char* +// Ret value: const char* +JSBool JSB_localStorageGetItem(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2( argc == 1, cx, JS_FALSE, "Invalid number of arguments" ); + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + const char* arg0; + + ok &= jsval_to_charptr( cx, *argvp++, &arg0 ); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + const char* ret_val; + + ret_val = localStorageGetItem((char*)arg0 ); + + jsval ret_jsval = c_string_to_jsval(cx, ret_val ? ret_val : ""); + JS_SET_RVAL(cx, vp, ret_jsval ); + + return JS_TRUE; +} + +// Arguments: char* +// Ret value: void +JSBool JSB_localStorageRemoveItem(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2( argc == 1, cx, JS_FALSE, "Invalid number of arguments" ); + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + const char* arg0; + + ok &= jsval_to_charptr( cx, *argvp++, &arg0 ); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + localStorageRemoveItem((char*)arg0 ); + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} + +// Arguments: char*, char* +// Ret value: void +JSBool JSB_localStorageSetItem(JSContext *cx, uint32_t argc, jsval *vp) { + JSB_PRECONDITION2( argc == 2, cx, JS_FALSE, "Invalid number of arguments" ); + jsval *argvp = JS_ARGV(cx,vp); + JSBool ok = JS_TRUE; + const char* arg0; const char* arg1; + + ok &= jsval_to_charptr( cx, *argvp++, &arg0 ); + ok &= jsval_to_charptr( cx, *argvp++, &arg1 ); + JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); + + localStorageSetItem((char*)arg0 , (char*)arg1 ); + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; +} + + +//#endif // JSB_INCLUDE_SYSTEM diff --git a/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions.h b/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions.h new file mode 100644 index 0000000000..26d4a97c99 --- /dev/null +++ b/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions.h @@ -0,0 +1,23 @@ +/* +* AUTOGENERATED FILE. DO NOT EDIT IT +* Generated by "generate_js_bindings.py -c system_jsb.ini" on 2012-12-17 +* Script version: v0.5 +*/ +#include "js_bindings_config.h" +//#ifdef JSB_INCLUDE_SYSTEM + +//#include "LocalStorage.h" + +#ifdef __cplusplus +extern "C" { +#endif +JSBool JSB_localStorageGetItem(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_localStorageRemoveItem(JSContext *cx, uint32_t argc, jsval *vp); +JSBool JSB_localStorageSetItem(JSContext *cx, uint32_t argc, jsval *vp); + +#ifdef __cplusplus +} +#endif + + +//#endif // JSB_INCLUDE_SYSTEM diff --git a/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions_registration.h b/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions_registration.h new file mode 100644 index 0000000000..5774403878 --- /dev/null +++ b/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_functions_registration.h @@ -0,0 +1,15 @@ +/* +* AUTOGENERATED FILE. DO NOT EDIT IT +* Generated by "generate_js_bindings.py -c system_jsb.ini" on 2012-12-17 +* Script version: v0.5 +*/ +#include "../js_bindings_config.h" +//#ifdef JSB_INCLUDE_SYSTEM + +//#include "LocalStorage.h" +JS_DefineFunction(_cx, system, "getItem", JSB_localStorageGetItem, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, system, "removeItem", JSB_localStorageRemoveItem, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); +JS_DefineFunction(_cx, system, "setItem", JSB_localStorageSetItem, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); + + +//#endif // JSB_INCLUDE_SYSTEM diff --git a/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_registration.cpp b/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_registration.cpp new file mode 100644 index 0000000000..bf55e188f0 --- /dev/null +++ b/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_registration.cpp @@ -0,0 +1,62 @@ +/* + * JS Bindings: https://github.com/zynga/jsbindings + * + * Copyright (c) 2012 Zynga Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "js_bindings_config.h" +#include "js_bindings_core.h" +#include "local-storage/LocalStorage.h" +#include "cocos2d.h" + +// system +#include "js_bindings_system_functions.h" + + +void jsb_register_system( JSContext *_cx, JSObject *object) +{ + // + // sys + // + JSObject *sys = JS_NewObject(_cx, NULL, NULL, NULL); + jsval systemVal = OBJECT_TO_JSVAL(sys); + JS_SetProperty(_cx, object, "sys", &systemVal); + + + // sys.localStorage + JSObject *ls = JS_NewObject(_cx, NULL, NULL, NULL); + jsval lsVal = OBJECT_TO_JSVAL(ls); + JS_SetProperty(_cx, sys, "localStorage", &lsVal); + + // sys.localStorage functions + JSObject *system = ls; +#include "js_bindings_system_functions_registration.h" + + + // Init DB with full path + //NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; + //NSString *fullpath = [path stringByAppendingPathComponent:@"jsb.sqlite"]; + std::string strFilePath = cocos2d::FileUtils::getInstance()->getWritablePath(); + strFilePath += "/jsb.sqlite"; + localStorageInit(strFilePath.c_str()); + +} + diff --git a/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_registration.h b/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_registration.h new file mode 100644 index 0000000000..1afb1b1081 --- /dev/null +++ b/cocos/scripting/javascript/bindings/localstorage/js_bindings_system_registration.h @@ -0,0 +1,31 @@ +/* + * JS Bindings: https://github.com/zynga/jsbindings + * + * Copyright (c) 2012 Zynga Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + +#ifndef __JSB_SYSTEM_REGISTRATION +#define __JSB_SYSTEM_REGISTRATION + +void jsb_register_system( JSContext *globalC, JSObject *globalO); + +#endif // __JSB_CHIPMUNK_REGISTRATION diff --git a/cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj b/cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj new file mode 100644 index 0000000000..2f074d6c17 --- /dev/null +++ b/cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj @@ -0,0 +1,116 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + + {68F5F371-BD7B-4C30-AE5B-0B08F22E0CDE} + Win32Proj + libJSBindingForLocalStorage + + + + StaticLibrary + true + Unicode + v100 + v110 + v110_xp + + + StaticLibrary + false + Unicode + v100 + v110 + v110_xp + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + + + + Level3 + Disabled + WIN32;_WINDOWS;_DEBUG;_LIB;DEBUG;COCOS2D_DEBUG=1;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\storage;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)external\spidermonkey\include\win32;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + false + + + Windows + true + + + if not exist "$(OutDir)" mkdir "$(OutDir)" +xcopy /Y /Q "$(ProjectDir)..\..\..\..\..\external\sqlite3\libraries\win32\*.*" "$(OutDir)" + + + + + Level3 + + + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;_LIB;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\storage;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)external\spidermonkey\include\win32;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + + + Windows + true + true + true + + + + + + + + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj.filters b/cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj.filters new file mode 100644 index 0000000000..9fc0ee4734 --- /dev/null +++ b/cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj.filters @@ -0,0 +1,32 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + manual + + + manual + + + + + manual + + + manual + + + manual + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj.user b/cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj.user new file mode 100644 index 0000000000..3f03091124 --- /dev/null +++ b/cocos/scripting/javascript/bindings/localstorage/libJSBindingForLocalStorage.vcxproj.user @@ -0,0 +1,6 @@ + + + + false + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/network/XMLHTTPRequest.cpp b/cocos/scripting/javascript/bindings/network/XMLHTTPRequest.cpp new file mode 100644 index 0000000000..cc7b72c586 --- /dev/null +++ b/cocos/scripting/javascript/bindings/network/XMLHTTPRequest.cpp @@ -0,0 +1,847 @@ +// +// XMLHTTPRequest.cpp +// XMLHttpRequest +// +// Created by Zynga 2013 +// +// Heavy based on: https://github.com/funkaster/FakeWebGL/blob/master/FakeWebGL/WebGL/XMLHTTPRequest.cpp +// Copyright (c) 2012 Rolando Abarca. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#include "XMLHTTPRequest.h" +#include + +using namespace std; + +//#pragma mark - MinXmlHttpRequest + +/** + * @brief Implementation for header retrieving. + * @param header + */ +void MinXmlHttpRequest::_gotHeader(string header) +{ + // Get Header and Set StatusText + // Split String into Tokens + char * cstr = new char [header.length()+1]; + + // check for colon. + unsigned found_header_field = header.find_first_of(":"); + + if (found_header_field != std::string::npos) + { + // Found a header field. + string http_field; + string http_value; + + http_field = header.substr(0,found_header_field); + http_value = header.substr(found_header_field+1, header.length()); + + // Get rid of all \n + if (!http_value.empty() && http_value[http_value.size() - 1] == '\n') { + http_value.erase(http_value.size() - 1); + } + + _httpHeader[http_field] = http_value; + + } + else + { + // Seems like we have the response Code! Parse it and check for it. + char * pch; + strcpy(cstr, header.c_str()); + + pch = strtok(cstr," "); + while (pch != NULL) + { + + stringstream ss; + string val; + + ss << pch; + val = ss.str(); + unsigned found_http = val.find("HTTP"); + + // Check for HTTP Header to set statusText + if (found_http != std::string::npos) { + + stringstream mystream; + + // Get Response Status + pch = strtok (NULL, " "); + mystream << pch; + + pch = strtok (NULL, " "); + mystream << " " << pch; + + _statusText = mystream.str(); + + } + + pch = strtok (NULL, " "); + } + } + + CC_SAFE_DELETE_ARRAY(cstr); +} + +/** + * @brief Set Request header for next call. + * @param field Name of the Header to be set. + * @param value Value of the Headerfield + */ +void MinXmlHttpRequest::_setRequestHeader(const char* field, const char* value) +{ + stringstream header_s; + stringstream value_s; + string header; + + map::iterator iter = _requestHeader.find(field); + + // Concatenate values when header exists. + if (iter != _requestHeader.end()) + { + value_s << iter->second << "," << value; + } + else + { + value_s << value; + } + + _requestHeader[field] = value_s.str(); +} + +/** + * @brief If headers has been set, pass them to curl. + * + */ +void MinXmlHttpRequest::_setHttpRequestHeader() +{ + std::vector header; + + for (auto it = _requestHeader.begin(); it != _requestHeader.end(); ++it) + { + const char* first = it->first.c_str(); + const char* second = it->second.c_str(); + size_t len = sizeof(char) * (strlen(first) + 3 + strlen(second)); + char* test = (char*) malloc(len); + memset(test, 0,len); + + strcpy(test, first); + strcpy(test + strlen(first) , ": "); + strcpy(test + strlen(first) + 2, second); + + header.push_back(test); + + free(test); + + } + + if (!header.empty()) + { + _httpRequest->setHeaders(header); + } + +} + +/** + * @brief Callback for HTTPRequest. Handles the response and invokes Callback. + * @param sender Object which initialized callback + * @param respone Response object + */ +void MinXmlHttpRequest::handle_requestResponse(network::HttpClient *sender, network::HttpResponse *response) +{ + if (0 != strlen(response->getHttpRequest()->getTag())) + { + CCLOG("%s completed", response->getHttpRequest()->getTag()); + } + + int statusCode = response->getResponseCode(); + char statusString[64] = {}; + sprintf(statusString, "HTTP Status Code: %d, tag = %s", statusCode, response->getHttpRequest()->getTag()); + + if (!response->isSucceed()) + { + CCLOG("response failed"); + CCLOG("error buffer: %s", response->getErrorBuffer()); + return; + } + + // set header + std::vector *headers = response->getResponseHeader(); + + char* concatHeader = (char*) malloc(headers->size() + 1); + std::string header(headers->begin(), headers->end()); + strcpy(concatHeader, header.c_str()); + + std::istringstream stream(concatHeader); + std::string line; + while(std::getline(stream, line)) { + _gotHeader(line); + } + + /** get the response data **/ + std::vector *buffer = response->getResponseData(); + char* concatenated = (char*) malloc(buffer->size() + 1); + std::string s2(buffer->begin(), buffer->end()); + + strcpy(concatenated, s2.c_str()); + + if (statusCode == 200) + { + //Succeeded + _status = 200; + _readyState = DONE; + _data << concatenated; + _dataSize = buffer->size(); + } + else + { + _status = 0; + } + // Free Memory. + free((void*) concatHeader); + free((void*) concatenated); + + js_proxy_t * p; + void* ptr = (void*)this; + p = jsb_get_native_proxy(ptr); + + if(p) + { + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + + if (_onreadystateCallback) + { + //JS_IsExceptionPending(cx) && JS_ReportPendingException(cx); + jsval fval = OBJECT_TO_JSVAL(_onreadystateCallback); + jsval out; + JS_CallFunctionValue(cx, NULL, fval, 0, NULL, &out); + } + + } + +} +/** + * @brief Send out request and fire callback when done. + * @param cx Javascript context + */ +void MinXmlHttpRequest::_sendRequest(JSContext *cx) +{ + _httpRequest->setResponseCallback(this, httpresponse_selector(MinXmlHttpRequest::handle_requestResponse)); + network::HttpClient::getInstance()->send(_httpRequest); + _httpRequest->release(); +} + +/** + * @brief Constructor initializes cchttprequest and stuff + * + */ +MinXmlHttpRequest::MinXmlHttpRequest() : _onreadystateCallback(NULL), _isNetwork(true) +{ + _httpHeader.clear(); + _requestHeader.clear(); + _withCredentialsValue = true; + _cx = ScriptingCore::getInstance()->getGlobalContext(); + _httpRequest = new network::HttpRequest(); +} + +/** + * @brief Destructor cleans up _httpRequest and stuff + * + */ +MinXmlHttpRequest::~MinXmlHttpRequest() +{ + _httpHeader.clear(); + _requestHeader.clear(); + + if (_onreadystateCallback != NULL) + { + JS_RemoveObjectRoot(_cx, &_onreadystateCallback); + } + + if (_httpRequest) + { + // We don't need to release _httpRequest here since it will be released in the http callback. +// _httpRequest->release(); + } + +} + +/** + * @brief Initialize Object and needed properties. + * + */ +JS_BINDED_CLASS_GLUE_IMPL(MinXmlHttpRequest); + +/** + * @brief Implementation for the Javascript Constructor + * + */ +JS_BINDED_CONSTRUCTOR_IMPL(MinXmlHttpRequest) +{ + MinXmlHttpRequest* req = new MinXmlHttpRequest(); + req->autorelease(); + + js_proxy_t *p; + jsval out; + + JSObject *obj = JS_NewObject(cx, &MinXmlHttpRequest::js_class, MinXmlHttpRequest::js_proto, MinXmlHttpRequest::js_parent); + + if (obj) { + JS_SetPrivate(obj, req); + out = OBJECT_TO_JSVAL(obj); + } + + JS_SET_RVAL(cx, vp, out); + p =jsb_new_proxy(req, obj); + + JS_AddNamedObjectRoot(cx, &p->obj, "XMLHttpRequest"); + return JS_TRUE; +} + +/** + * @brief get Callback function for Javascript + * + */ +JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, onreadystatechange) +{ + if (_onreadystateCallback) + { + JSString *tmpstr = JS_NewStringCopyZ(cx, "1"); + jsval tmpval = STRING_TO_JSVAL(tmpstr); + JS_SetProperty(cx, _onreadystateCallback, "readyState", &tmpval); + + jsval out = OBJECT_TO_JSVAL(_onreadystateCallback); + vp.set(out); + + } + else + { + vp.set(JSVAL_NULL); + } + return JS_TRUE; +} + +/** + * @brief Set Callback function coming from Javascript + * + * + */ +JS_BINDED_PROP_SET_IMPL(MinXmlHttpRequest, onreadystatechange) +{ + jsval callback = vp.get(); + if (callback != JSVAL_NULL) + { + _onreadystateCallback = JSVAL_TO_OBJECT(callback); + JS_AddNamedObjectRoot(cx, &_onreadystateCallback, "onreadystateCallback"); + } + return JS_TRUE; +} + +/** + * @brief upload getter - TODO + * + * Placeholder for further implementations!! + */ +JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, upload) +{ + vp.set(JSVAL_NULL); + return JS_TRUE; +} + +/** + * @brief upload setter - TODO + * + * Placeholder for further implementations + */ +JS_BINDED_PROP_SET_IMPL(MinXmlHttpRequest, upload) +{ + vp.set(JSVAL_NULL); + return JS_TRUE; +} + +/** + * @brief timeout getter - TODO + * + * Placeholder for further implementations + */ +JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, timeout) +{ + vp.set(INT_TO_JSVAL(_timeout)); + return JS_TRUE; +} + +/** + * @brief timeout setter - TODO + * + * Placeholder for further implementations + */ +JS_BINDED_PROP_SET_IMPL(MinXmlHttpRequest, timeout) +{ + jsval timeout_ms = vp.get(); + + _timeout = JSVAL_TO_INT(timeout_ms); + //curl_easy_setopt(curlHandle, CURLOPT_CONNECTTIMEOUT_MS, timeout); + return JS_TRUE; + +} + +/** + * @brief get response type for actual XHR + * + * + */ +JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, responseType) +{ + JSString* str = JS_NewStringCopyN(cx, "", 0); + vp.set(STRING_TO_JSVAL(str)); + return JS_TRUE; +} + +/** + * @brief responseXML getter - TODO + * + * Placeholder for further implementation. + */ +JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, responseXML) +{ + vp.set(JSVAL_NULL); + return JS_TRUE; +} + +/** + * @brief set response type for actual XHR + * + * + */ +JS_BINDED_PROP_SET_IMPL(MinXmlHttpRequest, responseType) +{ + jsval type = vp.get(); + if (type.isString()) { + JSString* str = type.toString(); + JSBool equal; + + JS_StringEqualsAscii(cx, str, "text", &equal); + if (equal) + { + _responseType = ResponseType::STRING; + return JS_TRUE; + } + + JS_StringEqualsAscii(cx, str, "arraybuffer", &equal); + if (equal) + { + _responseType = ResponseType::ARRAY_BUFFER; + return JS_TRUE; + } + + JS_StringEqualsAscii(cx, str, "json", &equal); + if (equal) + { + _responseType = ResponseType::JSON; + return JS_TRUE; + } + // ignore the rest of the response types for now + return JS_TRUE; + } + JS_ReportError(cx, "Invalid response type"); + return JS_FALSE; +} + +/** + * @brief get readyState for actual XHR + * + * + */ +JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, readyState) +{ + vp.set(INT_TO_JSVAL(_readyState)); + return JS_TRUE; +} + +/** + * @brief get status for actual XHR + * + * + */ +JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, status) +{ + vp.set(INT_TO_JSVAL(_status)); + return JS_TRUE; +} + +/** + * @brief get statusText for actual XHR + * + * + */ +JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, statusText) +{ + jsval strVal = std_string_to_jsval(cx, _statusText); + + if (strVal != JSVAL_NULL) + { + vp.set(strVal); + return JS_TRUE; + } + else + { + JS_ReportError(cx, "Error trying to create JSString from data"); + return JS_FALSE; + } +} + +/** + * @brief get value of withCredentials property. + * + */ +JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, withCredentials) +{ + vp.set(BOOLEAN_TO_JSVAL(_withCredentialsValue)); + return JS_TRUE; +} + +/** + * withCredentials - set value of withCredentials property. + * + */ +JS_BINDED_PROP_SET_IMPL(MinXmlHttpRequest, withCredentials) +{ + jsval credential = vp.get(); + if (credential != JSVAL_NULL) + { + _withCredentialsValue = JSVAL_TO_BOOLEAN(credential); + } + + return JS_TRUE; +} + +/** + * @brief get (raw) responseText + * + */ +JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, responseText) +{ + jsval strVal = std_string_to_jsval(cx, _data.str()); + + if (strVal != JSVAL_NULL) + { + vp.set(strVal); + //JS_ReportError(cx, "Result: %s", data.str().c_str()); + return JS_TRUE; + } else { + JS_ReportError(cx, "Error trying to create JSString from data"); + return JS_FALSE; + } +} + +/** + * @brief get response of latest XHR + * + */ +JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, response) +{ + + if (_responseType == ResponseType::JSON) + { + jsval outVal; + + jsval strVal = std_string_to_jsval(cx, _data.str()); + if (JS_ParseJSON(cx, JS_GetStringCharsZ(cx, JSVAL_TO_STRING(strVal)), _dataSize, &outVal)) + { + vp.set(outVal); + return JS_TRUE; + } + } + else if (_responseType == ResponseType::ARRAY_BUFFER) + { + JSObject* tmp = JS_NewArrayBuffer(cx, _dataSize); + uint8_t* tmpData = JS_GetArrayBufferData(tmp); + _data.read((char*)tmpData, _dataSize); + jsval outVal = OBJECT_TO_JSVAL(tmp); + + vp.set(outVal); + return JS_TRUE; + } + // by default, return text + return _js_get_responseText(cx, id, vp); +} + +/** + * @brief initialize new xhr. + * + */ +JS_BINDED_FUNC_IMPL(MinXmlHttpRequest, open) +{ + if (argc >= 2) + { + jsval* argv = JS_ARGV(cx, vp); + const char* method; + const char* urlstr; + JSBool async = true; + JSString* jsMethod = JS_ValueToString(cx, argv[0]); + JSString* jsURL = JS_ValueToString(cx, argv[1]); + + if (argc > 2) { + JS_ValueToBoolean(cx, argv[2], &async); + } + + JSStringWrapper w1(jsMethod); + JSStringWrapper w2(jsURL); + method = w1; + urlstr = w2; + + _url = urlstr; + _meth = method; + _readyState = 1; + _isAsync = async; + + if (_url.length() > 5 && _url.compare(_url.length() - 5, 5, ".json") == 0) + { + _responseType = ResponseType::JSON; + } + + if (_meth.compare("post") == 0 || _meth.compare("POST") == 0) + { + _httpRequest->setRequestType(network::HttpRequest::Type::POST); + } + else + { + _httpRequest->setRequestType(network::HttpRequest::Type::GET); + } + + _httpRequest->setUrl(_url.c_str()); + + _isNetwork = true; + _readyState = OPENED; + + return JS_TRUE; + } + + JS_ReportError(cx, "invalid call: %s", __FUNCTION__); + return JS_FALSE; + +} + +/** + * @brief send xhr + * + */ +JS_BINDED_FUNC_IMPL(MinXmlHttpRequest, send) +{ + JSString *str = NULL; + std::string data; + + // Clean up header map. New request, new headers! + _httpHeader.clear(); + + if (argc == 1) + { + if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "S", &str)) + { + return JS_FALSE; + } + JSStringWrapper strWrap(str); + data = strWrap.get(); + } + + + if (data.length() > 0 && (_meth.compare("post") == 0 || _meth.compare("POST") == 0)) + { + _httpRequest->setRequestData(data.c_str(), data.length()); + } + + _setHttpRequestHeader(); + _sendRequest(cx); + + return JS_TRUE; +} + +/** + * @brief abort function Placeholder! + * + */ +JS_BINDED_FUNC_IMPL(MinXmlHttpRequest, abort) +{ + return JS_TRUE; +} + +/** + * @brief Get all response headers as a string + * + */ +JS_BINDED_FUNC_IMPL(MinXmlHttpRequest, getAllResponseHeaders) +{ + stringstream responseheaders; + string responseheader; + + for (auto it = _httpHeader.begin(); it != _httpHeader.end(); ++it) + { + responseheaders << it->first << ": " << it->second << "\n"; + } + + responseheader = responseheaders.str(); + + jsval strVal = std_string_to_jsval(cx, responseheader); + if (strVal != JSVAL_NULL) + { + JS_SET_RVAL(cx, vp, strVal); + return JS_TRUE; + } + else + { + JS_ReportError(cx, "Error trying to create JSString from data"); + return JS_FALSE; + } + + return JS_TRUE; +} + +/** + * @brief Get all response headers as a string + * + */ +JS_BINDED_FUNC_IMPL(MinXmlHttpRequest, getResponseHeader) +{ + JSString *header_value; + + if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "S", &header_value)) { + return JS_FALSE; + }; + + std::string data; + JSStringWrapper strWrap(header_value); + data = strWrap.get(); + + stringstream streamdata; + + streamdata << data; + + string value = streamdata.str(); + + auto iter = _httpHeader.find(value); + if (iter != _httpHeader.end()) + { + jsval js_ret_val = std_string_to_jsval(cx, iter->second); + JS_SET_RVAL(cx, vp, js_ret_val); + return JS_TRUE; + } + else { + JS_SET_RVAL(cx, vp, JSVAL_NULL); + return JS_TRUE; + } +} + +/** + * @brief Set the given Fields to request Header. + * + * + */ +JS_BINDED_FUNC_IMPL(MinXmlHttpRequest, setRequestHeader) +{ + if (argc >= 2) + { + jsval* argv = JS_ARGV(cx, vp); + const char* field; + const char* value; + + JSString* jsField = JS_ValueToString(cx, argv[0]); + JSString* jsValue = JS_ValueToString(cx, argv[1]); + + JSStringWrapper w1(jsField); + JSStringWrapper w2(jsValue); + field = w1; + value = w2; + + // Populate the request_header map. + _setRequestHeader(field, value); + + return JS_TRUE; + } + + return JS_FALSE; + +} + +/** + * @brief overrideMimeType function - TODO! + * + * Just a placeholder for further implementations. + */ +JS_BINDED_FUNC_IMPL(MinXmlHttpRequest, overrideMimeType) +{ + return JS_TRUE; +} + +/** + * @brief destructor for Javascript + * + */ +static void basic_object_finalize(JSFreeOp *freeOp, JSObject *obj) +{ + CCLOG("basic_object_finalize %p ...", obj); +} + +/** + * @brief Register XMLHttpRequest to be usable in JS and add properties and Mehtods. + * @param cx Global Spidermonkey JS Context. + * @param global Global Spidermonkey Javascript object. + */ +void MinXmlHttpRequest::_js_register(JSContext *cx, JSObject *global) +{ + JSClass js_class = { + "XMLHttpRequest", JSCLASS_HAS_PRIVATE, JS_PropertyStub, + JS_DeletePropertyStub, JS_PropertyStub, JS_StrictPropertyStub, + JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, + basic_object_finalize, JSCLASS_NO_OPTIONAL_MEMBERS + }; + + MinXmlHttpRequest::js_class = js_class; + static JSPropertySpec props[] = { + JS_BINDED_PROP_DEF_ACCESSOR(MinXmlHttpRequest, onreadystatechange), + JS_BINDED_PROP_DEF_ACCESSOR(MinXmlHttpRequest, responseType), + JS_BINDED_PROP_DEF_ACCESSOR(MinXmlHttpRequest, withCredentials), + JS_BINDED_PROP_DEF_GETTER(MinXmlHttpRequest, readyState), + JS_BINDED_PROP_DEF_GETTER(MinXmlHttpRequest, status), + JS_BINDED_PROP_DEF_GETTER(MinXmlHttpRequest, statusText), + JS_BINDED_PROP_DEF_GETTER(MinXmlHttpRequest, responseText), + JS_BINDED_PROP_DEF_GETTER(MinXmlHttpRequest, responseXML), + JS_BINDED_PROP_DEF_GETTER(MinXmlHttpRequest, response), + {0, 0, 0, 0, 0} + }; + + static JSFunctionSpec funcs[] = { + JS_BINDED_FUNC_FOR_DEF(MinXmlHttpRequest, open), + JS_BINDED_FUNC_FOR_DEF(MinXmlHttpRequest, abort), + JS_BINDED_FUNC_FOR_DEF(MinXmlHttpRequest, send), + JS_BINDED_FUNC_FOR_DEF(MinXmlHttpRequest, setRequestHeader), + JS_BINDED_FUNC_FOR_DEF(MinXmlHttpRequest, getAllResponseHeaders), + JS_BINDED_FUNC_FOR_DEF(MinXmlHttpRequest, getResponseHeader), + JS_BINDED_FUNC_FOR_DEF(MinXmlHttpRequest, overrideMimeType), + JS_FS_END + }; + + MinXmlHttpRequest::js_parent = NULL; + MinXmlHttpRequest::js_proto = JS_InitClass(cx, global, NULL, &MinXmlHttpRequest::js_class , MinXmlHttpRequest::_js_constructor, 0, props, funcs, NULL, NULL); + +} + diff --git a/cocos/scripting/javascript/bindings/network/XMLHTTPRequest.h b/cocos/scripting/javascript/bindings/network/XMLHTTPRequest.h new file mode 100644 index 0000000000..861e0a2536 --- /dev/null +++ b/cocos/scripting/javascript/bindings/network/XMLHTTPRequest.h @@ -0,0 +1,112 @@ +// +// XMLHTTPRequest.h +// XMLHttpRequest +// +// Created by Zynga 2013 +// +// Heavy based on: https://github.com/funkaster/FakeWebGL/blob/master/FakeWebGL/WebGL/XMLHTTPRequest.h +// Copyright (c) 2012 Rolando Abarca. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#ifndef __FAKE_XMLHTTPREQUEST_H__ +#define __FAKE_XMLHTTPREQUEST_H__ + +#include "network/HttpClient.h" +#include "js_bindings_config.h" +#include "ScriptingCore.h" +#include "jstypes.h" +#include "jsapi.h" +#include "jsfriendapi.h" +#include "jsb_helper.h" + +class MinXmlHttpRequest : public cocos2d::Object +{ +public: + enum class ResponseType + { + STRING, + ARRAY_BUFFER, + BLOB, + DOCUMENT, + JSON + }; + + // Ready States (http://www.w3.org/TR/XMLHttpRequest/#interface-xmlhttprequest) + static const unsigned short UNSENT = 0; + static const unsigned short OPENED = 1; + static const unsigned short HEADERS_RECEIVED = 2; + static const unsigned short LOADING = 3; + static const unsigned short DONE = 4; + + MinXmlHttpRequest(); + ~MinXmlHttpRequest(); + + JS_BINDED_CLASS_GLUE(MinXmlHttpRequest); + JS_BINDED_CONSTRUCTOR(MinXmlHttpRequest); + JS_BINDED_PROP_ACCESSOR(MinXmlHttpRequest, onreadystatechange); + JS_BINDED_PROP_ACCESSOR(MinXmlHttpRequest, responseType); + JS_BINDED_PROP_ACCESSOR(MinXmlHttpRequest, withCredentials); + JS_BINDED_PROP_ACCESSOR(MinXmlHttpRequest, upload); + JS_BINDED_PROP_ACCESSOR(MinXmlHttpRequest, timeout); + JS_BINDED_PROP_GET(MinXmlHttpRequest, readyState); + JS_BINDED_PROP_GET(MinXmlHttpRequest, status); + JS_BINDED_PROP_GET(MinXmlHttpRequest, statusText); + JS_BINDED_PROP_GET(MinXmlHttpRequest, responseText); + JS_BINDED_PROP_GET(MinXmlHttpRequest, response); + JS_BINDED_PROP_GET(MinXmlHttpRequest, responseXML); + JS_BINDED_FUNC(MinXmlHttpRequest, open); + JS_BINDED_FUNC(MinXmlHttpRequest, send); + JS_BINDED_FUNC(MinXmlHttpRequest, abort); + JS_BINDED_FUNC(MinXmlHttpRequest, getAllResponseHeaders); + JS_BINDED_FUNC(MinXmlHttpRequest, getResponseHeader); + JS_BINDED_FUNC(MinXmlHttpRequest, setRequestHeader); + JS_BINDED_FUNC(MinXmlHttpRequest, overrideMimeType); + + void handle_requestResponse(network::HttpClient *sender, network::HttpResponse *response); + + +private: + void _gotHeader(std::string header); + void _setRequestHeader(const char* field, const char* value); + void _setHttpRequestHeader(); + void _sendRequest(JSContext *cx); + + std::string _url; + JSContext* _cx; + std::string _meth; + std::string _type; + std::stringstream _data; + size_t _dataSize; + JSObject* _onreadystateCallback; + int _readyState; + int _status; + std::string _statusText; + ResponseType _responseType; + unsigned _timeout; + bool _isAsync; + network::HttpRequest* _httpRequest; + bool _isNetwork; + bool _withCredentialsValue; + std::map _httpHeader; + std::map _requestHeader; +}; + +#endif diff --git a/cocos/scripting/javascript/bindings/network/jsb_websocket.cpp b/cocos/scripting/javascript/bindings/network/jsb_websocket.cpp new file mode 100644 index 0000000000..b5083ad268 --- /dev/null +++ b/cocos/scripting/javascript/bindings/network/jsb_websocket.cpp @@ -0,0 +1,382 @@ +/**************************************************************************** +Copyright (c) 2013 cocos2d-x.org +Copyright (c) 2013 James Chen + +http://www.cocos2d-x.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +****************************************************************************/ + +#include "jsb_websocket.h" +#include "cocos2d.h" +#include "network/WebSocket.h" +#include "spidermonkey_specifics.h" +#include "ScriptingCore.h" +#include "cocos2d_specifics.hpp" + +using namespace network; + +/* + [Constructor(in DOMString url, in optional DOMString protocols)] + [Constructor(in DOMString url, in optional DOMString[] protocols)] + interface WebSocket { + readonly attribute DOMString url; + + // ready state + const unsigned short CONNECTING = 0; + const unsigned short OPEN = 1; + const unsigned short CLOSING = 2; + const unsigned short CLOSED = 3; + readonly attribute unsigned short readyState; + readonly attribute unsigned long bufferedAmount; + + // networking + attribute Function onopen; + attribute Function onmessage; + attribute Function onerror; + attribute Function onclose; + readonly attribute DOMString protocol; + void send(in DOMString data); + void close(); + }; + WebSocket implements EventTarget; + */ + +class JSB_WebSocketDelegate : public WebSocket::Delegate +{ +public: + + virtual void onOpen(WebSocket* ws) + { + js_proxy_t * p = jsb_get_native_proxy(ws); + if (!p) return; + + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JSObject* jsobj = JS_NewObject(cx, NULL, NULL, NULL); + jsval vp = c_string_to_jsval(cx, "open"); + JS_SetProperty(cx, jsobj, "type", &vp); + + jsval args = OBJECT_TO_JSVAL(jsobj); + + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), "onopen", 1, &args); + } + + virtual void onMessage(WebSocket* ws, const WebSocket::Data& data) + { + js_proxy_t * p = jsb_get_native_proxy(ws); + if (!p) return; + + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JSObject* jsobj = JS_NewObject(cx, NULL, NULL, NULL); + jsval vp = c_string_to_jsval(cx, "message"); + JS_SetProperty(cx, jsobj, "type", &vp); + + jsval args = OBJECT_TO_JSVAL(jsobj); + + if (data.isBinary) + {// data is binary + JSObject* buffer = JS_NewArrayBuffer(cx, data.len); + uint8_t* bufdata = JS_GetArrayBufferData(buffer); + memcpy((void*)bufdata, (void*)data.bytes, data.len); + jsval dataVal = OBJECT_TO_JSVAL(buffer); + JS_SetProperty(cx, jsobj, "data", &dataVal); + } + else + {// data is string + jsval dataVal = c_string_to_jsval(cx, data.bytes); + JS_SetProperty(cx, jsobj, "data", &dataVal); + } + + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), "onmessage", 1, &args); + } + + virtual void onClose(WebSocket* ws) + { + js_proxy_t * p = jsb_get_native_proxy(ws); + if (!p) return; + + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JSObject* jsobj = JS_NewObject(cx, NULL, NULL, NULL); + jsval vp = c_string_to_jsval(cx, "close"); + JS_SetProperty(cx, jsobj, "type", &vp); + + jsval args = OBJECT_TO_JSVAL(jsobj); + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), "onclose", 1, &args); + + js_proxy_t* jsproxy = jsb_get_js_proxy(p->obj); + JS_RemoveObjectRoot(cx, &jsproxy->obj); + jsb_remove_proxy(p, jsproxy); + CC_SAFE_DELETE(ws); + } + + virtual void onError(WebSocket* ws, const WebSocket::ErrorCode& error) + { + js_proxy_t * p = jsb_get_native_proxy(ws); + if (!p) return; + + JSContext* cx = ScriptingCore::getInstance()->getGlobalContext(); + JSObject* jsobj = JS_NewObject(cx, NULL, NULL, NULL); + jsval vp = c_string_to_jsval(cx, "error"); + JS_SetProperty(cx, jsobj, "type", &vp); + + jsval args = OBJECT_TO_JSVAL(jsobj); + + ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(_JSDelegate), "onerror", 1, &args); + } + + void setJSDelegate(JSObject* pJSDelegate) + { + _JSDelegate = pJSDelegate; + } +private: + JSObject* _JSDelegate; +}; + +JSClass *js_cocos2dx_websocket_class; +JSObject *js_cocos2dx_websocket_prototype; + +void js_cocos2dx_WebSocket_finalize(JSFreeOp *fop, JSObject *obj) { + CCLOG("jsbindings: finalizing JS object %p (WebSocket)", obj); +} + +JSBool js_cocos2dx_extension_WebSocket_send(JSContext *cx, uint32_t argc, jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + WebSocket* cobj = (WebSocket *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + + if(argc == 1){ + do + { + if (JSVAL_IS_STRING(argv[0])) + { + std::string data; + jsval_to_std_string(cx, argv[0], &data); + cobj->send(data); + break; + } + + if (argv[0].isObject()) + { + uint8_t *bufdata = NULL; + uint32_t len = 0; + + JSObject* jsobj = JSVAL_TO_OBJECT(argv[0]); + if (JS_IsArrayBufferObject(jsobj)) + { + bufdata = JS_GetArrayBufferData(jsobj); + len = JS_GetArrayBufferByteLength(jsobj); + } + else if (JS_IsArrayBufferViewObject(jsobj)) + { + bufdata = (uint8_t*)JS_GetArrayBufferViewData(jsobj); + len = JS_GetArrayBufferViewByteLength(jsobj); + } + + if (bufdata && len > 0) + { + cobj->send(bufdata, len); + break; + } + } + + JS_ReportError(cx, "data type to be sent is unsupported."); + + } while (0); + + JS_SET_RVAL(cx, vp, JSVAL_VOID); + + return JS_TRUE; + } + JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 0); + return JS_TRUE; +} + +JSBool js_cocos2dx_extension_WebSocket_close(JSContext *cx, uint32_t argc, jsval *vp){ + JSObject *obj = JS_THIS_OBJECT(cx, vp); + js_proxy_t *proxy = jsb_get_js_proxy(obj); + WebSocket* cobj = (WebSocket *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + + if(argc == 0){ + cobj->close(); + JS_SET_RVAL(cx, vp, JSVAL_VOID); + return JS_TRUE; + } + JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 0); + return JS_FALSE; +} + +JSBool js_cocos2dx_extension_WebSocket_constructor(JSContext *cx, uint32_t argc, jsval *vp) +{ + jsval *argv = JS_ARGV(cx, vp); + + if (argc == 1 || argc == 2) + { + + std::string url; + + do { + JSBool ok = jsval_to_std_string(cx, argv[0], &url); + JSB_PRECONDITION2( ok, cx, JS_FALSE, "Error processing arguments"); + } while (0); + + JSObject *obj = JS_NewObject(cx, js_cocos2dx_websocket_class, js_cocos2dx_websocket_prototype, NULL); + + + WebSocket* cobj = new WebSocket(); + JSB_WebSocketDelegate* delegate = new JSB_WebSocketDelegate(); + delegate->setJSDelegate(obj); + + if (argc == 2) + { + std::vector protocols; + + if (JSVAL_IS_STRING(argv[1])) + { + std::string protocol; + do { + JSBool ok = jsval_to_std_string(cx, argv[1], &protocol); + JSB_PRECONDITION2( ok, cx, JS_FALSE, "Error processing arguments"); + } while (0); + protocols.push_back(protocol); + } + else if (argv[1].isObject()) + { + JSBool ok = JS_TRUE; + JSObject* arg2 = JSVAL_TO_OBJECT(argv[1]); + JSB_PRECONDITION(JS_IsArrayObject( cx, arg2 ), "Object must be an array"); + + uint32_t len = 0; + JS_GetArrayLength(cx, arg2, &len); + + for( uint32_t i=0; i< len;i++ ) + { + jsval valarg; + JS_GetElement(cx, arg2, i, &valarg); + std::string protocol; + do { + ok = jsval_to_std_string(cx, valarg, &protocol); + JSB_PRECONDITION2( ok, cx, JS_FALSE, "Error processing arguments"); + } while (0); + + protocols.push_back(protocol); + } + } + cobj->init(*delegate, url, &protocols); + } + else + { + cobj->init(*delegate, url); + } + + + JS_DefineProperty(cx, obj, "URL", argv[0] + , NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY); + + //protocol not support yet (always return "") + JS_DefineProperty(cx, obj, "protocol", c_string_to_jsval(cx, "") + , NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY); + + // link the native object with the javascript object + js_proxy_t *p = jsb_new_proxy(cobj, obj); + JS_AddNamedObjectRoot(cx, &p->obj, "WebSocket"); + + JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj)); + return JS_TRUE; + } + + JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 0); + return JS_FALSE; +} + +static JSBool js_cocos2dx_extension_WebSocket_get_readyState(JSContext *cx, JSHandleObject obj, JSHandleId id, JSMutableHandleValue vp) +{ + JSObject* jsobj = obj.get(); + js_proxy_t *proxy = jsb_get_js_proxy(jsobj); + WebSocket* cobj = (WebSocket *)(proxy ? proxy->ptr : NULL); + JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); + + if (cobj) { + vp.set(INT_TO_JSVAL((int)cobj->getReadyState())); + return JS_TRUE; + } else { + JS_ReportError(cx, "Error: WebSocket instance is invalid."); + return JS_FALSE; + } +} + +void register_jsb_websocket(JSContext *cx, JSObject *global) { + + js_cocos2dx_websocket_class = (JSClass *)calloc(1, sizeof(JSClass)); + js_cocos2dx_websocket_class->name = "WebSocket"; + js_cocos2dx_websocket_class->addProperty = JS_PropertyStub; + js_cocos2dx_websocket_class->delProperty = JS_DeletePropertyStub; + js_cocos2dx_websocket_class->getProperty = JS_PropertyStub; + js_cocos2dx_websocket_class->setProperty = JS_StrictPropertyStub; + js_cocos2dx_websocket_class->enumerate = JS_EnumerateStub; + js_cocos2dx_websocket_class->resolve = JS_ResolveStub; + js_cocos2dx_websocket_class->convert = JS_ConvertStub; + js_cocos2dx_websocket_class->finalize = js_cocos2dx_WebSocket_finalize; + js_cocos2dx_websocket_class->flags = JSCLASS_HAS_RESERVED_SLOTS(2); + + static JSPropertySpec properties[] = { + {"readyState", 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_SHARED, JSOP_WRAPPER(js_cocos2dx_extension_WebSocket_get_readyState), NULL}, + {0, 0, 0, 0, 0} + }; + + static JSFunctionSpec funcs[] = { + JS_FN("send",js_cocos2dx_extension_WebSocket_send, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FN("close",js_cocos2dx_extension_WebSocket_close, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE), + JS_FS_END + }; + + static JSFunctionSpec st_funcs[] = { + JS_FS_END + }; + + js_cocos2dx_websocket_prototype = JS_InitClass( + cx, global, + NULL, + js_cocos2dx_websocket_class, + js_cocos2dx_extension_WebSocket_constructor, 0, // constructor + properties, + funcs, + NULL, // no static properties + st_funcs); + + JSObject* jsclassObj = JSVAL_TO_OBJECT(anonEvaluate(cx, global, "(function () { return WebSocket; })()")); + + JS_DefineProperty(cx, jsclassObj, "CONNECTING", INT_TO_JSVAL((int)WebSocket::State::CONNECTING) + , NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY); + JS_DefineProperty(cx, jsclassObj, "OPEN", INT_TO_JSVAL((int)WebSocket::State::OPEN) + , NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY); + JS_DefineProperty(cx, jsclassObj, "CLOSING", INT_TO_JSVAL((int)WebSocket::State::CLOSING) + , NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY); + JS_DefineProperty(cx, jsclassObj, "CLOSED", INT_TO_JSVAL((int)WebSocket::State::CLOSED) + , NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY); + + // make the class enumerable in the registered namespace + JSBool found; + JS_SetPropertyAttributes(cx, global, "WebSocket", JSPROP_ENUMERATE | JSPROP_READONLY, &found); +} + + diff --git a/cocos/scripting/javascript/bindings/network/jsb_websocket.h b/cocos/scripting/javascript/bindings/network/jsb_websocket.h new file mode 100644 index 0000000000..cde0f40b2e --- /dev/null +++ b/cocos/scripting/javascript/bindings/network/jsb_websocket.h @@ -0,0 +1,34 @@ +/**************************************************************************** +Copyright (c) 2013 cocos2d-x.org +Copyright (c) 2013 James Chen + +http://www.cocos2d-x.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +****************************************************************************/ + +#ifndef __jsb_websocket__ +#define __jsb_websocket__ + +#include "jsapi.h" +#include "jsfriendapi.h" + +void register_jsb_websocket(JSContext* cx, JSObject* global); + +#endif /* defined(__jsb_websocket__) */ diff --git a/cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj b/cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj new file mode 100644 index 0000000000..e4ff3eed4b --- /dev/null +++ b/cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj @@ -0,0 +1,115 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + + + {3BEC13F5-E227-4D80-BC77-1C857F83BCFC} + Win32Proj + libJSBindingForNetwork + + + + StaticLibrary + true + Unicode + v100 + v110 + v110_xp + + + StaticLibrary + false + Unicode + v100 + v110 + v110_xp + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + $(SolutionDir)$(Configuration).win32\ + + + $(Configuration).win32\ + + + + + + Level3 + Disabled + WIN32;_WINDOWS;_DEBUG;_LIB;DEBUG;COCOS2D_DEBUG=1;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\network;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external\spidermonkey\include\win32;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)external\websockets\include\win32;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + false + + + Windows + true + + + if not exist "$(OutDir)" mkdir "$(OutDir)" +xcopy /Y /Q "$(ProjectDir)..\..\..\..\..\external\sqlite3\libraries\win32\*.*" "$(OutDir)" + + + + + Level3 + + + MaxSpeed + true + true + WIN32;_WINDOWS;NDEBUG;_LIB;XP_WIN;JS_HAVE___INTN;JS_INTPTR_TYPE=int;COCOS2D_JAVASCRIPT=1;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(ProjectDir)..;$(EngineRoot);$(EngineRoot)cocos;$(EngineRoot)cocos\network;$(EngineRoot)cocos\audio\include;$(EngineRoot)cocos\scripting\auto-generated\js-bindings;$(EngineRoot)external\spidermonkey\include\win32;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)external\websockets\include\win32;%(AdditionalIncludeDirectories) + 4068;4101;4800;4251;4244;%(DisableSpecificWarnings) + true + + + Windows + true + true + true + + + + + + + + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj.filters b/cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj.filters new file mode 100644 index 0000000000..3fd3c5a5d1 --- /dev/null +++ b/cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj.filters @@ -0,0 +1,29 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + manual + + + manual + + + + + manual + + + manual + + + \ No newline at end of file diff --git a/cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj.user b/cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj.user new file mode 100644 index 0000000000..3f03091124 --- /dev/null +++ b/cocos/scripting/javascript/bindings/network/libJSBindingForNetwork.vcxproj.user @@ -0,0 +1,6 @@ + + + + false + + \ No newline at end of file diff --git a/cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj b/cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj new file mode 100644 index 0000000000..d79eb7ce1c --- /dev/null +++ b/cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj @@ -0,0 +1,93 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + + + + + + + {632A8F38-D0F0-4D22-86B3-D69F5E6BF63A} + libLocalStorage + + + + StaticLibrary + true + v110_xp + Unicode + + + StaticLibrary + false + v110_xp + true + Unicode + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + + + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + + + + Level3 + Disabled + + + $(EngineRoot)external\sqlite3\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_LIB;COCOS2DXWIN32_EXPORTS;GL_GLEXT_PROTOTYPES;COCOS2D_DEBUG=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + 4267;4251;4244;%(DisableSpecificWarnings) + false + + + true + + + + + Level3 + MaxSpeed + true + true + + + $(EngineRoot)external\sqlite3\include;%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;_LIB;COCOS2DXWIN32_EXPORTS;GL_GLEXT_PROTOTYPES;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + + \ No newline at end of file diff --git a/cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj.filters b/cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj.filters new file mode 100644 index 0000000000..b23d606b74 --- /dev/null +++ b/cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj.filters @@ -0,0 +1,21 @@ + + + + + {0310200c-b520-4f77-85f6-46f568b10f4d} + + + {69cfa37c-4b20-409e-ad74-a26314878d8a} + + + + + Source Files + + + + + Header Files + + + \ No newline at end of file diff --git a/cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj.user b/cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj.user new file mode 100644 index 0000000000..a375ae3527 --- /dev/null +++ b/cocos/storage/local-storage/proj.win32/libLocalStorage.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file