diff --git a/build/cocos2d_libs.xcodeproj/project.pbxproj b/build/cocos2d_libs.xcodeproj/project.pbxproj index 4ae637e828..5014ec6da6 100644 --- a/build/cocos2d_libs.xcodeproj/project.pbxproj +++ b/build/cocos2d_libs.xcodeproj/project.pbxproj @@ -1320,6 +1320,10 @@ 38F526411A48363B000DB7F7 /* ArmatureNodeReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 38F5263C1A48363B000DB7F7 /* ArmatureNodeReader.h */; }; 38F526421A48363B000DB7F7 /* CSArmatureNode_generated.h in Headers */ = {isa = PBXBuildFile; fileRef = 38F5263D1A48363B000DB7F7 /* CSArmatureNode_generated.h */; }; 38F526431A48363B000DB7F7 /* CSArmatureNode_generated.h in Headers */ = {isa = PBXBuildFile; fileRef = 38F5263D1A48363B000DB7F7 /* CSArmatureNode_generated.h */; }; + 3E2A09C21BAA91B70086B878 /* CCMotionStreak3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E2A09C01BAA91B70086B878 /* CCMotionStreak3D.cpp */; }; + 3E2A09C31BAA91B70086B878 /* CCMotionStreak3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E2A09C01BAA91B70086B878 /* CCMotionStreak3D.cpp */; }; + 3E2A09C41BAA91B70086B878 /* CCMotionStreak3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2A09C11BAA91B70086B878 /* CCMotionStreak3D.h */; }; + 3E2A09C51BAA91B70086B878 /* CCMotionStreak3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2A09C11BAA91B70086B878 /* CCMotionStreak3D.h */; }; 3E2BDADE19C030ED0055CDCD /* AudioEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2BDADD19C030ED0055CDCD /* AudioEngine.h */; }; 3E2BDAEC19C0436F0055CDCD /* AudioEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E2BDAEB19C0436F0055CDCD /* AudioEngine.cpp */; }; 3E2F27A619CFBFE100E7C490 /* AudioEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E2BDAEB19C0436F0055CDCD /* AudioEngine.cpp */; }; @@ -4201,6 +4205,8 @@ 38F5263B1A48363B000DB7F7 /* ArmatureNodeReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ArmatureNodeReader.cpp; sourceTree = ""; }; 38F5263C1A48363B000DB7F7 /* ArmatureNodeReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArmatureNodeReader.h; sourceTree = ""; }; 38F5263D1A48363B000DB7F7 /* CSArmatureNode_generated.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSArmatureNode_generated.h; sourceTree = ""; }; + 3E2A09C01BAA91B70086B878 /* CCMotionStreak3D.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCMotionStreak3D.cpp; sourceTree = ""; }; + 3E2A09C11BAA91B70086B878 /* CCMotionStreak3D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCMotionStreak3D.h; sourceTree = ""; }; 3E2BDADD19C030ED0055CDCD /* AudioEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioEngine.h; sourceTree = ""; }; 3E2BDAEB19C0436F0055CDCD /* AudioEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioEngine.cpp; sourceTree = ""; }; 3E6176551960F89B00DE83F5 /* CCController-iOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "CCController-iOS.mm"; path = "../base/CCController-iOS.mm"; sourceTree = ""; }; @@ -7937,6 +7943,8 @@ B29594B81926D61F003EEF37 /* 3d */ = { isa = PBXGroup; children = ( + 3E2A09C01BAA91B70086B878 /* CCMotionStreak3D.cpp */, + 3E2A09C11BAA91B70086B878 /* CCMotionStreak3D.h */, B603F1A61AC8EA0900A9579C /* CCTerrain.cpp */, B603F1A71AC8EA0900A9579C /* CCTerrain.h */, B6D38B861AC3AFAC00043997 /* CCSkybox.cpp */, @@ -9160,6 +9168,7 @@ B29A7DE519EE1B7700872B35 /* SkeletonAnimation.h in Headers */, 50ABBE871925AB6F00A911A9 /* ccMacros.h in Headers */, B665E32C1AA80A6500DDB1C5 /* CCPUOnCountObserver.h in Headers */, + 3E2A09C41BAA91B70086B878 /* CCMotionStreak3D.h in Headers */, 15B3708A19EE414C00ABE682 /* Manifest.h in Headers */, 50ABBE731925AB6F00A911A9 /* CCEventListenerMouse.h in Headers */, 1A570063180BC5A10088DEC7 /* CCAction.h in Headers */, @@ -10222,6 +10231,7 @@ B665E3A91AA80A6500DDB1C5 /* CCPURandomiser.h in Headers */, 15AE19AF19AAD39700C27E9E /* PageViewReader.h in Headers */, B6CAB29A1AF9AA1A00B9B856 /* btConcaveShape.h in Headers */, + 3E2A09C51BAA91B70086B878 /* CCMotionStreak3D.h in Headers */, B6CAB2AE1AF9AA1A00B9B856 /* btConvexPointCloudShape.h in Headers */, B29A7DD419EE1B7700872B35 /* Skin.h in Headers */, B6CAB2221AF9AA1A00B9B856 /* btBoxBoxDetector.h in Headers */, @@ -11689,6 +11699,7 @@ B6CAB2491AF9AA1A00B9B856 /* btConvexPlaneCollisionAlgorithm.cpp in Sources */, B665E35A1AA80A6500DDB1C5 /* CCPUOnRandomObserver.cpp in Sources */, B6CAB2891AF9AA1A00B9B856 /* btCapsuleShape.cpp in Sources */, + 3E2A09C21BAA91B70086B878 /* CCMotionStreak3D.cpp in Sources */, B6CAB42F1AF9AA1A00B9B856 /* btWheelInfo.cpp in Sources */, B29A7DFB19EE1B7700872B35 /* spine-cocos2dx.cpp in Sources */, B6CAB3391AF9AA1A00B9B856 /* btTriangleShapeEx.cpp in Sources */, @@ -12487,6 +12498,7 @@ B6CAB3741AF9AA1A00B9B856 /* btGjkEpa2.cpp in Sources */, B665E3DB1AA80A6600DDB1C5 /* CCPUScriptTranslator.cpp in Sources */, B665E33B1AA80A6500DDB1C5 /* CCPUOnEventFlagObserver.cpp in Sources */, + 3E2A09C31BAA91B70086B878 /* CCMotionStreak3D.cpp in Sources */, 1A5702F3180BCE750088DEC7 /* CCTMXObjectGroup.cpp in Sources */, 382384221A2590DA002C4610 /* GameMapReader.cpp in Sources */, 15AE1BAF19AADFDF00C27E9E /* UILayoutManager.cpp in Sources */, diff --git a/cocos/2d/libcocos2d.vcxproj b/cocos/2d/libcocos2d.vcxproj index f6d2a98f4e..d07599135b 100644 --- a/cocos/2d/libcocos2d.vcxproj +++ b/cocos/2d/libcocos2d.vcxproj @@ -386,6 +386,7 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.* + @@ -955,6 +956,7 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.* + diff --git a/cocos/2d/libcocos2d.vcxproj.filters b/cocos/2d/libcocos2d.vcxproj.filters index 849dcb8e53..3a2021637e 100644 --- a/cocos/2d/libcocos2d.vcxproj.filters +++ b/cocos/2d/libcocos2d.vcxproj.filters @@ -832,6 +832,9 @@ 3d + + 3d + extension\AssetsManager @@ -2561,6 +2564,9 @@ 3d + + 3d + 3d diff --git a/cocos/2d/libcocos2d_8_1/libcocos2d_8_1/libcocos2d_8_1.Shared/libcocos2d_8_1.Shared.vcxitems b/cocos/2d/libcocos2d_8_1/libcocos2d_8_1/libcocos2d_8_1.Shared/libcocos2d_8_1.Shared.vcxitems index 35f3024e48..9acbdb5b28 100644 --- a/cocos/2d/libcocos2d_8_1/libcocos2d_8_1/libcocos2d_8_1.Shared/libcocos2d_8_1.Shared.vcxitems +++ b/cocos/2d/libcocos2d_8_1/libcocos2d_8_1/libcocos2d_8_1.Shared/libcocos2d_8_1.Shared.vcxitems @@ -221,6 +221,7 @@ + @@ -849,6 +850,7 @@ + diff --git a/cocos/2d/libcocos2d_8_1/libcocos2d_8_1/libcocos2d_8_1.Shared/libcocos2d_8_1.Shared.vcxitems.filters b/cocos/2d/libcocos2d_8_1/libcocos2d_8_1/libcocos2d_8_1.Shared/libcocos2d_8_1.Shared.vcxitems.filters index 98da17ec29..cb369136fc 100644 --- a/cocos/2d/libcocos2d_8_1/libcocos2d_8_1/libcocos2d_8_1.Shared/libcocos2d_8_1.Shared.vcxitems.filters +++ b/cocos/2d/libcocos2d_8_1/libcocos2d_8_1/libcocos2d_8_1.Shared/libcocos2d_8_1.Shared.vcxitems.filters @@ -39,6 +39,9 @@ 3d + + 3d + 3d @@ -1910,6 +1913,9 @@ 3d + + 3d + 3d diff --git a/cocos/3d/Android.mk b/cocos/3d/Android.mk index f08edf18c0..313b961750 100644 --- a/cocos/3d/Android.mk +++ b/cocos/3d/Android.mk @@ -18,6 +18,7 @@ CCBundleReader.cpp \ CCMesh.cpp \ CCMeshSkin.cpp \ CCMeshVertexIndexData.cpp \ +CCMotionStreak3D.cpp \ CCSprite3DMaterial.cpp \ CCObjLoader.cpp \ CCSkeleton3D.cpp \ diff --git a/cocos/3d/CCMotionStreak3D.cpp b/cocos/3d/CCMotionStreak3D.cpp new file mode 100644 index 0000000000..074d31fbc3 --- /dev/null +++ b/cocos/3d/CCMotionStreak3D.cpp @@ -0,0 +1,411 @@ +/**************************************************************************** +Copyright (c) 2011 ForzeField Studios S.L. +Copyright (c) 2010-2012 cocos2d-x.org +Copyright (c) 2013-2014 Chukong Technologies Inc. + +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 false 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 "3d/CCMotionStreak3D.h" +#include "math/CCVertex.h" +#include "base/CCDirector.h" +#include "renderer/CCTextureCache.h" +#include "renderer/ccGLStateCache.h" +#include "renderer/CCTexture2D.h" +#include "renderer/CCRenderer.h" +#include "renderer/CCGLProgramState.h" +#include "renderer/CCRenderState.h" + +NS_CC_BEGIN + +MotionStreak3D::MotionStreak3D() +: _startingPositionInitialized(false) +, _texture(nullptr) +, _blendFunc(BlendFunc::ALPHA_NON_PREMULTIPLIED) +, _stroke(0.0f) +, _fadeDelta(0.0f) +, _minSeg(0.0f) +, _maxPoints(0) +, _nuPoints(0) +, _previousNuPoints(0) +, _pointVertexes(nullptr) +, _pointState(nullptr) +, _vertices(nullptr) +, _colorPointer(nullptr) +, _texCoords(nullptr) +, _positionR2D(0.f, 0.f) +, _sweepAxis(0.f, 1.f, 0.f) +{ +} + +MotionStreak3D::~MotionStreak3D() +{ + CC_SAFE_RELEASE(_texture); + CC_SAFE_FREE(_pointState); + CC_SAFE_FREE(_pointVertexes); + CC_SAFE_FREE(_vertices); + CC_SAFE_FREE(_colorPointer); + CC_SAFE_FREE(_texCoords); +} + +MotionStreak3D* MotionStreak3D::create(float fade, float minSeg, float stroke, const Color3B& color, const std::string& path) +{ + MotionStreak3D *ret = new (std::nothrow) MotionStreak3D(); + if (ret && ret->initWithFade(fade, minSeg, stroke, color, path)) + { + ret->autorelease(); + return ret; + } + + CC_SAFE_DELETE(ret); + return nullptr; +} + +MotionStreak3D* MotionStreak3D::create(float fade, float minSeg, float stroke, const Color3B& color, Texture2D* texture) +{ + MotionStreak3D *ret = new (std::nothrow) MotionStreak3D(); + if (ret && ret->initWithFade(fade, minSeg, stroke, color, texture)) + { + ret->autorelease(); + return ret; + } + + CC_SAFE_DELETE(ret); + return nullptr; +} + +bool MotionStreak3D::initWithFade(float fade, float minSeg, float stroke, const Color3B& color, const std::string& path) +{ + CCASSERT(!path.empty(), "Invalid filename"); + + Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(path); + return initWithFade(fade, minSeg, stroke, color, texture); +} + +bool MotionStreak3D::initWithFade(float fade, float minSeg, float stroke, const Color3B& color, Texture2D* texture) +{ + Node::setPosition(Vec2::ZERO); + setAnchorPoint(Vec2::ZERO); + ignoreAnchorPointForPosition(true); + _startingPositionInitialized = false; + + _positionR.setZero(); + _minSeg = (minSeg == -1.0f) ? stroke/5.0f : minSeg; + _minSeg *= _minSeg; + + _stroke = stroke; + _fadeDelta = 1.0f/fade; + + _maxPoints = (int)(fade*60.0f)+2; + _nuPoints = 0; + _pointState = (float *)malloc(sizeof(float) * _maxPoints); + _pointVertexes = (Vec3*)malloc(sizeof(Vec3) * _maxPoints); + + _vertices = (Vec3*)malloc(sizeof(Vec3) * _maxPoints * 2); + _texCoords = (Tex2F*)malloc(sizeof(Tex2F) * _maxPoints * 2); + _colorPointer = (GLubyte*)malloc(sizeof(GLubyte) * _maxPoints * 2 * 4); + + // Set blend mode + _blendFunc = BlendFunc::ALPHA_NON_PREMULTIPLIED; + + // shader state + setGLProgramState(GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR)); + + setTexture(texture); + setColor(color); + scheduleUpdate(); + + return true; +} + +void MotionStreak3D::setPosition(const Vec2& position) +{ + if (!_startingPositionInitialized) { + _startingPositionInitialized = true; + } + _positionR = Vec3(position.x, position.y, 0); +} + +void MotionStreak3D::setPosition(float x, float y) +{ + if (!_startingPositionInitialized) { + _startingPositionInitialized = true; + } + _positionR.x = x; + _positionR.y = y; +} + +void MotionStreak3D::setPosition3D(const Vec3& position) +{ + if (!_startingPositionInitialized) { + _startingPositionInitialized = true; + } + _positionR = position; +} + +const Vec2& MotionStreak3D::getPosition() const +{ + _positionR2D.x = _positionR.x; + _positionR2D.y = _positionR.y; + return _positionR2D; +} + +void MotionStreak3D::getPosition(float* x, float* y) const +{ + *x = _positionR.x; + *y = _positionR.y; +} + +float MotionStreak3D::getPositionX() const +{ + return _positionR.x; +} + +Vec3 MotionStreak3D::getPosition3D() const +{ + return Vec3(_positionR.x, _positionR.y, getPositionZ()); +} + +void MotionStreak3D::setPositionX(float x) +{ + if (!_startingPositionInitialized) { + _startingPositionInitialized = true; + } + _positionR.x = x; +} + +float MotionStreak3D::getPositionY() const +{ + return _positionR.y; +} + +void MotionStreak3D::setPositionY(float y) +{ + if (!_startingPositionInitialized) { + _startingPositionInitialized = true; + } + _positionR.y = y; +} + +void MotionStreak3D::tintWithColor(const Color3B& colors) +{ + setColor(colors); + + // Fast assignation + for(unsigned int i = 0; i<_nuPoints*2; i++) + { + *((Color3B*) (_colorPointer+i*4)) = colors; + } +} + +Texture2D* MotionStreak3D::getTexture(void) const +{ + return _texture; +} + +void MotionStreak3D::setTexture(Texture2D *texture) +{ + if (_texture != texture) + { + CC_SAFE_RETAIN(texture); + CC_SAFE_RELEASE(_texture); + _texture = texture; + } +} + +void MotionStreak3D::setBlendFunc(const BlendFunc &blendFunc) +{ + _blendFunc = blendFunc; +} + +const BlendFunc& MotionStreak3D::getBlendFunc(void) const +{ + return _blendFunc; +} + +void MotionStreak3D::setOpacity(GLubyte opacity) +{ + CCASSERT(false, "Set opacity no supported"); +} + +GLubyte MotionStreak3D::getOpacity(void) const +{ + CCASSERT(false, "Opacity no supported"); + return 0; +} + +void MotionStreak3D::setOpacityModifyRGB(bool bValue) +{ + CC_UNUSED_PARAM(bValue); +} + +bool MotionStreak3D::isOpacityModifyRGB(void) const +{ + return false; +} + +void MotionStreak3D::update(float delta) +{ + if (!_startingPositionInitialized) + { + return; + } + + delta *= _fadeDelta; + + unsigned int newIdx, newIdx2, i, i2; + unsigned int mov = 0; + + // Update current points + for(i = 0; i<_nuPoints; i++) + { + _pointState[i]-=delta; + + if(_pointState[i] <= 0) + mov++; + else + { + newIdx = i-mov; + + if(mov>0) + { + // Move data + _pointState[newIdx] = _pointState[i]; + + // Move point + _pointVertexes[newIdx] = _pointVertexes[i]; + + // Move vertices + i2 = i*2; + newIdx2 = newIdx*2; + _vertices[newIdx2] = _vertices[i2]; + _vertices[newIdx2+1] = _vertices[i2+1]; + + // Move color + i2 *= 4; + newIdx2 *= 4; + _colorPointer[newIdx2+0] = _colorPointer[i2+0]; + _colorPointer[newIdx2+1] = _colorPointer[i2+1]; + _colorPointer[newIdx2+2] = _colorPointer[i2+2]; + _colorPointer[newIdx2+4] = _colorPointer[i2+4]; + _colorPointer[newIdx2+5] = _colorPointer[i2+5]; + _colorPointer[newIdx2+6] = _colorPointer[i2+6]; + }else + newIdx2 = newIdx*8; + + const GLubyte op = (GLubyte)(_pointState[newIdx] * 255.0f); + _colorPointer[newIdx2+3] = op; + _colorPointer[newIdx2+7] = op; + } + } + _nuPoints-=mov; + + // Append new point + bool appendNewPoint = true; + if(_nuPoints >= _maxPoints) + { + appendNewPoint = false; + } + + else if(_nuPoints>0) + { + bool a1 = (_pointVertexes[_nuPoints-1] - _positionR).lengthSquared() < _minSeg; + bool a2 = (_nuPoints == 1) ? false : ((_pointVertexes[_nuPoints-2] - _positionR).lengthSquared() < (_minSeg * 2.0f)); + if(a1 || a2) + { + appendNewPoint = false; + } + } + + if(appendNewPoint) + { + _pointVertexes[_nuPoints] = _positionR; + _pointState[_nuPoints] = 1.0f; + + // Color assignment + const unsigned int offset = _nuPoints*8; + *((Color3B*)(_colorPointer + offset)) = _displayedColor; + *((Color3B*)(_colorPointer + offset+4)) = _displayedColor; + + // Opacity + _colorPointer[offset+3] = 255; + _colorPointer[offset+7] = 255; + + // Generate polygon + { + float stroke = _stroke * 0.5f; + _vertices[_nuPoints * 2] = _pointVertexes[_nuPoints] + (_sweepAxis * stroke); + _vertices[_nuPoints * 2 + 1] = _pointVertexes[_nuPoints] - (_sweepAxis * stroke); + } + + _nuPoints ++; + } + + // Updated Tex Coords only if they are different than previous step + if( _nuPoints && _previousNuPoints != _nuPoints ) { + float texDelta = 1.0f / _nuPoints; + for( i=0; i < _nuPoints; i++ ) { + _texCoords[i*2] = Tex2F(0, texDelta*i); + _texCoords[i*2+1] = Tex2F(1, texDelta*i); + } + + _previousNuPoints = _nuPoints; + } +} + +void MotionStreak3D::reset() +{ + _nuPoints = 0; +} + +void MotionStreak3D::onDraw(const Mat4 &transform, uint32_t flags) +{ + getGLProgram()->use(); + getGLProgram()->setUniformsForBuiltins(transform); + + GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POS_COLOR_TEX ); + GL::blendFunc( _blendFunc.src, _blendFunc.dst ); + + GL::bindTexture2D( _texture->getName() ); + + glDisable(GL_CULL_FACE); + RenderState::StateBlock::_defaultState->setCullFace(false); + glEnable(GL_DEPTH_TEST); + RenderState::StateBlock::_defaultState->setDepthTest(true); + + glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 3, GL_FLOAT, GL_FALSE, 0, _vertices); + glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_TEX_COORD, 2, GL_FLOAT, GL_FALSE, 0, _texCoords); + glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, _colorPointer); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)_nuPoints*2); + CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, _nuPoints*2); +} + +void MotionStreak3D::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags) +{ + if(_nuPoints <= 1) + return; + _customCommand.init(_globalZOrder, transform, flags); + _customCommand.func = CC_CALLBACK_0(MotionStreak3D::onDraw, this, transform, flags); + renderer->addCommand(&_customCommand); +} + +NS_CC_END diff --git a/cocos/3d/CCMotionStreak3D.h b/cocos/3d/CCMotionStreak3D.h new file mode 100644 index 0000000000..1ba31828cb --- /dev/null +++ b/cocos/3d/CCMotionStreak3D.h @@ -0,0 +1,205 @@ +/**************************************************************************** + Copyright (c) 2015 Chukong Technologies Inc. + + 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 __CC_MOTION_STREAK3D_H__ +#define __CC_MOTION_STREAK3D_H__ + +#include "base/CCProtocols.h" +#include "2d/CCNode.h" +#include "renderer/CCCustomCommand.h" + +NS_CC_BEGIN + +class Texture2D; + +/** + * @addtogroup _3d + * @{ + */ + +/** @class MotionStreak3D. + * @brief Creates a trailing path. It is created from a line segment sweeping along the path. + */ +class CC_DLL MotionStreak3D : public Node, public TextureProtocol +{ +public: + /** Creates and initializes a motion streak with fade in seconds, minimum segments, stroke's width, color, texture filename. + * + * @param fade The fade time, in seconds. + * @param minSeg The minimum segments. + * @param stroke The width of stroke. + * @param color The color of stroke. + * @param path The texture file name of stoke. + * @return An autoreleased MotionStreak3D object. + */ + static MotionStreak3D* create(float fade, float minSeg, float stroke, const Color3B& color, const std::string& path); + /** Creates and initializes a motion streak with fade in seconds, minimum segments, stroke's width, color, texture. + * + * @param fade The fade time, in seconds. + * @param minSeg The minimum segments. + * @param stroke The width of stroke. + * @param color The color of stroke. + * @param texture The texture name of stoke. + * @return An autoreleased MotionStreak3D object. + */ + static MotionStreak3D* create(float fade, float minSeg, float stroke, const Color3B& color, Texture2D* texture); + + /** Color used for the tint. + * + * @param colors The color used for the tint. + */ + void tintWithColor(const Color3B& colors); + + /** Remove all living segments of the ribbon. + */ + void reset(); + + /** Get stroke. + * + * @return float stroke. + */ + inline float getStroke() const { return _stroke; } + /** Set stroke. + * + * @param stroke The width of stroke. + */ + inline void setStroke(float stroke) { _stroke = stroke; } + + /** Is the starting position initialized or not. + * + * @return True if the starting position is initialized. + */ + inline bool isStartingPositionInitialized() const { return _startingPositionInitialized; } + /** Sets the starting position initialized or not. + * + * @param bStartingPositionInitialized True if initialized the starting position. + */ + inline void setStartingPositionInitialized(bool bStartingPositionInitialized) + { + _startingPositionInitialized = bStartingPositionInitialized; + } + + // Overrides + virtual void setPosition(const Vec2& position) override; + virtual void setPosition(float x, float y) override; + virtual void setPosition3D(const Vec3& position) override; + virtual void setRotation3D(const Vec3& rotation) override {} + virtual void setRotationQuat(const Quaternion& quat) override {} + + virtual const Vec2& getPosition() const override; + virtual void getPosition(float* x, float* y) const override; + virtual void setPositionX(float x) override; + virtual void setPositionY(float y) override; + virtual float getPositionX(void) const override; + virtual float getPositionY(void) const override; + virtual Vec3 getPosition3D() const override; + /** + * @js NA + * @lua NA + */ + virtual void draw(Renderer *renderer, const Mat4 &transform, uint32_t flags) override; + /** + * @lua NA + */ + virtual void update(float delta) override; + virtual Texture2D* getTexture() const override; + virtual void setTexture(Texture2D *texture) override; + /** + * @js NA + * @lua NA + */ + virtual void setBlendFunc(const BlendFunc &blendFunc) override; + /** + * @js NA + * @lua NA + */ + virtual const BlendFunc& getBlendFunc() const override; + virtual GLubyte getOpacity() const override; + virtual void setOpacity(GLubyte opacity) override; + virtual void setOpacityModifyRGB(bool value) override; + virtual bool isOpacityModifyRGB() const override; + + /** + * Set the direction of sweeping line segment. + * @param sweepAxis Direction of sweeping line segment + */ + void setSweepAxis(const Vec3& sweepAxis) { _sweepAxis = sweepAxis.getNormalized(); } + + /** + * Get the direction of sweeping line segment + */ + const Vec3& getSweepAxis() const { return _sweepAxis; } + +CC_CONSTRUCTOR_ACCESS: + MotionStreak3D(); + virtual ~MotionStreak3D(); + + /** initializes a motion streak with fade in seconds, minimum segments, stroke's width, color and texture filename */ + bool initWithFade(float fade, float minSeg, float stroke, const Color3B& color, const std::string& path); + + /** initializes a motion streak with fade in seconds, minimum segments, stroke's width, color and texture */ + bool initWithFade(float fade, float minSeg, float stroke, const Color3B& color, Texture2D* texture); + +protected: + //renderer callback + void onDraw(const Mat4 &transform, uint32_t flags); + + bool _startingPositionInitialized; + + /** texture used for the motion streak */ + Texture2D* _texture; + BlendFunc _blendFunc; + Vec3 _positionR; + mutable Vec2 _positionR2D; + Vec3 _sweepAxis; + + + float _stroke; + float _fadeDelta; + float _minSeg; + + unsigned int _maxPoints; + unsigned int _nuPoints; + unsigned int _previousNuPoints; + + /** Pointers */ + Vec3* _pointVertexes; + float* _pointState; + + // Opengl + Vec3* _vertices; + GLubyte* _colorPointer; + Tex2F* _texCoords; + + CustomCommand _customCommand; + +private: + CC_DISALLOW_COPY_AND_ASSIGN(MotionStreak3D); +}; + +// end of _3d group +/// @} + +NS_CC_END + +#endif //__CC_MOTION_STREAK3D_H__ diff --git a/cocos/3d/CMakeLists.txt b/cocos/3d/CMakeLists.txt index b306935b3e..9104284f59 100644 --- a/cocos/3d/CMakeLists.txt +++ b/cocos/3d/CMakeLists.txt @@ -16,6 +16,7 @@ set(COCOS_3D_SRC 3d/CCMesh.cpp 3d/CCMeshSkin.cpp 3d/CCMeshVertexIndexData.cpp + 3d/CCMotionStreak3D.cpp 3d/CCOBB.cpp 3d/CCObjLoader.cpp 3d/CCPlane.cpp diff --git a/cocos/cocos2d.h b/cocos/cocos2d.h index 34070a9a70..73aa40a2b6 100644 --- a/cocos/cocos2d.h +++ b/cocos/cocos2d.h @@ -292,6 +292,7 @@ THE SOFTWARE. #include "3d/CCFrustum.h" #include "3d/CCMesh.h" #include "3d/CCMeshSkin.h" +#include "3d/CCMotionStreak3D.h" #include "3d/CCMeshVertexIndexData.h" #include "3d/CCOBB.h" #include "3d/CCPlane.h" diff --git a/cocos/scripting/lua-bindings/auto/api/MotionStreak3D.lua b/cocos/scripting/lua-bindings/auto/api/MotionStreak3D.lua new file mode 100644 index 0000000000..74b70ccb57 --- /dev/null +++ b/cocos/scripting/lua-bindings/auto/api/MotionStreak3D.lua @@ -0,0 +1,237 @@ + +-------------------------------- +-- @module MotionStreak3D +-- @extend Node,TextureProtocol +-- @parent_module cc + +-------------------------------- +-- Remove all living segments of the ribbon. +-- @function [parent=#MotionStreak3D] reset +-- @param self +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] setTexture +-- @param self +-- @param #cc.Texture2D texture +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] getTexture +-- @param self +-- @return Texture2D#Texture2D ret (return value: cc.Texture2D) + +-------------------------------- +-- Color used for the tint.
+-- param colors The color used for the tint. +-- @function [parent=#MotionStreak3D] tintWithColor +-- @param self +-- @param #color3b_table colors +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- Get the direction of sweeping line segment +-- @function [parent=#MotionStreak3D] getSweepAxis +-- @param self +-- @return vec3_table#vec3_table ret (return value: vec3_table) + +-------------------------------- +-- js NA
+-- lua NA +-- @function [parent=#MotionStreak3D] setBlendFunc +-- @param self +-- @param #cc.BlendFunc blendFunc +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- Sets the starting position initialized or not.
+-- param bStartingPositionInitialized True if initialized the starting position. +-- @function [parent=#MotionStreak3D] setStartingPositionInitialized +-- @param self +-- @param #bool bStartingPositionInitialized +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- js NA
+-- lua NA +-- @function [parent=#MotionStreak3D] getBlendFunc +-- @param self +-- @return BlendFunc#BlendFunc ret (return value: cc.BlendFunc) + +-------------------------------- +-- Is the starting position initialized or not.
+-- return True if the starting position is initialized. +-- @function [parent=#MotionStreak3D] isStartingPositionInitialized +-- @param self +-- @return bool#bool ret (return value: bool) + +-------------------------------- +-- Get stroke.
+-- return float stroke. +-- @function [parent=#MotionStreak3D] getStroke +-- @param self +-- @return float#float ret (return value: float) + +-------------------------------- +-- @overload self, float, float, float, color3b_table, cc.Texture2D +-- @overload self, float, float, float, color3b_table, string +-- @function [parent=#MotionStreak3D] initWithFade +-- @param self +-- @param #float fade +-- @param #float minSeg +-- @param #float stroke +-- @param #color3b_table color +-- @param #string path +-- @return bool#bool ret (return value: bool) + +-------------------------------- +-- Set the direction of sweeping line segment.
+-- param sweepAxis Direction of sweeping line segment +-- @function [parent=#MotionStreak3D] setSweepAxis +-- @param self +-- @param #vec3_table sweepAxis +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- Set stroke.
+-- param stroke The width of stroke. +-- @function [parent=#MotionStreak3D] setStroke +-- @param self +-- @param #float stroke +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- @overload self, float, float, float, color3b_table, cc.Texture2D +-- @overload self, float, float, float, color3b_table, string +-- @function [parent=#MotionStreak3D] create +-- @param self +-- @param #float fade +-- @param #float minSeg +-- @param #float stroke +-- @param #color3b_table color +-- @param #string path +-- @return MotionStreak3D#MotionStreak3D ret (return value: cc.MotionStreak3D) + +-------------------------------- +-- js NA
+-- lua NA +-- @function [parent=#MotionStreak3D] draw +-- @param self +-- @param #cc.Renderer renderer +-- @param #mat4_table transform +-- @param #unsigned int flags +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] setOpacityModifyRGB +-- @param self +-- @param #bool value +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] setPositionY +-- @param self +-- @param #float y +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] setRotation3D +-- @param self +-- @param #vec3_table rotation +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] setPositionX +-- @param self +-- @param #float x +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] setPosition3D +-- @param self +-- @param #vec3_table position +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] getPositionY +-- @param self +-- @return float#float ret (return value: float) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] getPositionX +-- @param self +-- @return float#float ret (return value: float) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] getPosition3D +-- @param self +-- @return vec3_table#vec3_table ret (return value: vec3_table) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] setOpacity +-- @param self +-- @param #unsigned char opacity +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- lua NA +-- @function [parent=#MotionStreak3D] update +-- @param self +-- @param #float delta +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] setRotationQuat +-- @param self +-- @param #cc.Quaternion quat +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] getOpacity +-- @param self +-- @return unsigned char#unsigned char ret (return value: unsigned char) + +-------------------------------- +-- @overload self, float, float +-- @overload self, vec2_table +-- @function [parent=#MotionStreak3D] setPosition +-- @param self +-- @param #float x +-- @param #float y +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- @overload self, float, float +-- @overload self +-- @function [parent=#MotionStreak3D] getPosition +-- @param self +-- @param #float x +-- @param #float y +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] isOpacityModifyRGB +-- @param self +-- @return bool#bool ret (return value: bool) + +-------------------------------- +-- +-- @function [parent=#MotionStreak3D] MotionStreak3D +-- @param self +-- @return MotionStreak3D#MotionStreak3D self (return value: cc.MotionStreak3D) + +return nil diff --git a/cocos/scripting/lua-bindings/auto/api/lua_cocos2dx_auto_api.lua b/cocos/scripting/lua-bindings/auto/api/lua_cocos2dx_auto_api.lua index 340cf0c853..56f6bf1dad 100644 --- a/cocos/scripting/lua-bindings/auto/api/lua_cocos2dx_auto_api.lua +++ b/cocos/scripting/lua-bindings/auto/api/lua_cocos2dx_auto_api.lua @@ -1311,4 +1311,9 @@ -- @field [parent=#cc] TileMapAtlas#TileMapAtlas TileMapAtlas preloaded module +-------------------------------------------------------- +-- the cc MotionStreak3D +-- @field [parent=#cc] MotionStreak3D#MotionStreak3D MotionStreak3D preloaded module + + return nil diff --git a/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp b/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp index 269ccf98f1..7b8d73dcb5 100644 --- a/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp +++ b/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp @@ -94372,6 +94372,818 @@ int lua_register_cocos2dx_TileMapAtlas(lua_State* tolua_S) g_typeCast["TileMapAtlas"] = "cc.TileMapAtlas"; return 1; } + +int lua_cocos2dx_MotionStreak3D_reset(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_reset'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 0) + { + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_reset'", nullptr); + return 0; + } + cobj->reset(); + lua_settop(tolua_S, 1); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:reset",argc, 0); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_reset'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_setTexture(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_setTexture'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 1) + { + cocos2d::Texture2D* arg0; + + ok &= luaval_to_object(tolua_S, 2, "cc.Texture2D",&arg0, "cc.MotionStreak3D:setTexture"); + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_setTexture'", nullptr); + return 0; + } + cobj->setTexture(arg0); + lua_settop(tolua_S, 1); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:setTexture",argc, 1); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_setTexture'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_getTexture(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_getTexture'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 0) + { + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_getTexture'", nullptr); + return 0; + } + cocos2d::Texture2D* ret = cobj->getTexture(); + object_to_luaval(tolua_S, "cc.Texture2D",(cocos2d::Texture2D*)ret); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:getTexture",argc, 0); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_getTexture'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_tintWithColor(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_tintWithColor'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 1) + { + cocos2d::Color3B arg0; + + ok &= luaval_to_color3b(tolua_S, 2, &arg0, "cc.MotionStreak3D:tintWithColor"); + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_tintWithColor'", nullptr); + return 0; + } + cobj->tintWithColor(arg0); + lua_settop(tolua_S, 1); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:tintWithColor",argc, 1); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_tintWithColor'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_getSweepAxis(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_getSweepAxis'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 0) + { + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_getSweepAxis'", nullptr); + return 0; + } + const cocos2d::Vec3& ret = cobj->getSweepAxis(); + vec3_to_luaval(tolua_S, ret); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:getSweepAxis",argc, 0); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_getSweepAxis'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_setBlendFunc(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_setBlendFunc'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 1) + { + cocos2d::BlendFunc arg0; + + ok &= luaval_to_blendfunc(tolua_S, 2, &arg0, "cc.MotionStreak3D:setBlendFunc"); + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_setBlendFunc'", nullptr); + return 0; + } + cobj->setBlendFunc(arg0); + lua_settop(tolua_S, 1); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:setBlendFunc",argc, 1); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_setBlendFunc'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_setStartingPositionInitialized(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_setStartingPositionInitialized'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 1) + { + bool arg0; + + ok &= luaval_to_boolean(tolua_S, 2,&arg0, "cc.MotionStreak3D:setStartingPositionInitialized"); + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_setStartingPositionInitialized'", nullptr); + return 0; + } + cobj->setStartingPositionInitialized(arg0); + lua_settop(tolua_S, 1); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:setStartingPositionInitialized",argc, 1); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_setStartingPositionInitialized'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_getBlendFunc(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_getBlendFunc'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 0) + { + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_getBlendFunc'", nullptr); + return 0; + } + const cocos2d::BlendFunc& ret = cobj->getBlendFunc(); + blendfunc_to_luaval(tolua_S, ret); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:getBlendFunc",argc, 0); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_getBlendFunc'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_isStartingPositionInitialized(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_isStartingPositionInitialized'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 0) + { + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_isStartingPositionInitialized'", nullptr); + return 0; + } + bool ret = cobj->isStartingPositionInitialized(); + tolua_pushboolean(tolua_S,(bool)ret); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:isStartingPositionInitialized",argc, 0); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_isStartingPositionInitialized'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_getStroke(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_getStroke'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 0) + { + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_getStroke'", nullptr); + return 0; + } + double ret = cobj->getStroke(); + tolua_pushnumber(tolua_S,(lua_Number)ret); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:getStroke",argc, 0); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_getStroke'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_initWithFade(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_initWithFade'", nullptr); + return 0; + } +#endif + argc = lua_gettop(tolua_S)-1; + do{ + if (argc == 5) { + double arg0; + ok &= luaval_to_number(tolua_S, 2,&arg0, "cc.MotionStreak3D:initWithFade"); + + if (!ok) { break; } + double arg1; + ok &= luaval_to_number(tolua_S, 3,&arg1, "cc.MotionStreak3D:initWithFade"); + + if (!ok) { break; } + double arg2; + ok &= luaval_to_number(tolua_S, 4,&arg2, "cc.MotionStreak3D:initWithFade"); + + if (!ok) { break; } + cocos2d::Color3B arg3; + ok &= luaval_to_color3b(tolua_S, 5, &arg3, "cc.MotionStreak3D:initWithFade"); + + if (!ok) { break; } + cocos2d::Texture2D* arg4; + ok &= luaval_to_object(tolua_S, 6, "cc.Texture2D",&arg4, "cc.MotionStreak3D:initWithFade"); + + if (!ok) { break; } + bool ret = cobj->initWithFade(arg0, arg1, arg2, arg3, arg4); + tolua_pushboolean(tolua_S,(bool)ret); + return 1; + } + }while(0); + ok = true; + do{ + if (argc == 5) { + double arg0; + ok &= luaval_to_number(tolua_S, 2,&arg0, "cc.MotionStreak3D:initWithFade"); + + if (!ok) { break; } + double arg1; + ok &= luaval_to_number(tolua_S, 3,&arg1, "cc.MotionStreak3D:initWithFade"); + + if (!ok) { break; } + double arg2; + ok &= luaval_to_number(tolua_S, 4,&arg2, "cc.MotionStreak3D:initWithFade"); + + if (!ok) { break; } + cocos2d::Color3B arg3; + ok &= luaval_to_color3b(tolua_S, 5, &arg3, "cc.MotionStreak3D:initWithFade"); + + if (!ok) { break; } + std::string arg4; + ok &= luaval_to_std_string(tolua_S, 6,&arg4, "cc.MotionStreak3D:initWithFade"); + + if (!ok) { break; } + bool ret = cobj->initWithFade(arg0, arg1, arg2, arg3, arg4); + tolua_pushboolean(tolua_S,(bool)ret); + return 1; + } + }while(0); + ok = true; + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:initWithFade",argc, 5); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_initWithFade'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_setSweepAxis(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_setSweepAxis'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 1) + { + cocos2d::Vec3 arg0; + + ok &= luaval_to_vec3(tolua_S, 2, &arg0, "cc.MotionStreak3D:setSweepAxis"); + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_setSweepAxis'", nullptr); + return 0; + } + cobj->setSweepAxis(arg0); + lua_settop(tolua_S, 1); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:setSweepAxis",argc, 1); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_setSweepAxis'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_setStroke(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertype(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + cobj = (cocos2d::MotionStreak3D*)tolua_tousertype(tolua_S,1,0); + +#if COCOS2D_DEBUG >= 1 + if (!cobj) + { + tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_MotionStreak3D_setStroke'", nullptr); + return 0; + } +#endif + + argc = lua_gettop(tolua_S)-1; + if (argc == 1) + { + double arg0; + + ok &= luaval_to_number(tolua_S, 2,&arg0, "cc.MotionStreak3D:setStroke"); + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_setStroke'", nullptr); + return 0; + } + cobj->setStroke(arg0); + lua_settop(tolua_S, 1); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:setStroke",argc, 1); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_setStroke'.",&tolua_err); +#endif + + return 0; +} +int lua_cocos2dx_MotionStreak3D_create(lua_State* tolua_S) +{ + int argc = 0; + bool ok = true; +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + +#if COCOS2D_DEBUG >= 1 + if (!tolua_isusertable(tolua_S,1,"cc.MotionStreak3D",0,&tolua_err)) goto tolua_lerror; +#endif + + argc = lua_gettop(tolua_S)-1; + + do + { + if (argc == 5) + { + double arg0; + ok &= luaval_to_number(tolua_S, 2,&arg0, "cc.MotionStreak3D:create"); + if (!ok) { break; } + double arg1; + ok &= luaval_to_number(tolua_S, 3,&arg1, "cc.MotionStreak3D:create"); + if (!ok) { break; } + double arg2; + ok &= luaval_to_number(tolua_S, 4,&arg2, "cc.MotionStreak3D:create"); + if (!ok) { break; } + cocos2d::Color3B arg3; + ok &= luaval_to_color3b(tolua_S, 5, &arg3, "cc.MotionStreak3D:create"); + if (!ok) { break; } + cocos2d::Texture2D* arg4; + ok &= luaval_to_object(tolua_S, 6, "cc.Texture2D",&arg4, "cc.MotionStreak3D:create"); + if (!ok) { break; } + cocos2d::MotionStreak3D* ret = cocos2d::MotionStreak3D::create(arg0, arg1, arg2, arg3, arg4); + object_to_luaval(tolua_S, "cc.MotionStreak3D",(cocos2d::MotionStreak3D*)ret); + return 1; + } + } while (0); + ok = true; + do + { + if (argc == 5) + { + double arg0; + ok &= luaval_to_number(tolua_S, 2,&arg0, "cc.MotionStreak3D:create"); + if (!ok) { break; } + double arg1; + ok &= luaval_to_number(tolua_S, 3,&arg1, "cc.MotionStreak3D:create"); + if (!ok) { break; } + double arg2; + ok &= luaval_to_number(tolua_S, 4,&arg2, "cc.MotionStreak3D:create"); + if (!ok) { break; } + cocos2d::Color3B arg3; + ok &= luaval_to_color3b(tolua_S, 5, &arg3, "cc.MotionStreak3D:create"); + if (!ok) { break; } + std::string arg4; + ok &= luaval_to_std_string(tolua_S, 6,&arg4, "cc.MotionStreak3D:create"); + if (!ok) { break; } + cocos2d::MotionStreak3D* ret = cocos2d::MotionStreak3D::create(arg0, arg1, arg2, arg3, arg4); + object_to_luaval(tolua_S, "cc.MotionStreak3D",(cocos2d::MotionStreak3D*)ret); + return 1; + } + } while (0); + ok = true; + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d", "cc.MotionStreak3D:create",argc, 5); + return 0; +#if COCOS2D_DEBUG >= 1 + tolua_lerror: + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_create'.",&tolua_err); +#endif + return 0; +} +int lua_cocos2dx_MotionStreak3D_constructor(lua_State* tolua_S) +{ + int argc = 0; + cocos2d::MotionStreak3D* cobj = nullptr; + bool ok = true; + +#if COCOS2D_DEBUG >= 1 + tolua_Error tolua_err; +#endif + + + + argc = lua_gettop(tolua_S)-1; + if (argc == 0) + { + if(!ok) + { + tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_MotionStreak3D_constructor'", nullptr); + return 0; + } + cobj = new cocos2d::MotionStreak3D(); + cobj->autorelease(); + int ID = (int)cobj->_ID ; + int* luaID = &cobj->_luaID ; + toluafix_pushusertype_ccobject(tolua_S, ID, luaID, (void*)cobj,"cc.MotionStreak3D"); + return 1; + } + luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.MotionStreak3D:MotionStreak3D",argc, 0); + return 0; + +#if COCOS2D_DEBUG >= 1 + tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_MotionStreak3D_constructor'.",&tolua_err); +#endif + + return 0; +} + +static int lua_cocos2dx_MotionStreak3D_finalize(lua_State* tolua_S) +{ + printf("luabindings: finalizing LUA object (MotionStreak3D)"); + return 0; +} + +int lua_register_cocos2dx_MotionStreak3D(lua_State* tolua_S) +{ + tolua_usertype(tolua_S,"cc.MotionStreak3D"); + tolua_cclass(tolua_S,"MotionStreak3D","cc.MotionStreak3D","cc.Node",nullptr); + + tolua_beginmodule(tolua_S,"MotionStreak3D"); + tolua_function(tolua_S,"new",lua_cocos2dx_MotionStreak3D_constructor); + tolua_function(tolua_S,"reset",lua_cocos2dx_MotionStreak3D_reset); + tolua_function(tolua_S,"setTexture",lua_cocos2dx_MotionStreak3D_setTexture); + tolua_function(tolua_S,"getTexture",lua_cocos2dx_MotionStreak3D_getTexture); + tolua_function(tolua_S,"tintWithColor",lua_cocos2dx_MotionStreak3D_tintWithColor); + tolua_function(tolua_S,"getSweepAxis",lua_cocos2dx_MotionStreak3D_getSweepAxis); + tolua_function(tolua_S,"setBlendFunc",lua_cocos2dx_MotionStreak3D_setBlendFunc); + tolua_function(tolua_S,"setStartingPositionInitialized",lua_cocos2dx_MotionStreak3D_setStartingPositionInitialized); + tolua_function(tolua_S,"getBlendFunc",lua_cocos2dx_MotionStreak3D_getBlendFunc); + tolua_function(tolua_S,"isStartingPositionInitialized",lua_cocos2dx_MotionStreak3D_isStartingPositionInitialized); + tolua_function(tolua_S,"getStroke",lua_cocos2dx_MotionStreak3D_getStroke); + tolua_function(tolua_S,"initWithFade",lua_cocos2dx_MotionStreak3D_initWithFade); + tolua_function(tolua_S,"setSweepAxis",lua_cocos2dx_MotionStreak3D_setSweepAxis); + tolua_function(tolua_S,"setStroke",lua_cocos2dx_MotionStreak3D_setStroke); + tolua_function(tolua_S,"create", lua_cocos2dx_MotionStreak3D_create); + tolua_endmodule(tolua_S); + std::string typeName = typeid(cocos2d::MotionStreak3D).name(); + g_luaType[typeName] = "cc.MotionStreak3D"; + g_typeCast["MotionStreak3D"] = "cc.MotionStreak3D"; + return 1; +} TOLUA_API int register_all_cocos2dx(lua_State* tolua_S) { tolua_open(tolua_S); @@ -94613,6 +95425,7 @@ TOLUA_API int register_all_cocos2dx(lua_State* tolua_S) lua_register_cocos2dx_EventListenerTouchOneByOne(tolua_S); lua_register_cocos2dx_ParticleRain(tolua_S); lua_register_cocos2dx_Waves(tolua_S); + lua_register_cocos2dx_MotionStreak3D(tolua_S); lua_register_cocos2dx_EaseOut(tolua_S); lua_register_cocos2dx_MenuItemFont(tolua_S); lua_register_cocos2dx_TransitionFadeUp(tolua_S); diff --git a/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.hpp b/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.hpp index e6137a3bfe..320c7d6f91 100644 --- a/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.hpp +++ b/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.hpp @@ -2089,6 +2089,22 @@ int register_all_cocos2dx(lua_State* tolua_S); + + + + + + + + + + + + + + + + diff --git a/templates/cocos2dx_files.json b/templates/cocos2dx_files.json index ea86f79b83..7dca2f7ea7 100644 --- a/templates/cocos2dx_files.json +++ b/templates/cocos2dx_files.json @@ -234,6 +234,8 @@ "cocos/3d/CCMeshSkin.h", "cocos/3d/CCMeshVertexIndexData.cpp", "cocos/3d/CCMeshVertexIndexData.h", + "cocos/3d/CCMotionStreak3D.cpp", + "cocos/3d/CCMotionStreak3D.h", "cocos/3d/CCOBB.cpp", "cocos/3d/CCOBB.h", "cocos/3d/CCObjLoader.cpp", diff --git a/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.cpp b/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.cpp index c9b8b7376e..43dc4d629f 100644 --- a/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.cpp +++ b/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.cpp @@ -27,6 +27,7 @@ #include "DrawNode3D.h" #include "2d/CCCameraBackgroundBrush.h" #include "3d/CCSprite3DMaterial.h" +#include "3d/CCMotionStreak3D.h" #include "extensions/Particle3D/PU/CCPUParticleSystem3D.h" @@ -65,6 +66,7 @@ Sprite3DTests::Sprite3DTests() ADD_TEST_CASE(Animate3DCallbackTest); ADD_TEST_CASE(CameraBackgroundClearTest); ADD_TEST_CASE(Sprite3DVertexColorTest); + ADD_TEST_CASE(MotionStreak3DTest); }; //------------------------------------------------------------------ @@ -2470,3 +2472,47 @@ std::string CameraBackgroundClearTest::subtitle() const { return ""; } + +MotionStreak3DTest::MotionStreak3DTest() +{ + auto s = Director::getInstance()->getWinSize(); + + auto camera = Camera::createPerspective(40, s.width / s.height, 0.01f, 1000.f); + camera->setCameraFlag(CameraFlag::USER1); + camera->setPosition3D(Vec3(0.f, 50.f, 200.f)); + camera->lookAt(Vec3(0.f, 0.f, 0.f)); + addChild(camera); + + auto sprite = Sprite3D::create("Sprite3DTest/orc.c3b"); + sprite->setPosition(20.f, 0.f); + addChild(sprite); + + auto streak = MotionStreak3D::create(1.0f, 1.0f, 5.f, Color3B(255, 255, 0), "Images/Icon.png"); + addChild(streak); + + setCameraMask(2); + + _sprite = sprite; + _streak = streak; + scheduleUpdate(); +} +std::string MotionStreak3DTest::title() const +{ + return "MotionStreak3D Test"; +} +std::string MotionStreak3DTest::subtitle() const +{ + return ""; +} + +void MotionStreak3DTest::update(float delta) +{ + static float t = 0; + t += delta; + float angle = t * M_PI; + float r = 20.f; + + _sprite->setPosition3D(Vec3(r * cosf(angle), 0, r * sinf(angle))); + _streak->setPosition3D(_sprite->getPosition3D()); + _streak->setSweepAxis(Vec3(cosf(angle), 0, sinf(angle))); +} diff --git a/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.h b/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.h index 996c21e586..d948ab4b25 100644 --- a/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.h +++ b/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.h @@ -35,6 +35,7 @@ namespace cocos2d { class Ray; class DrawNode3D; class GLProgramState; + class MotionStreak3D; } DEFINE_TEST_SUITE(Sprite3DTests); @@ -568,4 +569,18 @@ protected: #endif }; +class MotionStreak3DTest : public Sprite3DTestDemo +{ +public: + CREATE_FUNC(MotionStreak3DTest); + MotionStreak3DTest(); + virtual std::string title() const override; + virtual std::string subtitle() const override; + virtual void update(float delta) override; + +protected: + cocos2d::Sprite3D* _sprite; + cocos2d::MotionStreak3D* _streak; +}; + #endif diff --git a/tests/js-tests/src/ExtensionsTest/S9SpriteTest/S9SpriteTest.js b/tests/js-tests/src/ExtensionsTest/S9SpriteTest/S9SpriteTest.js index a348222f4e..0b589c363a 100644 --- a/tests/js-tests/src/ExtensionsTest/S9SpriteTest/S9SpriteTest.js +++ b/tests/js-tests/src/ExtensionsTest/S9SpriteTest/S9SpriteTest.js @@ -512,6 +512,38 @@ var S9FrameNameSpriteSheetRotatedInsetsScaled = S9SpriteTestDemo.extend({ } }); +var S9SpriteActionTest = S9SpriteTestDemo.extend({ + + _title:"Scale9Sprite from sprite sheet", + _subtitle:"Test Action for ccui.scale9Sprite : Rotate + Scale + Translate", + + ctor:function() { + this._super(); + + var blocks = new cc.Scale9Sprite('blocks9.png'); + + blocks.x = winSize.width / 2; + blocks.y = winSize.height / 2; + + this.addChild(blocks); + + var delay = cc.delayTime(0.25); + + var rotateBy = cc.rotateBy(2, 360); + var rotateByBack = rotateBy.reverse(); + + var ScaleTo = cc.scaleTo(2, -0.44, 0.47); + var ScaleToBack = cc.scaleTo(2, 1.0, 1.0); + + var moveBy = cc.moveBy(1, cc.p(80, 80)); + var moveByBack = moveBy.reverse(); + + blocks.runAction(cc.sequence(rotateBy, delay, rotateByBack)); + blocks.runAction(cc.sequence(ScaleTo, delay.clone(), ScaleToBack)); + blocks.runAction(cc.sequence(moveBy,moveByBack)); + } +}); + var S9SpriteTestScene = TestScene.extend({ runThisTest:function (num) { sceneIdx = (num || num == 0) ? (num - 1) : -1; @@ -538,7 +570,8 @@ var arrayOfS9SpriteTest = [ S9FrameNameSpriteSheetInsetsScaled, S9FrameNameSpriteSheetRotatedInsets, S9FrameNameSpriteSheetRotatedInsetsScaled, - S9_TexturePacker + S9_TexturePacker, + S9SpriteActionTest ]; var nextS9SpriteTest = function () {