diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b314281b2..3bddd153ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,6 +46,7 @@ include(PreventInSourceBuilds) include(CocosBuildSet) option(AX_BUILD_TESTS "Build cpp & lua tests" ON) +option(AX_BUILD_EXAMPLES "Build examples" ON) set(AX_ENABLE_EXT_LUA ON) @@ -57,7 +58,7 @@ set(BUILD_ENGINE_DONE ON) if(AX_BUILD_TESTS) # add cpp-template-default into project(adxe) for tmp test add_subdirectory(${ADXE_ROOT_PATH}/templates/cpp-template-default ${ENGINE_BINARY_PATH}/tests/HelloCpp) - + # add cpp tests default add_subdirectory(${ADXE_ROOT_PATH}/tests/cpp-tests ${ENGINE_BINARY_PATH}/tests/cpp-tests) @@ -72,3 +73,8 @@ if(AX_BUILD_TESTS) endif(AX_ENABLE_EXT_LUA) endif() + +if(AX_BUILD_EXAMPLES) + # add examples/SimpleSnake into project(adxe) for tmp example + add_subdirectory(${ADXE_ROOT_PATH}/examples/SimpleSnake ${ENGINE_BINARY_PATH}/examples/SimpleSnake) +endif() \ No newline at end of file diff --git a/README.md b/README.md index beec48417b..722286c78d 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ Open [APPENDIX.md](APPENDIX.md) for additional information and see [Milestones]( 6. Note: If you use non-sdk provided CMake edition, you will need to download ```ninja``` from https://github.com/ninja-build/ninja/releases, and copy ```ninja.exe``` to cmake's bin directory #### iOS - 1. Ensure xcode11+ & [cmake3.21+](https://github.com/Kitware/CMake/releases) are installed, install cmake command line support: ```sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install``` + 1. Ensure xcode12+ & [cmake3.21+](https://github.com/Kitware/CMake/releases) are installed, install cmake command line support: ```sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install``` 2. Execute the following command ```sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer``` 3. Generate xcode project diff --git a/README_CN.md b/README_CN.md index 99027375ec..539a4093bf 100644 --- a/README_CN.md +++ b/README_CN.md @@ -80,7 +80,7 @@ 6. 如果使用非sdk自动安装的CMake版本, 需要下载[ninja](https://github.com/ninja-build/ninja/releases), 并且拷贝```ninja.exe```到CMake的bin目录 #### iOS - 1. 确保已安装xcode11+和[cmake3.21+](https://github.com/Kitware/CMake/releases), 安装CMake命令行支持: ```sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install``` + 1. 确保已安装xcode12+和[cmake3.21+](https://github.com/Kitware/CMake/releases), 安装CMake命令行支持: ```sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install``` 2. 执行如下命令确保cmake能成功生成xcode工程: ```sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer``` 3. 生成xcode工程, 进入adxe根目录执行如下命令之一: diff --git a/core/2d/CCCamera.cpp b/core/2d/CCCamera.cpp index b440e89f2a..a3ca7e792a 100644 --- a/core/2d/CCCamera.cpp +++ b/core/2d/CCCamera.cpp @@ -27,6 +27,7 @@ ****************************************************************************/ #include "2d/CCCamera.h" #include "2d/CCCameraBackgroundBrush.h" +#include "base/CCDirector.h" #include "platform/CCGLView.h" #include "2d/CCScene.h" #include "renderer/CCRenderer.h" @@ -93,14 +94,6 @@ const Camera* Camera::getVisitingCamera() // end static methods Camera::Camera() - : _eyeZdistance(1) - , _zoomFactor(1) - , _nearPlane(-1024) - , _farPlane(1024) - , _zoomFactorNearPlane(10) - , _zoomFactorFarPlane(1024) - , _originalPosition({0, 0}) - , _isCameraInitialized(false) { // minggo comment // _frustum.setClipZ(true); @@ -144,7 +137,6 @@ void Camera::lookAt(const Vec3& lookAtPos, const Vec3& up) Vec3::cross(zaxis, xaxis, &yaxis); yaxis.normalize(); Mat4 rotation; - rotation.m[0] = xaxis.x; rotation.m[1] = xaxis.y; rotation.m[2] = xaxis.z; @@ -154,7 +146,6 @@ void Camera::lookAt(const Vec3& lookAtPos, const Vec3& up) rotation.m[5] = yaxis.y; rotation.m[6] = yaxis.z; rotation.m[7] = 0; - rotation.m[8] = zaxis.x; rotation.m[9] = zaxis.y; rotation.m[10] = zaxis.z; @@ -186,27 +177,15 @@ void Camera::setAdditionalProjection(const Mat4& mat) bool Camera::initDefault() { - if (_projectionType != _director->getProjection()) - { - _projectionType = _director->getProjection(); - _isCameraInitialized = false; - } - - if (_isCameraInitialized) - { - applyCustomProperties(); - return true; - } - _isCameraInitialized = true; - - auto& size = _director->getWinSize(); + auto size = _director->getWinSize(); // create default camera - switch (_projectionType) + auto projection = _director->getProjection(); + switch (projection) { case Director::Projection::_2D: { initOrthographic(size.width, size.height, -1024, 1024); - setPosition3D(Vec3(size.width / 2, size.height / 2, 0.f)); + setPosition3D(Vec3(0.0f, 0.0f, 0.0f)); setRotation3D(Vec3(0.f, 0.f, 0.f)); break; } @@ -214,9 +193,8 @@ bool Camera::initDefault() { float zeye = _director->getZEye(); initPerspective(60, (float)size.width / size.height, 10, zeye + size.height / 2.0f); - Vec3 eye(size.width / 2.0f, size.height / 2.0f, zeye), center(size.width / 2.0f, size.height / 2.0f, 0.0f), + Vec3 eye(size.width / 2, size.height / 2.0f, zeye), center(size.width / 2, size.height / 2, 0.0f), up(0.0f, 1.0f, 0.0f); - _eyeZdistance = eye.z; setPosition3D(eye); lookAt(center, up); break; @@ -225,24 +203,15 @@ bool Camera::initDefault() CCLOG("unrecognized projection"); break; } - if (_zoomFactor != 1.0F) - applyZoom(); - setPosition(getPosition()); return true; } bool Camera::initPerspective(float fieldOfView, float aspectRatio, float nearPlane, float farPlane) { - _fieldOfView = fieldOfView; - _aspectRatio = aspectRatio; - _nearPlane = nearPlane; - _farPlane = farPlane; - - if (_zoomFactorFarPlane == 1024) - _zoomFactorFarPlane = farPlane; - if (_zoomFactorNearPlane == 10) - _zoomFactorNearPlane = nearPlane; - + _fieldOfView = fieldOfView; + _aspectRatio = aspectRatio; + _nearPlane = nearPlane; + _farPlane = farPlane; Mat4::createPerspective(_fieldOfView, _aspectRatio, _nearPlane, _farPlane, &_projection); _viewProjectionDirty = true; _frustumDirty = true; @@ -290,7 +259,7 @@ Vec2 Camera::projectGL(const Vec3& src) const Vec4 clipPos; getViewProjectionMatrix().transformVector(Vec4(src.x, src.y, src.z, 1.0f), &clipPos); - //CCASSERT(clipPos.w != 0.0f, "clipPos.w can't be 0.0f!"); + CCASSERT(clipPos.w != 0.0f, "clipPos.w can't be 0.0f!"); float ndcX = clipPos.x / clipPos.w; float ndcY = clipPos.y / clipPos.w; @@ -385,85 +354,6 @@ void Camera::setDepth(int8_t depth) } } -void Camera::setZoom(float factor) -{ - if (_projectionType == Director::Projection::_3D) - { - // Push the far plane farther the more we zoom out. - if (_zoomFactorFarPlane * factor > _farPlane) - { - _farPlane = _zoomFactorFarPlane * factor; - applyCustomProperties(); - } - - // Push the near plane closer the more we zoom in. - if (_zoomFactorNearPlane * factor < _nearPlane) - { - _nearPlane = _zoomFactorNearPlane * factor; - applyCustomProperties(); - } - } - - _zoomFactor = factor; - applyZoom(); - if (_projectionType == Director::Projection::_2D) - setPosition(getPosition()); -} - -void Camera::applyZoom() -{ - switch (_projectionType) - { - case cocos2d::Director::Projection::_2D: - { - this->setScale(_zoomFactor); - break; - } - case cocos2d::Director::Projection::_3D: - { - this->setPositionZ(_eyeZdistance * _zoomFactor); - break; - } - } -} - -void Camera::applyCustomProperties() -{ - if (_projectionType != _director->getProjection()) - { - _projectionType = _director->getProjection(); - _isCameraInitialized = false; - initDefault(); - return; - } - - auto& size = _director->getWinSize(); - // create default camera - switch (_projectionType) - { - case Director::Projection::_2D: - { - initOrthographic(size.width, size.height, _nearPlane, _farPlane); - setPosition3D(Vec3(size.width / 2, size.height / 2, 0.f)); - _originalPosition = {size.width / 2, size.height / 2}; - break; - } - case Director::Projection::_3D: - { - float zeye = _director->getZEye(); - initPerspective(_fieldOfView, _aspectRatio, _nearPlane, _farPlane); - Vec3 eye(size.width / 2.0f, size.height / 2.0f, zeye), center(size.width / 2.0f, size.height / 2.0f, 0.0f), - up(0.0f, 1.0f, 0.0f); - _eyeZdistance = eye.z; - setPosition3D(eye); - break; - } - } - if (_zoomFactor != 1.0F) - applyZoom(); - setPosition(getPosition()); -} - void Camera::onEnter() { if (_scene == nullptr) @@ -484,97 +374,6 @@ void Camera::onExit() Node::onExit(); } -inline const Vec2& getPositionCenter(const Vec2& pos, - Director::Projection projectionType, - float zoomFactor, - float angleOfRotation) -{ - auto director = Director::getInstance(); - if (projectionType == Director::Projection::_2D) - { - auto v = director->getVisibleSize(); - auto rpos = Vec2(0, 0); - rpos -= v / 2; - rpos.x += pos.x + v.width / 2 * (1.0F - zoomFactor); - rpos.y += pos.y + v.height / 2 * (1.0F - zoomFactor); - return rpos.rotateByAngle(rpos + v / 2 * zoomFactor, -CC_DEGREES_TO_RADIANS(angleOfRotation)); - } - return pos; -} - -const Vec2& Camera::getPosition() const -{ - return _originalPosition; -} - -void Camera::setPosition(const Vec2& position) -{ - _originalPosition = {position.x, position.y}; - auto& pos = getPositionCenter(position, _projectionType, getZoom(), getRotation()); - Node::setPosition(pos.x, pos.y); -} - -void Camera::getPosition(float* x, float* y) const -{ - *x = _originalPosition.x; - *y = _originalPosition.y; -} - -void Camera::setPosition(float x, float y) -{ - _originalPosition = {x, y}; - auto& pos = getPositionCenter({x, y}, _projectionType, getZoom(), getRotation()); - Node::setPosition(pos.x, pos.y); -} - -void Camera::setPosition3D(const Vec3& position) -{ - _originalPosition = {position.x, position.y}; - auto& pos = getPositionCenter({position.x, position.y}, _projectionType, getZoom(), getRotation()); - Node::setPosition3D({pos.x, pos.y, position.z}); -} - -Vec3 Camera::getPosition3D() const -{ - return {_originalPosition.x, _originalPosition.y, getPositionZ()}; -} - -float Camera::getPositionX() const -{ - return _originalPosition.x; -} - -void Camera::setPositionX(float x) -{ - setPosition(x, _originalPosition.y); -} - -float Camera::getPositionY() const -{ - return _originalPosition.y; -} - -void Camera::setPositionY(float y) -{ - setPosition(_originalPosition.x, y); -} - -float Camera::getPositionZ() const -{ - return Node::getPositionZ(); -} - -void Camera::setPositionZ(float positionZ) -{ - Node::setPositionZ(positionZ); -} - -void Camera::setRotation(float rotation) -{ - Node::setRotation(rotation); - setPosition(getPosition()); -} - void Camera::setScene(Scene* scene) { if (_scene != scene) @@ -632,30 +431,6 @@ int Camera::getRenderOrder() const return result; } -void Camera::setAspectRatio(float ratio) -{ - _aspectRatio = ratio; - applyCustomProperties(); -} - -void Camera::setFOV(float fieldOfView) -{ - _fieldOfView = fieldOfView; - applyCustomProperties(); -} - -void Camera::setFarPlane(float farPlane) -{ - _farPlane = farPlane; - applyCustomProperties(); -} - -void Camera::setNearPlane(float nearPlane) -{ - _nearPlane = nearPlane; - applyCustomProperties(); -} - void Camera::visit(Renderer* renderer, const Mat4& parentTransform, uint32_t parentFlags) { _viewProjectionUpdated = _transformUpdated; diff --git a/core/2d/CCCamera.h b/core/2d/CCCamera.h index 7281f73e9f..da5108bd41 100644 --- a/core/2d/CCCamera.h +++ b/core/2d/CCCamera.h @@ -31,7 +31,6 @@ THE SOFTWARE. #include "3d/CCFrustum.h" #include "renderer/CCQuadCommand.h" #include "renderer/CCCustomCommand.h" -#include "base/CCDirector.h" NS_CC_BEGIN @@ -235,141 +234,22 @@ public: int getRenderOrder() const; /** - * Gets the aspect ratio of the camera if the projection mode is 3D. - */ - float getAspectRatio() const { return _fieldOfView; } - - /** - * Sets the aspect ratio of the camera if the projection mode is 3D. - */ - void setAspectRatio(float ratio); - - /** - * Gets the field of view of the camera if the projection mode is 3D. - */ - float getFOV() const { return _fieldOfView; } - - /** - * Sets the field of view of the camera if the projection mode is 3D. - */ - void setFOV(float fov); - - /** - * Gets the frustum's far plane. + * Get the frustum's far plane. */ float getFarPlane() const { return _farPlane; } /** - * Sets the frustum's far plane. - */ - void setFarPlane(float farPlane); - - /** - * Gets the frustum's near plane. + * Get the frustum's near plane. */ float getNearPlane() const { return _nearPlane; } - /** - * Gets the frustum's near plane. - */ - void setNearPlane(float nearPlane); - - /** - * Gets the zoom multiplier of the camera. - */ - float getZoom() const { return _zoomFactor; } - - /** - * Sets the zoom multiplier of the camera. - * This is designed to be used with 2D views only. - * - * @param factor The zoom factor of the camera. - */ - void setZoom(float factor); - - /** - Apply the zoom factor. - */ - void applyZoom(); - - /** - Apply the fov, near far planes and aspect values non-destructively. - */ - void applyCustomProperties(); - // override virtual void onEnter() override; virtual void onExit() override; /** - * Override of getPosition() in Node class for custom behaviours - */ - virtual const Vec2& getPosition() const override; - - /** - * Override of getPosition() in Node class for custom behaviours - */ - virtual void setPosition(const Vec2& position) override; - - /** - * Override of getPosition() in Node class for custom behaviours - */ - virtual void getPosition(float* x, float* y) const override; - - /** - * Override of setPosition() in Node class for custom behaviours - */ - virtual void setPosition(float x, float y) override; - - /** - * Override of setPosition3D() in Node class for custom behaviours - */ - virtual void setPosition3D(const Vec3& position) override; - - /** - * Override of getPosition3D() in Node class for custom behaviours - */ - virtual Vec3 getPosition3D() const override; - - /** - * Override of getPositionX() in Node class for custom behaviours - */ - virtual float getPositionX() const override; - - /** - * Override of setPositionX() in Node class for custom behaviours - */ - virtual void setPositionX(float x) override; - - /** - * Override of getPositionY() in Node class for custom behaviours - */ - virtual float getPositionY() const override; - - /** - * Override of setPositionY() in Node class for custom behaviours - */ - virtual void setPositionY(float y) override; - - /** - * Override of getPositionZ() in Node class for custom behaviours - */ - virtual float getPositionZ() const override; - - /** - * Override of setPositionZ() in Node class for custom behaviours - */ - virtual void setPositionZ(float positionZ) override; - - /** - * Override of setRotation() in Node class for custom behaviours - */ - virtual void setRotation(float rotation) override; - - /** - Before rendering the scene with this camera, the background needs to be cleared. - It will clear the depth buffer with max depth by default. - Use setBackgroundBrush to modify this default behavior. + Before rendering scene with this camera, the background need to be cleared. It clears the depth buffer with max + depth by default. Use setBackgroundBrush to modify the default behavior */ void clearBackground(); /** @@ -378,8 +258,8 @@ public: void apply(); /** - * Whether or not the viewprojection matrix was updated last frame. - * @return True if the viewprojection matrix was updated last frame. + * Whether or not the viewprojection matrix was updated since the last frame. + * @return True if the viewprojection matrix was updated since the last frame. */ bool isViewProjectionUpdated() const { return _viewProjectionUpdated; } @@ -402,7 +282,7 @@ public: ~Camera(); /** - * Set the owner scene of the camera, this method shall not be invoked manually + * Set the scene,this method shall not be invoke manually */ void setScene(Scene* scene); @@ -420,7 +300,7 @@ protected: static Camera* _visitingCamera; static Viewport _defaultViewport; - Scene* _scene = nullptr; // Scene that owns this camera. + Scene* _scene = nullptr; // Scene camera belongs to Mat4 _projection; mutable Mat4 _view; mutable Mat4 _viewInv; @@ -440,15 +320,6 @@ protected: mutable bool _frustumDirty = true; int8_t _depth = -1; // camera depth, the depth of camera with CameraFlag::DEFAULT flag is 0 by default, a camera // with larger depth is drawn on top of camera with smaller depth - Director::Projection _projectionType; - - float _eyeZdistance; // Z eye projection distance for 2D in 3D projection. - float _zoomFactor; // The zoom factor of the camera. 3D = (cameraZDistance * _zoomFactor), 2D = (cameraScale * _zoomFactor) - float _zoomFactorFarPlane; - float _zoomFactorNearPlane; - Vec2 _originalPosition; - - bool _isCameraInitialized; CameraBackgroundBrush* _clearBrush = nullptr; // brush used to clear the back ground }; diff --git a/core/2d/CCNode.cpp b/core/2d/CCNode.cpp index 4ed9ee2c72..0626859402 100644 --- a/core/2d/CCNode.cpp +++ b/core/2d/CCNode.cpp @@ -502,7 +502,7 @@ const Vec2& Node::getPosition() const /// position setter void Node::setPosition(const Vec2& position) { - Node::setPosition(position.x, position.y); + setPosition(position.x, position.y); } void Node::getPosition(float* x, float* y) const @@ -525,8 +525,8 @@ void Node::setPosition(float x, float y) void Node::setPosition3D(const Vec3& position) { - Node::setPositionZ(position.z); - Node::setPosition(position.x, position.y); + setPositionZ(position.z); + setPosition(position.x, position.y); } Vec3 Node::getPosition3D() const @@ -541,7 +541,7 @@ float Node::getPositionX() const void Node::setPositionX(float x) { - Node::setPosition(x, _position.y); + setPosition(x, _position.y); } float Node::getPositionY() const @@ -551,7 +551,7 @@ float Node::getPositionY() const void Node::setPositionY(float y) { - Node::setPosition(_position.x, y); + setPosition(_position.x, y); } float Node::getPositionZ() const diff --git a/core/adxe.cpp b/core/adxe.cpp index 7196da048d..a1f2cbbfab 100644 --- a/core/adxe.cpp +++ b/core/adxe.cpp @@ -36,4 +36,9 @@ CC_DLL const char* adxeVersion() return "adxe-1.0.0b7"; } +CC_DLL const char* cocos2dVersion() +{ + return adxeVersion(); +} + NS_CC_END diff --git a/core/cocos2d.h b/core/cocos2d.h index 9bc0b78f1f..28dd210651 100644 --- a/core/cocos2d.h +++ b/core/cocos2d.h @@ -37,10 +37,7 @@ THE SOFTWARE. NS_CC_BEGIN -inline const char* cocos2dVersion() -{ - return adxeVersion(); -} +CC_DLL const char* cocos2dVersion(); NS_CC_END diff --git a/core/renderer/backend/opengl/DeviceInfoGL.cpp b/core/renderer/backend/opengl/DeviceInfoGL.cpp index 49b718633b..7d651a36f4 100644 --- a/core/renderer/backend/opengl/DeviceInfoGL.cpp +++ b/core/renderer/backend/opengl/DeviceInfoGL.cpp @@ -69,7 +69,7 @@ static bool checkReallySupportsASTC() auto error = glGetError(); #if CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID - if (!error) + if (!error && glGetTexImage) { // read pixel RGB: should be: 255, 128, 0 uint8_t pixels[TEXTURE_DIM * TEXTURE_DIM * 4] = {0}; diff --git a/examples/SimpleSnake/CMakeLists.txt b/examples/SimpleSnake/CMakeLists.txt new file mode 100644 index 0000000000..02bd1cc816 --- /dev/null +++ b/examples/SimpleSnake/CMakeLists.txt @@ -0,0 +1,203 @@ +#/**************************************************************************** +# Copyright (c) 2013-2014 cocos2d-x.org +# Copyright (c) 2021-2022 Bytedance Inc. +# +# https://adxeproject.github.io +# +# 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. +# ****************************************************************************/ + +cmake_minimum_required(VERSION 3.10) + +set(APP_NAME SimpleSnake) + +project(${APP_NAME}) + +if(NOT DEFINED BUILD_ENGINE_DONE) # to test HelloCpp into root project + if(XCODE) + set(CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY TRUE) + endif() + + # config quick starter batch script run.bat for windows + if(WIN32) + file(RELATIVE_PATH CMAKE_BUILD_RELATIVE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}") + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/run.bat.in" "${CMAKE_CURRENT_SOURCE_DIR}/run.bat" @ONLY) + endif() + + set(ADXE_ROOT "$ENV{ADXE_ROOT}") + + if(NOT (ADXE_ROOT STREQUAL "")) + set(ADXE_ROOT_PATH "${ADXE_ROOT}") + file(TO_CMAKE_PATH ${ADXE_ROOT_PATH} ADXE_ROOT_PATH) # string(REPLACE "\\" "/" ADXE_ROOT_PATH ${ADXE_ROOT_PATH}) + message(STATUS "Using system env var ADXE_ROOT=${ADXE_ROOT}") + else() + message(FATAL_ERROR "Please run setup.py add system env var 'ADXE_ROOT' to specific the engine root") + endif() + + set(CMAKE_MODULE_PATH ${ADXE_ROOT_PATH}/cmake/Modules/) + + include(CocosBuildSet) + set(_AX_USE_PREBUILT FALSE) + if (WIN32 AND DEFINED AX_PREBUILT_DIR AND IS_DIRECTORY ${ADXE_ROOT_PATH}/${AX_PREBUILT_DIR}) + set(_AX_USE_PREBUILT TRUE) + endif() + + if (NOT _AX_USE_PREBUILT) + add_subdirectory(${ADXE_ROOT_PATH}/core ${ENGINE_BINARY_PATH}/adxe/core) + endif() +endif() + +# record sources, headers, resources... +set(GAME_SOURCE) +set(GAME_HEADER) + +set(GAME_RES_FOLDER + "${CMAKE_CURRENT_SOURCE_DIR}/Resources" + ) +if(APPLE OR WINDOWS) + cocos_mark_multi_resources(common_res_files RES_TO "Resources" FOLDERS ${GAME_RES_FOLDER}) +endif() + +# add cross-platforms source files and header files +list(APPEND GAME_SOURCE + Classes/AppDelegate.cpp + Classes/SimpleSnakeScene.cpp + ) +list(APPEND GAME_HEADER + Classes/AppDelegate.h + Classes/SimpleSnakeScene.h + ) + +if(ANDROID) + # the APP_NAME should match on AndroidManifest.xml + list(APPEND GAME_SOURCE + proj.android/app/jni/hellocpp/main.cpp + ) +elseif(LINUX) + list(APPEND GAME_SOURCE + proj.linux/main.cpp + ) +elseif(WINDOWS) + list(APPEND GAME_HEADER + proj.win32/main.h + proj.win32/resource.h + ) + list(APPEND GAME_SOURCE + proj.win32/main.cpp + proj.win32/game.rc + ${common_res_files} + ) +elseif(APPLE) + if(IOS) + list(APPEND GAME_HEADER + proj.ios_mac/ios/AppController.h + proj.ios_mac/ios/RootViewController.h + ) + set(APP_UI_RES + proj.ios_mac/ios/LaunchScreen.storyboard + proj.ios_mac/ios/LaunchScreenBackground.png + proj.ios_mac/ios/Images.xcassets + ) + list(APPEND GAME_SOURCE + proj.ios_mac/ios/main.m + proj.ios_mac/ios/AppController.mm + proj.ios_mac/ios/RootViewController.mm + proj.ios_mac/ios/Prefix.pch + ${APP_UI_RES} + ) + elseif(MACOSX) + set(APP_UI_RES + proj.ios_mac/mac/Icon.icns + proj.ios_mac/mac/Info.plist + ) + list(APPEND GAME_SOURCE + proj.ios_mac/mac/main.cpp + proj.ios_mac/mac/Prefix.pch + ${APP_UI_RES} + ) + endif() + list(APPEND GAME_SOURCE ${common_res_files}) +endif() + +# mark app complie info and libs info +set(all_code_files + ${GAME_HEADER} + ${GAME_SOURCE} + ) +if(NOT ANDROID) + add_executable(${APP_NAME} ${all_code_files}) +else() + add_library(${APP_NAME} SHARED ${all_code_files}) + # whole archive for jni + add_subdirectory(${ADXE_ROOT_PATH}/core/platform/android ${ENGINE_BINARY_PATH}/core/platform) + target_link_libraries(${APP_NAME} -Wl,--whole-archive cpp_android_spec -Wl,--no-whole-archive) + config_android_shared_libs("org.cocos2dx.lib" "${CMAKE_CURRENT_SOURCE_DIR}/proj.android/app/src") +endif() + +if (NOT _AX_USE_PREBUILT) + target_link_libraries(${APP_NAME} ${ADXE_CORE_LIB}) +endif() + +target_include_directories(${APP_NAME} + PRIVATE Classes + PRIVATE ${ADXE_ROOT_PATH}/core/audio +) + +# mark app resources +setup_cocos_app_config(${APP_NAME}) +if(APPLE) + set_target_properties(${APP_NAME} PROPERTIES RESOURCE "${APP_UI_RES}") + set_xcode_property(${APP_NAME} INSTALL_PATH "\$(LOCAL_APPS_DIR)") + set_xcode_property(${APP_NAME} PRODUCT_BUNDLE_IDENTIFIER "org.adxe.hellocpp") + + if(MACOSX) + set_target_properties(${APP_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/proj.ios_mac/mac/Info.plist") + elseif(IOS) + set_target_properties(${APP_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/proj.ios_mac/ios/Info.plist") + set_xcode_property(${APP_NAME} ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon") + endif() + + # For code-signing, set the DEVELOPMENT_TEAM: + #set_xcode_property(${APP_NAME} DEVELOPMENT_TEAM "GRLXXXX2K9") +elseif(WINDOWS) + if(NOT _AX_USE_PREBUILT) + cocos_copy_target_dll(${APP_NAME}) + endif() +endif() + +if((WINDOWS AND (CMAKE_GENERATOR STREQUAL "Ninja")) OR LINUX) + cocos_get_resource_path(APP_RES_DIR ${APP_NAME}) + cocos_copy_target_res(${APP_NAME} LINK_TO ${APP_RES_DIR} FOLDERS ${GAME_RES_FOLDER}) +elseif(WINDOWS) + set_property(TARGET ${APP_NAME} PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "${GAME_RES_FOLDER}") + if(NOT DEFINED BUILD_ENGINE_DONE) + set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT ${APP_NAME}) + endif() +endif() + +# The optional thirdparties(not dependent by engine) +if (AX_WITH_YAML_CPP) + target_include_directories(${APP_NAME} PRIVATE ${ADXE_ROOT_PATH}/thirdparty/yaml-cpp/include) + target_link_libraries(${APP_NAME} yaml-cpp) +endif() + +if (_AX_USE_PREBUILT) # support windows only + include(${ADXE_ROOT_PATH}/cmake/Modules/AdxeLinkHelpers.cmake) + adxe_link_cxx_prebuilt(${APP_NAME} ${ADXE_ROOT_PATH} ${AX_PREBUILT_DIR}) +endif() \ No newline at end of file diff --git a/examples/SimpleSnake/Classes/AppDelegate.cpp b/examples/SimpleSnake/Classes/AppDelegate.cpp new file mode 100644 index 0000000000..94868dd6c4 --- /dev/null +++ b/examples/SimpleSnake/Classes/AppDelegate.cpp @@ -0,0 +1,138 @@ +/**************************************************************************** + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + Copyright (c) 2021 Bytedance Inc. + + https://adxeproject.github.io/ + + 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 "AppDelegate.h" +#include "SimpleSnakeScene.h" + +#define USE_AUDIO_ENGINE 1 + +#if USE_AUDIO_ENGINE +# include "audio/AudioEngine.h" +#endif + +USING_NS_CC; + +static cocos2d::Size designResolutionSize = cocos2d::Size(1280, 720); +static cocos2d::Size smallResolutionSize = cocos2d::Size(480, 320); +static cocos2d::Size mediumResolutionSize = cocos2d::Size(1024, 768); +static cocos2d::Size largeResolutionSize = cocos2d::Size(2048, 1536); + +AppDelegate::AppDelegate() {} + +AppDelegate::~AppDelegate() {} + +// if you want a different context, modify the value of glContextAttrs +// it will affect all platforms +void AppDelegate::initGLContextAttrs() +{ + // set OpenGL context attributes: red,green,blue,alpha,depth,stencil,multisamplesCount + GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8, 0}; + + GLView::setGLContextAttrs(glContextAttrs); +} + +// if you want to use the package manager to install more packages, +// don't modify or remove this function +static int register_all_packages() +{ + return 0; // flag for packages manager +} + +bool AppDelegate::applicationDidFinishLaunching() +{ + // initialize director + auto director = Director::getInstance(); + auto glview = director->getOpenGLView(); + if (!glview) + { +#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || \ + (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX) + glview = GLViewImpl::createWithRect( + "HelloCpp", cocos2d::Rect(0, 0, designResolutionSize.width, designResolutionSize.height)); +#else + glview = GLViewImpl::create("HelloCpp"); +#endif + director->setOpenGLView(glview); + } + + // turn on display FPS + director->setDisplayStats(true); + + // set FPS. the default value is 1.0/60 if you don't call this + director->setAnimationInterval(1.0f / 60); + + // Set the design resolution + glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, + ResolutionPolicy::NO_BORDER); + auto frameSize = glview->getFrameSize(); + // if the frame's height is larger than the height of medium size. + if (frameSize.height > mediumResolutionSize.height) + { + director->setContentScaleFactor(MIN(largeResolutionSize.height / designResolutionSize.height, + largeResolutionSize.width / designResolutionSize.width)); + } + // if the frame's height is larger than the height of small size. + else if (frameSize.height > smallResolutionSize.height) + { + director->setContentScaleFactor(MIN(mediumResolutionSize.height / designResolutionSize.height, + mediumResolutionSize.width / designResolutionSize.width)); + } + // if the frame's height is smaller than the height of medium size. + else + { + director->setContentScaleFactor(MIN(smallResolutionSize.height / designResolutionSize.height, + smallResolutionSize.width / designResolutionSize.width)); + } + + register_all_packages(); + + // create a scene. it's an autorelease object + auto scene = utils::createInstance(); + + // run + director->runWithScene(scene); + + return true; +} + +// This function will be called when the app is inactive. Note, when receiving a phone call it is invoked. +void AppDelegate::applicationDidEnterBackground() +{ + Director::getInstance()->stopAnimation(); + +#if USE_AUDIO_ENGINE + AudioEngine::pauseAll(); +#endif +} + +// this function will be called when the app is active again +void AppDelegate::applicationWillEnterForeground() +{ + Director::getInstance()->startAnimation(); + +#if USE_AUDIO_ENGINE + AudioEngine::resumeAll(); +#endif +} diff --git a/examples/SimpleSnake/Classes/AppDelegate.h b/examples/SimpleSnake/Classes/AppDelegate.h new file mode 100644 index 0000000000..c3eeef0d83 --- /dev/null +++ b/examples/SimpleSnake/Classes/AppDelegate.h @@ -0,0 +1,64 @@ +/**************************************************************************** + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + Copyright (c) 2021 Bytedance Inc. + + https://adxeproject.github.io/ + + 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 _APP_DELEGATE_H_ +#define _APP_DELEGATE_H_ + +#include "cocos2d.h" + +/** +@brief The cocos2d Application. + +Private inheritance here hides part of interface from Director. +*/ +class AppDelegate : private cocos2d::Application +{ +public: + AppDelegate(); + virtual ~AppDelegate(); + + void initGLContextAttrs() override; + + /** + @brief Implement Director and Scene init code here. + @return true Initialize success, app continue. + @return false Initialize failed, app terminate. + */ + bool applicationDidFinishLaunching() override; + + /** + @brief Called when the application moves to the background + @param the pointer of the application + */ + void applicationDidEnterBackground() override; + + /** + @brief Called when the application reenters the foreground + @param the pointer of the application + */ + void applicationWillEnterForeground() override; +}; + +#endif // _APP_DELEGATE_H_ diff --git a/examples/SimpleSnake/Classes/SimpleSnakeScene.cpp b/examples/SimpleSnake/Classes/SimpleSnakeScene.cpp new file mode 100644 index 0000000000..f839f345b5 --- /dev/null +++ b/examples/SimpleSnake/Classes/SimpleSnakeScene.cpp @@ -0,0 +1,278 @@ +/* + * Copyright (c) 2022 @aismann; Peter Eismann, Germany; dreifrankensoft + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#include "SimpleSnakeScene.h" +#include + +USING_NS_CC; + +struct Snake +{ + int x, y; +} s[snakeBodies + StartBodies]; + +struct Fruit +{ + int x, y; +} f; + +// Print useful error message instead of segfaulting when files are not there. + +static void problemLoading(const char* filename) +{ + printf("Error while loading: %s\n", filename); + printf( + "Depending on how you compiled you might have to add 'Resources/' in front of filenames in " + "HelloWorldScene.cpp\n"); +} + +// on "init" you need to initialize your instance +bool SimpleSnake::init() +{ + ////////////////////////////// + // 1. super init first + if (!Scene::init()) + { + return false; + } + + auto visibleSize = Director::getInstance()->getVisibleSize(); + auto origin = Director::getInstance()->getVisibleOrigin(); + auto safeArea = Director::getInstance()->getSafeAreaRect(); + auto safeOrigin = safeArea.origin; + + ///////////////////////////// + // 2. add a menu item with "X" image, which is clicked to quit the program + // you may modify it. + + // add a "close" icon to exit the progress. it's an autorelease object + auto closeItem = MenuItemImage::create("CloseNormal.png", "CloseSelected.png", + CC_CALLBACK_1(SimpleSnake::menuCloseCallback, this)); + + if (closeItem == nullptr || closeItem->getContentSize().width <= 0 || closeItem->getContentSize().height <= 0) + { + problemLoading("'CloseNormal.png' and 'CloseSelected.png'"); + } + else + { + float x = safeOrigin.x + safeArea.size.width - closeItem->getContentSize().width / 2; + float y = safeOrigin.y + closeItem->getContentSize().height / 2; + closeItem->setPosition(Vec2(x, y)); + } + + // create menu, it's an autorelease object + auto menu = Menu::create(closeItem, NULL); + menu->setPosition(Vec2::ZERO); + this->addChild(menu, 1); + + ///////////////////////////// + // 3. add your codes below... + + auto listener = EventListenerKeyboard::create(); + listener->onKeyPressed = CC_CALLBACK_2(SimpleSnake::onKeyPressed, this); + _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); + + // add a label shows "Hello World" + // create and initialize a label + + auto label = Label::createWithTTF("Example - Simple Snake", "fonts/Marker Felt.ttf", 24); + if (label == nullptr) + { + problemLoading("'fonts/Marker Felt.ttf'"); + } + else + { + // position the label on the center of the screen + label->setPosition( + Vec2(origin.x + visibleSize.width / 2, origin.y + visibleSize.height - label->getContentSize().height)); + + // add the label as a child to this layer + this->addChild(label, 1); + } + + // add "HelloWorld" splash screen" + auto sprite = Sprite::create("ADXE.png"sv); + if (sprite == nullptr) + { + problemLoading("'ADXE.png'"); + } + else + { + // position the sprite on the center of the screen + offset = Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y); + sprite->setPosition(offset); + + // add the sprite as a child to this layer + this->addChild(sprite, 0); + auto drawNode = DrawNode::create(); + drawNode->setPosition(Vec2(0, 0)); + addChild(drawNode); + + drawNode->drawRect(safeArea.origin, safeArea.origin + safeArea.size, Color4F::BLUE); + } + + srand(time(0)); + + mydraw = DrawNode::create(); + addChild(mydraw, 10); + + f.x = 10; + f.y = 10; + s[0].x = 20; + s[0].y = 20; + + char buffer[1024]; + + for (int i = 0; i < snakeBodies; i++) + { + myScore[i] = 0.0; + sprintf(buffer, "Level %i Time : %f", i + 1, myScore[i]); + myScoreLabel[i] = Label::createWithTTF(std::string(buffer), "fonts/Marker Felt.ttf", 24); + myScoreLabel[i]->setPosition( + Vec2(130, origin.y + visibleSize.height - label->getContentSize().height - i * 30)); + this->addChild(myScoreLabel[i], 1); + } + + scheduleUpdate(); + return true; +} + +void SimpleSnake::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event) +{ + switch (keyCode) + { + case cocos2d::EventKeyboard::KeyCode::KEY_LEFT_ARROW: + if (dir != 2) + dir = 1; + break; + case cocos2d::EventKeyboard::KeyCode::KEY_RIGHT_ARROW: + if (dir != 1) + dir = 2; + break; + case cocos2d::EventKeyboard::KeyCode::KEY_UP_ARROW: + if (dir != 3) + dir = 0; + break; + case cocos2d::EventKeyboard::KeyCode::KEY_DOWN_ARROW: + if (dir != 0) + dir = 3; + break; + default: + break; + } +} + +void SimpleSnake::menuCloseCallback(Ref* sender) +{ + Director::getInstance()->end(); +} + +void SimpleSnake::update(float delta) +{ + static float runTime = 0; + static bool finish = false; + runTime += delta; + endLevelTime += delta; + + if (finish) + { + return; + } + + if (runTime > level) + { + for (int i = num; i > 0; --i) + { + s[i] = s[i - 1]; + } + switch (dir) + { + case 0: + s[0].y++; + if (s[0].y >= M) + s[0].y = 0; + break; + case 1: + s[0].x--; + if (s[0].x < 0) + s[0].x = N; + break; + case 2: + s[0].x++; + if (s[0].x >= N) + s[0].x = 0; + break; + case 3: + s[0].y--; + if (s[0].y < 0) + s[0].y = M; + break; + default: + break; + } + + if ((s[0].x == f.x) && (s[0].y == f.y)) + { + bool posOk; + do + { + posOk = true; + f.x = rand() % N; + f.y = rand() % M; + for (int i = 0; i < num; i++) + { + if (f.x == s[i].x && f.y == s[i].y) + { + posOk = false; + break; + } + } + } while (!posOk); + + // score + char buffer[124]; + myScore[num - StartBodies] = endLevelTime; + sprintf(buffer, "Level %i Time : %f", num - StartBodies + 1, myScore[num - StartBodies]); + myScoreLabel[num - StartBodies]->setString(buffer); + if (num >= (snakeBodies + StartBodies-1)) + { + myScoreLabel[num - StartBodies]->setString("FINISH"); + finish = true; + } + + // next level + num++; + level -= 0.01; + startLevelTime = 0.0; + endLevelTime = startLevelTime; + } + runTime = 0; + } + + //////// draw /////// + mydraw->clear(); + + // Draw food + mydraw->drawDot(Vec2(size / 2 + f.x * size, size / 2 + f.y * size), size / 2, Color4B::GREEN); + + // Draw snake + for (int i = 0; i < num; i++) + { + mydraw->drawDot(Vec2(size / 2 + s[i].x * size, size / 2 + s[i].y * size), size / 2, Color4B::BLUE); + } +} \ No newline at end of file diff --git a/examples/SimpleSnake/Classes/SimpleSnakeScene.h b/examples/SimpleSnake/Classes/SimpleSnakeScene.h new file mode 100644 index 0000000000..818bda62ee --- /dev/null +++ b/examples/SimpleSnake/Classes/SimpleSnakeScene.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2022 @aismann; Peter Eismann, Germany; dreifrankensoft + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef __SIMPLE_SNAKE_SCENE_H__ +#define __SIMPLE_SNAKE_SCENE_H__ + +#include "cocos2d.h" + +const int snakeBodies = 10; +const int StartBodies = 4; + +class SimpleSnake : public cocos2d::Scene +{ +public: + virtual bool init() override; + + // a selector callback + void menuCloseCallback(Ref* sender); + virtual void update(float delta) override; + void onKeyPressed(cocos2d::EventKeyboard::KeyCode keyCode, cocos2d::Event* event); + + cocos2d::Vec2 offset; + cocos2d::DrawNode* mydraw; + + // game stuff + int N = 64, M = 36; + int size = 20; + int w = size * N; + int h = size * M; + float level = 0.1; + float myScore[snakeBodies + StartBodies]; + + float startLevelTime = 0.0; + float endLevelTime = 0.0; + + int dir, num = StartBodies; + cocos2d::Label* myScoreLabel[snakeBodies + StartBodies + 1]; +}; + +#endif // __SIMPLE_SNAKE_SCENE_H__ diff --git a/examples/SimpleSnake/README.md b/examples/SimpleSnake/README.md new file mode 100644 index 0000000000..58e7245103 --- /dev/null +++ b/examples/SimpleSnake/README.md @@ -0,0 +1,7 @@ +Simple Snake + +MIT License + + +# adxe Simple Snake Example +Easy adxe version of a "Simple Snake" game \ No newline at end of file diff --git a/examples/SimpleSnake/Resources/ADXE.png b/examples/SimpleSnake/Resources/ADXE.png new file mode 100644 index 0000000000..c1b4fd2151 Binary files /dev/null and b/examples/SimpleSnake/Resources/ADXE.png differ diff --git a/examples/SimpleSnake/Resources/CloseNormal.png b/examples/SimpleSnake/Resources/CloseNormal.png new file mode 100644 index 0000000000..b65498c941 Binary files /dev/null and b/examples/SimpleSnake/Resources/CloseNormal.png differ diff --git a/examples/SimpleSnake/Resources/CloseSelected.png b/examples/SimpleSnake/Resources/CloseSelected.png new file mode 100644 index 0000000000..306749ecd2 Binary files /dev/null and b/examples/SimpleSnake/Resources/CloseSelected.png differ diff --git a/examples/SimpleSnake/Resources/fonts/Marker Felt.ttf b/examples/SimpleSnake/Resources/fonts/Marker Felt.ttf new file mode 100644 index 0000000000..3752ef3110 Binary files /dev/null and b/examples/SimpleSnake/Resources/fonts/Marker Felt.ttf differ diff --git a/examples/SimpleSnake/Resources/fonts/arial.ttf b/examples/SimpleSnake/Resources/fonts/arial.ttf new file mode 100644 index 0000000000..abc899cd55 Binary files /dev/null and b/examples/SimpleSnake/Resources/fonts/arial.ttf differ diff --git a/examples/SimpleSnake/Resources/res/.gitkeep b/examples/SimpleSnake/Resources/res/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/SimpleSnake/adxe-project-template.json b/examples/SimpleSnake/adxe-project-template.json new file mode 100644 index 0000000000..9f4382b9de --- /dev/null +++ b/examples/SimpleSnake/adxe-project-template.json @@ -0,0 +1,72 @@ +{ + "do_default":{ + "project_rename":{ + "src_project_name":"HelloCpp", + "files":[ + ] + }, + "project_replace_project_name":{ + "src_project_name":"HelloCpp", + "files":[ + "Classes/AppDelegate.cpp", + "proj.win32/main.cpp", + "proj.android/settings.gradle", + "proj.android/app/res/values/strings.xml", + "proj.ios_mac/ios/main.m", + "proj.ios_mac/ios/Prefix.pch", + "CMakeLists.txt" + ] + }, + "project_replace_package_name":{ + "src_package_name":"org.cocos2dx.hellocpp", + "files":[ + "proj.android/app/build.gradle", + "proj.android/app/AndroidManifest.xml" + ] + }, + "project_replace_so_name": { + "src_so_name": "HelloCpp", + "files": [ + "proj.android/app/AndroidManifest.xml" + ] + }, + "project_replace_mac_bundleid": { + "src_bundle_id": "org.cocos2dx.hellocpp", + "files": [ + "proj.ios_mac/mac/Info.plist" + ] + }, + "project_replace_ios_bundleid": { + "src_bundle_id": "org.cocos2dx.hellocpp", + "files": [ + "proj.ios_mac/ios/Info.plist" + ] + } + }, + "change_orientation": { + "modify_files": [ + { + "file_path": "Classes/AppDelegate.cpp", + "pattern": "static\\s+cocos2d\\:\\:Size\\s+([a-zA-Z_\\d]+)\\s*=\\s*cocos2d\\:\\:Size\\(\\s*(\\d+),\\s*(\\d+)\\)", + "replace_string": "static cocos2d::Size \\1 = cocos2d::Size(\\3, \\2)" + }, + { + "file_path": "proj.ios_mac/ios/Info.plist", + "pattern": "UIInterfaceOrientationLandscapeRight", + "replace_string": "UIInterfaceOrientationPortrait" + }, + { + "file_path": "proj.ios_mac/ios/Info.plist", + "pattern": "UIInterfaceOrientationLandscapeLeft", + "replace_string": "UIInterfaceOrientationPortraitUpsideDown" + }, + + { + "file_path": "proj.android/app/AndroidManifest.xml", + "pattern": "android:screenOrientation=\\\".*\\\"", + "replace_string": "android:screenOrientation=\"portrait\"" + } + ] + } +} + diff --git a/examples/SimpleSnake/proj.android/.gitignore b/examples/SimpleSnake/proj.android/.gitignore new file mode 100644 index 0000000000..233199aa7b --- /dev/null +++ b/examples/SimpleSnake/proj.android/.gitignore @@ -0,0 +1,8 @@ +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +/.externalNativeBuild diff --git a/examples/SimpleSnake/proj.android/app/.gitignore b/examples/SimpleSnake/proj.android/app/.gitignore new file mode 100644 index 0000000000..0886f94956 --- /dev/null +++ b/examples/SimpleSnake/proj.android/app/.gitignore @@ -0,0 +1,2 @@ +/build +/.externalNativeBuild diff --git a/examples/SimpleSnake/proj.android/app/AndroidManifest.xml b/examples/SimpleSnake/proj.android/app/AndroidManifest.xml new file mode 100644 index 0000000000..3e9a77e159 --- /dev/null +++ b/examples/SimpleSnake/proj.android/app/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/SimpleSnake/proj.android/app/build.gradle b/examples/SimpleSnake/proj.android/app/build.gradle new file mode 100644 index 0000000000..bf5d0e66cf --- /dev/null +++ b/examples/SimpleSnake/proj.android/app/build.gradle @@ -0,0 +1,123 @@ +import org.gradle.internal.os.OperatingSystem +import java.nio.file.Paths +import java.nio.file.Files + +apply plugin: 'com.android.application' +apply from: project(':libcocos2dx').projectDir.toString() + "/adxetools.gradle" + +android { + compileSdkVersion PROP_COMPILE_SDK_VERSION.toInteger() + + // setup ndk + def ndkInfo = adxetools.findNDK() + ndkVersion = ndkInfo[0] + if(ndkInfo[1]) { + ndkPath = ndkInfo[1] + } + + // setup cmake + def cmakeVer = adxetools.findCMake("3.10.2+", project.rootProject) + + defaultConfig { + applicationId "org.cocos2dx.hellocpp" + minSdkVersion PROP_MIN_SDK_VERSION + targetSdkVersion PROP_TARGET_SDK_VERSION + versionCode 1 + versionName "1.0" + + externalNativeBuild { + cmake { + arguments "-DCMAKE_FIND_ROOT_PATH=", "-DANDROID_STL=c++_shared", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_ARM_NEON=TRUE" + cppFlags "-frtti -fexceptions -fsigned-char" + } + } + + ndk { + abiFilters = [] + abiFilters.addAll(PROP_APP_ABI.split(':').collect{it as String}) + } + } + + sourceSets.main { + java.srcDir "src" + res.srcDir "res" + manifest.srcFile "AndroidManifest.xml" + assets.srcDir "../../Resources" + } + + externalNativeBuild { + cmake { + version "$cmakeVer" + path "../../CMakeLists.txt" + } + } + + signingConfigs { + + release { + if (project.hasProperty("RELEASE_STORE_FILE")) { + storeFile file(RELEASE_STORE_FILE) + storePassword RELEASE_STORE_PASSWORD + keyAlias RELEASE_KEY_ALIAS + keyPassword RELEASE_KEY_PASSWORD + } + } + } + + buildTypes { + release { + debuggable false + jniDebuggable false + renderscriptDebuggable false + minifyEnabled true + shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + if (project.hasProperty("RELEASE_STORE_FILE")) { + signingConfig signingConfigs.release + } + } + + debug { + debuggable true + jniDebuggable true + renderscriptDebuggable true + } + } + + aaptOptions { + noCompress 'mp3','ogg','wav','mp4','ttf','ttc' + } +} + +android.applicationVariants.all { variant -> + def project_root_folder = "${projectDir}/../.." + def dest_assets_folder = "${projectDir}/assets" + + // delete previous files first + delete dest_assets_folder + def targetName = variant.name.capitalize() + def copyTaskName = "copy${targetName}ResourcesToAssets" + + tasks.register(copyTaskName) { + copy { + from "${buildDir}/../../../Resources" + into "${buildDir}/intermediates/assets/${variant.dirName}" + exclude "**/*.gz" + } + } + tasks.getByName("pre${targetName}Build").dependsOn copyTaskName +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation project(':libcocos2dx') +} + +project.afterEvaluate { + if (tasks.findByName("externalNativeBuildDebug")) { + compileDebugJavaWithJavac.dependsOn externalNativeBuildDebug + } + if (tasks.findByName("externalNativeBuildRelease")) { + compileReleaseJavaWithJavac.dependsOn externalNativeBuildRelease + } +} diff --git a/examples/SimpleSnake/proj.android/app/jni/hellocpp/main.cpp b/examples/SimpleSnake/proj.android/app/jni/hellocpp/main.cpp new file mode 100644 index 0000000000..ccd4757e4c --- /dev/null +++ b/examples/SimpleSnake/proj.android/app/jni/hellocpp/main.cpp @@ -0,0 +1,44 @@ +/**************************************************************************** + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + + 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 + +#include +#include + +#include "AppDelegate.h" + +#define LOG_TAG "main" +#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) + +namespace +{ +std::unique_ptr appDelegate; +} + +void cocos_android_app_init(JNIEnv* env) +{ + LOGD("cocos_android_app_init"); + appDelegate.reset(new AppDelegate()); +} diff --git a/examples/SimpleSnake/proj.android/app/proguard-rules.pro b/examples/SimpleSnake/proj.android/app/proguard-rules.pro new file mode 100644 index 0000000000..2c062c4946 --- /dev/null +++ b/examples/SimpleSnake/proj.android/app/proguard-rules.pro @@ -0,0 +1,37 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in E:\developSoftware\Android\SDK/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Proguard Cocos2d-x for release +-keep public class org.cocos2dx.** { *; } +-dontwarn org.cocos2dx.** +-keep public class com.chukong.** { *; } +-dontwarn com.chukong.** +-keep public class com.huawei.android.** { *; } +-dontwarn com.huawei.android.** + +# Proguard Apache HTTP for release +-keep class org.apache.http.** { *; } +-dontwarn org.apache.http.** + +# Proguard Android Webivew for release. uncomment if you are using a webview in cocos2d-x +#-keep public class android.net.http.SslError +#-keep public class android.webkit.WebViewClient + +#-dontwarn android.webkit.WebView +#-dontwarn android.net.http.SslError +#-dontwarn android.webkit.WebViewClient \ No newline at end of file diff --git a/examples/SimpleSnake/proj.android/app/res/mipmap-hdpi/ic_launcher.png b/examples/SimpleSnake/proj.android/app/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000..45ee51d15f Binary files /dev/null and b/examples/SimpleSnake/proj.android/app/res/mipmap-hdpi/ic_launcher.png differ diff --git a/examples/SimpleSnake/proj.android/app/res/mipmap-mdpi/ic_launcher.png b/examples/SimpleSnake/proj.android/app/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000..0dd2a60899 Binary files /dev/null and b/examples/SimpleSnake/proj.android/app/res/mipmap-mdpi/ic_launcher.png differ diff --git a/examples/SimpleSnake/proj.android/app/res/mipmap-xhdpi/ic_launcher.png b/examples/SimpleSnake/proj.android/app/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000..a32f16f930 Binary files /dev/null and b/examples/SimpleSnake/proj.android/app/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/examples/SimpleSnake/proj.android/app/res/mipmap-xxhdpi/ic_launcher.png b/examples/SimpleSnake/proj.android/app/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000..332f268edc Binary files /dev/null and b/examples/SimpleSnake/proj.android/app/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/examples/SimpleSnake/proj.android/app/res/values/strings.xml b/examples/SimpleSnake/proj.android/app/res/values/strings.xml new file mode 100644 index 0000000000..4fb39f4955 --- /dev/null +++ b/examples/SimpleSnake/proj.android/app/res/values/strings.xml @@ -0,0 +1,3 @@ + + HelloCpp + diff --git a/examples/SimpleSnake/proj.android/app/src/org/cocos2dx/cpp/AppActivity.java b/examples/SimpleSnake/proj.android/app/src/org/cocos2dx/cpp/AppActivity.java new file mode 100644 index 0000000000..e560f91804 --- /dev/null +++ b/examples/SimpleSnake/proj.android/app/src/org/cocos2dx/cpp/AppActivity.java @@ -0,0 +1,63 @@ +/**************************************************************************** +Copyright (c) 2015-2016 Chukong Technologies Inc. +Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + +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. +****************************************************************************/ +package org.cocos2dx.cpp; + +import android.os.Bundle; +import org.cocos2dx.lib.Cocos2dxActivity; +import org.cocos2dx.lib.SharedLoader; +import android.os.Build; +import android.view.WindowManager; +//import android.view.WindowManager.LayoutParams; + +public class AppActivity extends Cocos2dxActivity { + static { + // DNT remove, some android simulator require explicit load shared libraries, otherwise will crash + SharedLoader.load(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.setEnableVirtualButton(false); + super.onCreate(savedInstanceState); + // Workaround in https://stackoverflow.com/questions/16283079/re-launch-of-activity-on-home-button-but-only-the-first-time/16447508 + if (!isTaskRoot()) { + // Android launched another instance of the root activity into an existing task + // so just quietly finish and go away, dropping the user back into the activity + // at the top of the stack (ie: the last state of this task) + // Don't need to finish it again since it's finished in super.onCreate . + return; + } + // Make sure we're running on Pie or higher to change cutout mode + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + // Enable rendering into the cutout area + WindowManager.LayoutParams lp = getWindow().getAttributes(); + lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + getWindow().setAttributes(lp); + } + // DO OTHER INITIALIZATION BELOW + + } + +} diff --git a/examples/SimpleSnake/proj.android/build.gradle b/examples/SimpleSnake/proj.android/build.gradle new file mode 100644 index 0000000000..5a44a79f98 --- /dev/null +++ b/examples/SimpleSnake/proj.android/build.gradle @@ -0,0 +1,26 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.2.0' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} \ No newline at end of file diff --git a/examples/SimpleSnake/proj.android/gradle.properties b/examples/SimpleSnake/proj.android/gradle.properties new file mode 100644 index 0000000000..16df63bf19 --- /dev/null +++ b/examples/SimpleSnake/proj.android/gradle.properties @@ -0,0 +1,42 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# Android SDK version that will be used as the compile project +PROP_COMPILE_SDK_VERSION=28 + +# Android SDK version that will be used as the earliest version of android this application can run on +PROP_MIN_SDK_VERSION=17 + +# Android SDK version that will be used as the latest version of android this application has been tested on +PROP_TARGET_SDK_VERSION=28 + + +# List of CPU Archtexture to build that application with +# Available architextures (armeabi-v7a | arm64-v8a | x86) +# To build for multiple architexture, use the `:` between them +# Example - PROP_APP_ABI=armeabi-v7a:arm64-v8a:x86 +PROP_APP_ABI=arm64-v8a + +# uncomment it and fill in sign information for release mode +#RELEASE_STORE_FILE=file path of keystore +#RELEASE_STORE_PASSWORD=password of keystore +#RELEASE_KEY_ALIAS=alias of key +#RELEASE_KEY_PASSWORD=password of key + +android.injected.testOnly=false diff --git a/examples/SimpleSnake/proj.android/gradle/wrapper/gradle-wrapper.jar b/examples/SimpleSnake/proj.android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000..8c0fb64a86 Binary files /dev/null and b/examples/SimpleSnake/proj.android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/examples/SimpleSnake/proj.android/gradle/wrapper/gradle-wrapper.properties b/examples/SimpleSnake/proj.android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..c6d2e0473d --- /dev/null +++ b/examples/SimpleSnake/proj.android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Tue Mar 14 17:40:59 CST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip diff --git a/examples/SimpleSnake/proj.android/gradlew b/examples/SimpleSnake/proj.android/gradlew new file mode 100644 index 0000000000..91a7e269e1 --- /dev/null +++ b/examples/SimpleSnake/proj.android/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/examples/SimpleSnake/proj.android/gradlew.bat b/examples/SimpleSnake/proj.android/gradlew.bat new file mode 100644 index 0000000000..8a0b282aa6 --- /dev/null +++ b/examples/SimpleSnake/proj.android/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/examples/SimpleSnake/proj.android/settings.gradle b/examples/SimpleSnake/proj.android/settings.gradle new file mode 100644 index 0000000000..5a317d9f63 --- /dev/null +++ b/examples/SimpleSnake/proj.android/settings.gradle @@ -0,0 +1,6 @@ +import java.nio.file.Paths +include ':libcocos2dx' +project(':libcocos2dx').projectDir = new File(Paths.get("${System.env.ADXE_ROOT}/core/platform/android/libcocos2dx").toUri()) +include ':HelloCpp' +project(':HelloCpp').projectDir = new File(settingsDir, 'app') +rootProject.name = "HelloCpp" diff --git a/examples/SimpleSnake/proj.ios_mac/ios/AppController.h b/examples/SimpleSnake/proj.ios_mac/ios/AppController.h new file mode 100644 index 0000000000..aeb65f5085 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/ios/AppController.h @@ -0,0 +1,36 @@ +/**************************************************************************** + Copyright (c) 2010-2013 cocos2d-x.org + Copyright (c) 2013-2016 Chukong Technologies Inc. + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + + 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. + ****************************************************************************/ + +#import + +@class RootViewController; + +@interface AppController : NSObject { +} + +@property(nonatomic, readonly) RootViewController* viewController; + +@end diff --git a/examples/SimpleSnake/proj.ios_mac/ios/AppController.mm b/examples/SimpleSnake/proj.ios_mac/ios/AppController.mm new file mode 100644 index 0000000000..2dafa17d40 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/ios/AppController.mm @@ -0,0 +1,162 @@ +/**************************************************************************** + Copyright (c) 2010-2013 cocos2d-x.org + Copyright (c) 2013-2016 Chukong Technologies Inc. + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + + 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. + ****************************************************************************/ + +#import "AppController.h" +#import "cocos2d.h" +#import "AppDelegate.h" +#import "RootViewController.h" + +@implementation AppController + +@synthesize window; + +#pragma mark - +#pragma mark Application lifecycle + +// cocos2d application instance +static AppDelegate s_sharedApplication; + +- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions +{ + + cocos2d::Application* app = cocos2d::Application::getInstance(); + + // Initialize the GLView attributes + app->initGLContextAttrs(); + cocos2d::GLViewImpl::convertAttrs(); + + // Override point for customization after application launch. + + // Add the view controller's view to the window and display. + window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + + // Use RootViewController to manage CCEAGLView + _viewController = [[RootViewController alloc] init]; + _viewController.wantsFullScreenLayout = YES; + + // Set RootViewController to window + if ([[UIDevice currentDevice].systemVersion floatValue] < 6.0) + { + // warning: addSubView doesn't work on iOS6 + [window addSubview:_viewController.view]; + } + else + { + // use this method on ios6 + [window setRootViewController:_viewController]; + } + + [window makeKeyAndVisible]; + + [[UIApplication sharedApplication] setStatusBarHidden:true]; + + // Launching the app with the arguments -NSAllowsDefaultLineBreakStrategy NO to force back to the old behavior. + if ([[UIDevice currentDevice].systemVersion floatValue] >= 13.0f) + { + [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSAllowsDefaultLineBreakStrategy"]; + } + + // IMPORTANT: Setting the GLView should be done after creating the RootViewController + cocos2d::GLView* glview = cocos2d::GLViewImpl::createWithEAGLView((__bridge void*)_viewController.view); + cocos2d::Director::getInstance()->setOpenGLView(glview); + + // run the cocos2d-x game scene + app->run(); + + return YES; +} + +- (void)applicationWillResignActive:(UIApplication*)application +{ + /* + Sent when the application is about to move from active to inactive state. This can occur for certain types of + temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and + it begins the transition to the background state. Use this method to pause ongoing tasks, disable timers, and + throttle down OpenGL ES frame rates. Games should use this method to pause the game. + */ + // We don't need to call this method any more. It will interrupt user defined game pause&resume logic + /* cocos2d::Director::getInstance()->pause(); */ +} + +- (void)applicationDidBecomeActive:(UIApplication*)application +{ + /* + Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was + previously in the background, optionally refresh the user interface. + */ + // We don't need to call this method any more. It will interrupt user defined game pause&resume logic + /* cocos2d::Director::getInstance()->resume(); */ +} + +- (void)applicationDidEnterBackground:(UIApplication*)application +{ + /* + Use this method to release shared resources, save user data, invalidate timers, and store enough application state + information to restore your application to its current state in case it is terminated later. If your application + supports background execution, called instead of applicationWillTerminate: when the user quits. + */ + cocos2d::Application::getInstance()->applicationDidEnterBackground(); +} + +- (void)applicationWillEnterForeground:(UIApplication*)application +{ + /* + Called as part of transition from the background to the inactive state: here you can undo many of the changes made + on entering the background. + */ + cocos2d::Application::getInstance()->applicationWillEnterForeground(); +} + +- (void)applicationWillTerminate:(UIApplication*)application +{ + /* + Called when the application is about to terminate. + See also applicationDidEnterBackground:. + */ +} + +#pragma mark - +#pragma mark Memory management + +- (void)applicationDidReceiveMemoryWarning:(UIApplication*)application +{ + /* + Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) + later. + */ +} + +#if __has_feature(objc_arc) +#else +- (void)dealloc +{ + [window release]; + [_viewController release]; + [super dealloc]; +} +#endif + +@end diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..51cbd32fe0 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,157 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-40@3x.png", + "scale" : "3x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "Icon-57.png", + "scale" : "1x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "Icon-57@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-20.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-40.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "50x50", + "idiom" : "ipad", + "filename" : "Icon-50.png", + "scale" : "1x" + }, + { + "size" : "50x50", + "idiom" : "ipad", + "filename" : "Icon-50@2x.png", + "scale" : "2x" + }, + { + "size" : "72x72", + "idiom" : "ipad", + "filename" : "Icon-72.png", + "scale" : "1x" + }, + { + "size" : "72x72", + "idiom" : "ipad", + "filename" : "Icon-72@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-76.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-83.5@2x.png", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-20.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-20.png new file mode 100644 index 0000000000..8ead23e365 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-20.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-20@2x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-20@2x.png new file mode 100644 index 0000000000..775685daca Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-20@2x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-20@3x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-20@3x.png new file mode 100644 index 0000000000..a5b49ccbb1 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-20@3x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-29.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-29.png new file mode 100644 index 0000000000..0500184c86 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-29.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png new file mode 100644 index 0000000000..f0f8b7fe98 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png new file mode 100644 index 0000000000..5287e50a79 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-40.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-40.png new file mode 100644 index 0000000000..775685daca Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-40.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png new file mode 100644 index 0000000000..d9c7ab446b Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png new file mode 100644 index 0000000000..a5b49ccbb1 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-50.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-50.png new file mode 100644 index 0000000000..ac381bc20e Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-50.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-50@2x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-50@2x.png new file mode 100644 index 0000000000..ef38d4500a Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-50@2x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-57.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-57.png new file mode 100644 index 0000000000..4fcc6fddff Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-57.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-57@2x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-57@2x.png new file mode 100644 index 0000000000..c3807861ad Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-57@2x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png new file mode 100644 index 0000000000..a5b49ccbb1 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png new file mode 100644 index 0000000000..d4bc53132c Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-72.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-72.png new file mode 100644 index 0000000000..2c573c8df4 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-72.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png new file mode 100644 index 0000000000..1526615c02 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-76.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-76.png new file mode 100644 index 0000000000..8a1fa1850c Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-76.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png new file mode 100644 index 0000000000..8aa82506d0 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png new file mode 100644 index 0000000000..6bf801d175 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/Contents.json b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/Contents.json new file mode 100644 index 0000000000..da4a164c91 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/ios/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Info.plist b/examples/SimpleSnake/proj.ios_mac/ios/Info.plist new file mode 100644 index 0000000000..6a5e22f8a6 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/ios/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDisplayName + ${PROJECT_NAME} + CFBundleExecutable + ${MACOSX_BUNDLE_EXECUTABLE_NAME} + CFBundleIconFile + Icon-57.png + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PROJECT_NAME} + CFBundleShortVersionString + 1.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIAppFonts + + UILaunchStoryboardName + LaunchScreen + UIPrerenderedIcon + + UIStatusBarHidden + + UISupportedInterfaceOrientations + + UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationLandscapeLeft + + NSHumanReadableCopyright + Copyright © 2019. All rights reserved. + + diff --git a/examples/SimpleSnake/proj.ios_mac/ios/LaunchScreen.storyboard b/examples/SimpleSnake/proj.ios_mac/ios/LaunchScreen.storyboard new file mode 100644 index 0000000000..068bbaa879 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/ios/LaunchScreen.storyboard @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/SimpleSnake/proj.ios_mac/ios/LaunchScreenBackground.png b/examples/SimpleSnake/proj.ios_mac/ios/LaunchScreenBackground.png new file mode 100644 index 0000000000..dadccee686 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/ios/LaunchScreenBackground.png differ diff --git a/examples/SimpleSnake/proj.ios_mac/ios/Prefix.pch b/examples/SimpleSnake/proj.ios_mac/ios/Prefix.pch new file mode 100644 index 0000000000..3da08ad7ff --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/ios/Prefix.pch @@ -0,0 +1,12 @@ +// +// Prefix header for all source files of the 'iphone' target in the 'iphone' project +// + +#ifdef __OBJC__ + #import + #import +#endif + +#ifdef __cplusplus + #include "cocos2d.h" +#endif \ No newline at end of file diff --git a/examples/SimpleSnake/proj.ios_mac/ios/RootViewController.h b/examples/SimpleSnake/proj.ios_mac/ios/RootViewController.h new file mode 100644 index 0000000000..06c3b05562 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/ios/RootViewController.h @@ -0,0 +1,33 @@ +/**************************************************************************** + Copyright (c) 2013 cocos2d-x.org + Copyright (c) 2013-2016 Chukong Technologies Inc. + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + + 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. + ****************************************************************************/ + +#import + +@interface RootViewController : UIViewController { +} +- (BOOL)prefersStatusBarHidden; + +@end diff --git a/examples/SimpleSnake/proj.ios_mac/ios/RootViewController.mm b/examples/SimpleSnake/proj.ios_mac/ios/RootViewController.mm new file mode 100644 index 0000000000..8eaf237db9 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/ios/RootViewController.mm @@ -0,0 +1,130 @@ +/**************************************************************************** + Copyright (c) 2013 cocos2d-x.org + Copyright (c) 2013-2016 Chukong Technologies Inc. + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + + 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. + ****************************************************************************/ + +#import "RootViewController.h" +#import "cocos2d.h" +#import "platform/ios/CCEAGLView-ios.h" + +@implementation RootViewController + +/* + // The designated initializer. Override if you create the controller programmatically and want to perform +customization that is not appropriate for viewDidLoad. +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { + // Custom initialization + } + return self; +} +*/ + +// Implement loadView to create a view hierarchy programmatically, without using a nib. +- (void)loadView +{ + // Initialize the CCEAGLView + CCEAGLView* eaglView = [CCEAGLView viewWithFrame:[UIScreen mainScreen].bounds + pixelFormat:(__bridge NSString*)cocos2d::GLViewImpl::_pixelFormat + depthFormat:cocos2d::GLViewImpl::_depthFormat + preserveBackbuffer:NO + sharegroup:nil + multiSampling:cocos2d::GLViewImpl::_multisamplingCount > 0 ? YES : NO + numberOfSamples:cocos2d::GLViewImpl::_multisamplingCount]; + + // Enable or disable multiple touches + [eaglView setMultipleTouchEnabled:NO]; + + // Set EAGLView as view of RootViewController + self.view = eaglView; +} + +// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. +- (void)viewDidLoad +{ + [super viewDidLoad]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; +} + +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; +} + +// For ios6, use supportedInterfaceOrientations & shouldAutorotate instead +#ifdef __IPHONE_6_0 +- (NSUInteger)supportedInterfaceOrientations +{ + return UIInterfaceOrientationMaskAllButUpsideDown; +} +#endif + +- (BOOL)shouldAutorotate +{ + return YES; +} + +- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation +{ + [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; + + auto glview = cocos2d::Director::getInstance()->getOpenGLView(); + + if (glview) + { + CCEAGLView* eaglview = (__bridge CCEAGLView*)glview->getEAGLView(); + + if (eaglview) + { + CGSize s = CGSizeMake([eaglview getWidth], [eaglview getHeight]); + cocos2d::Application::getInstance()->applicationScreenSizeChanged((int)s.width, (int)s.height); + } + } +} + +// fix not hide status on ios7 +- (BOOL)prefersStatusBarHidden +{ + return YES; +} + +// Controls the application's preferred home indicator auto-hiding when this view controller is shown. +- (BOOL)prefersHomeIndicatorAutoHidden +{ + return YES; +} + +- (void)didReceiveMemoryWarning +{ + // Releases the view if it doesn't have a superview. + [super didReceiveMemoryWarning]; + + // Release any cached data, images, etc that aren't in use. +} + +@end diff --git a/examples/SimpleSnake/proj.ios_mac/ios/exportoptions.plist b/examples/SimpleSnake/proj.ios_mac/ios/exportoptions.plist new file mode 100644 index 0000000000..14a6dc5c20 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/ios/exportoptions.plist @@ -0,0 +1,15 @@ + + + + + compileBitcode + + method + development + provisioningProfiles + + Bundle Identifier + Provision Prifile Name + + + diff --git a/examples/SimpleSnake/proj.ios_mac/ios/main.m b/examples/SimpleSnake/proj.ios_mac/ios/main.m new file mode 100644 index 0000000000..62178533b7 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/ios/main.m @@ -0,0 +1,7 @@ +#import + +int main(int argc, char *argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, @"AppController"); + } +} diff --git a/examples/SimpleSnake/proj.ios_mac/mac/Icon.icns b/examples/SimpleSnake/proj.ios_mac/mac/Icon.icns new file mode 100644 index 0000000000..2040fc6fe6 Binary files /dev/null and b/examples/SimpleSnake/proj.ios_mac/mac/Icon.icns differ diff --git a/examples/SimpleSnake/proj.ios_mac/mac/Info.plist b/examples/SimpleSnake/proj.ios_mac/mac/Info.plist new file mode 100644 index 0000000000..18d51ff076 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/mac/Info.plist @@ -0,0 +1,36 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${MACOSX_BUNDLE_EXECUTABLE_NAME} + CFBundleIconFile + Icon + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PROJECT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSApplicationCategoryType + public.app-category.games + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2013. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/examples/SimpleSnake/proj.ios_mac/mac/Prefix.pch b/examples/SimpleSnake/proj.ios_mac/mac/Prefix.pch new file mode 100644 index 0000000000..aa71e76645 --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/mac/Prefix.pch @@ -0,0 +1,11 @@ +// +// Prefix header for all source files of the 'Paralaxer' target in the 'Paralaxer' project +// + +#ifdef __OBJC__ + #import +#endif + +#ifdef __cplusplus + #include "cocos2d.h" +#endif \ No newline at end of file diff --git a/examples/SimpleSnake/proj.ios_mac/mac/main.cpp b/examples/SimpleSnake/proj.ios_mac/mac/main.cpp new file mode 100644 index 0000000000..44045f8feb --- /dev/null +++ b/examples/SimpleSnake/proj.ios_mac/mac/main.cpp @@ -0,0 +1,35 @@ +/**************************************************************************** + Copyright (c) 2010 cocos2d-x.org + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + + 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 "AppDelegate.h" +#include "cocos2d.h" + +USING_NS_CC; + +int main(int argc, char* argv[]) +{ + AppDelegate app; + return Application::getInstance()->run(); +} diff --git a/examples/SimpleSnake/proj.linux/main.cpp b/examples/SimpleSnake/proj.linux/main.cpp new file mode 100644 index 0000000000..3cbdb2bc35 --- /dev/null +++ b/examples/SimpleSnake/proj.linux/main.cpp @@ -0,0 +1,39 @@ +/**************************************************************************** + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + + 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 "../Classes/AppDelegate.h" + +#include +#include +#include +#include + +USING_NS_CC; + +int main(int argc, char** argv) +{ + // create the application instance + AppDelegate app; + return Application::getInstance()->run(); +} diff --git a/examples/SimpleSnake/proj.win32/build-cfg.json b/examples/SimpleSnake/proj.win32/build-cfg.json new file mode 100644 index 0000000000..aae4d7a054 --- /dev/null +++ b/examples/SimpleSnake/proj.win32/build-cfg.json @@ -0,0 +1,8 @@ +{ + "copy_resources": [ + { + "from": "../Resources", + "to": "" + } + ] +} diff --git a/examples/SimpleSnake/proj.win32/game.rc b/examples/SimpleSnake/proj.win32/game.rc new file mode 100644 index 0000000000..1e0a2a0da2 --- /dev/null +++ b/examples/SimpleSnake/proj.win32/game.rc @@ -0,0 +1,86 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +GLFW_ICON ICON "res\\game.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904B0" + BEGIN + VALUE "CompanyName", "\0" + VALUE "FileDescription", "game Module\0" + VALUE "FileVersion", "1, 0, 0, 1\0" + VALUE "InternalName", "game\0" + VALUE "LegalCopyright", "Copyright \0" + VALUE "OriginalFilename", "game.exe\0" + VALUE "ProductName", "game Module\0" + VALUE "ProductVersion", "1, 0, 0, 1\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 0x04B0 + END +END + +///////////////////////////////////////////////////////////////////////////// +#endif // !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) diff --git a/examples/SimpleSnake/proj.win32/main.cpp b/examples/SimpleSnake/proj.win32/main.cpp new file mode 100644 index 0000000000..636fa57f07 --- /dev/null +++ b/examples/SimpleSnake/proj.win32/main.cpp @@ -0,0 +1,39 @@ +/**************************************************************************** + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + + 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 "main.h" +#include "AppDelegate.h" +#include "cocos2d.h" + +USING_NS_CC; + +int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) +{ + UNREFERENCED_PARAMETER(hPrevInstance); + UNREFERENCED_PARAMETER(lpCmdLine); + + // create the application instance + AppDelegate app; + return Application::getInstance()->run(); +} diff --git a/examples/SimpleSnake/proj.win32/main.h b/examples/SimpleSnake/proj.win32/main.h new file mode 100644 index 0000000000..64d684e652 --- /dev/null +++ b/examples/SimpleSnake/proj.win32/main.h @@ -0,0 +1,37 @@ +/**************************************************************************** + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + + 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 __MAIN_H__ +#define __MAIN_H__ + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +// Windows Header Files: +#include +#include + +// C RunTime Header Files +#include "platform/CCStdC.h" + +#endif // __MAIN_H__ diff --git a/examples/SimpleSnake/proj.win32/res/game.ico b/examples/SimpleSnake/proj.win32/res/game.ico new file mode 100644 index 0000000000..feaf932a74 Binary files /dev/null and b/examples/SimpleSnake/proj.win32/res/game.ico differ diff --git a/examples/SimpleSnake/proj.win32/resource.h b/examples/SimpleSnake/proj.win32/resource.h new file mode 100644 index 0000000000..da3599c69c --- /dev/null +++ b/examples/SimpleSnake/proj.win32/resource.h @@ -0,0 +1,44 @@ +/**************************************************************************** + Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. + + 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. + ****************************************************************************/ + +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by game.RC +// + +#define IDS_PROJNAME 100 +#define IDR_TESTJS 100 + +#define ID_FILE_NEW_WINDOW 32771 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +# ifndef APSTUDIO_READONLY_SYMBOLS +# define _APS_NEXT_RESOURCE_VALUE 201 +# define _APS_NEXT_CONTROL_VALUE 1000 +# define _APS_NEXT_SYMED_VALUE 101 +# define _APS_NEXT_COMMAND_VALUE 32775 +# endif +#endif diff --git a/examples/SimpleSnake/run.bat.in b/examples/SimpleSnake/run.bat.in new file mode 100644 index 0000000000..c77bdee819 --- /dev/null +++ b/examples/SimpleSnake/run.bat.in @@ -0,0 +1,25 @@ +@echo off +rem !!!Don't move this file +rem usage: run.bat +rem BUILD_CFG could be Debug,Release,MinSizeRel,RelWithDebInfo + +set myDir=%~dp0 +set cacheFile=%myDir%run.bat.txt + +echo Entering run.bat directory: %myDir% + +cd /d %myDir% + +set APP_NAME=@APP_NAME@ +set BUILD_DIR=@CMAKE_BUILD_RELATIVE_DIR@ +set BUILD_CFG=%1 + +rem Determine which build config to run +if not defined BUILD_CFG if exist %cacheFile% set /p BUILD_CFG=< %cacheFile% +if not defined BUILD_CFG set /p BUILD_CFG=Please input Build config(Debug,Release,MinSizeRel,RelWithDebInfo): +if not defined BUILD_CFG set BUILD_CFG=Debug + +rem Save run config to run.bat.txt +echo %BUILD_CFG%>%cacheFile% + +start /D %myDir%Resources %BUILD_DIR%/bin/%APP_NAME%/%BUILD_CFG%/%APP_NAME%.exe diff --git a/templates/cpp-template-default/CMakeLists.txt b/templates/cpp-template-default/CMakeLists.txt index 5b75d419a3..d9e5960851 100644 --- a/templates/cpp-template-default/CMakeLists.txt +++ b/templates/cpp-template-default/CMakeLists.txt @@ -200,4 +200,4 @@ endif() if (_AX_USE_PREBUILT) # support windows only include(${ADXE_ROOT_PATH}/cmake/Modules/AdxeLinkHelpers.cmake) adxe_link_cxx_prebuilt(${APP_NAME} ${ADXE_ROOT_PATH} ${AX_PREBUILT_DIR}) -endif() +endif() \ No newline at end of file