mirror of https://github.com/axmolengine/axmol.git
Merge branch 'master' into develop
This commit is contained in:
commit
f6c59928b2
|
@ -587,4 +587,65 @@ CCBone *CCArmature::getBoneAtPoint(float x, float y)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
b2Body *CCArmature::getB2Body()
|
||||||
|
{
|
||||||
|
return m_pB2Body;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCArmature::setB2Body(b2Body *body)
|
||||||
|
{
|
||||||
|
m_pB2Body = body;
|
||||||
|
|
||||||
|
CCObject *object = NULL;
|
||||||
|
CCARRAY_FOREACH(m_pChildren, object)
|
||||||
|
{
|
||||||
|
if (CCBone *bone = dynamic_cast<CCBone*>(object))
|
||||||
|
{
|
||||||
|
CCArray *displayList = bone->getDisplayManager()->getDecorativeDisplayList();
|
||||||
|
|
||||||
|
CCObject *displayObject = NULL;
|
||||||
|
CCARRAY_FOREACH(displayList, displayObject)
|
||||||
|
{
|
||||||
|
CCColliderDetector *detector = ((CCDecorativeDisplay*)displayObject)->getColliderDetector();
|
||||||
|
if (detector != NULL)
|
||||||
|
{
|
||||||
|
detector->setB2Body(m_pB2Body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
cpBody *CCArmature::getCPBody()
|
||||||
|
{
|
||||||
|
return m_pCPBody;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CCArmature::setCPBody(cpBody *body)
|
||||||
|
{
|
||||||
|
m_pCPBody = body;
|
||||||
|
|
||||||
|
CCObject *object = NULL;
|
||||||
|
CCARRAY_FOREACH(m_pChildren, object)
|
||||||
|
{
|
||||||
|
if (CCBone *bone = dynamic_cast<CCBone*>(object))
|
||||||
|
{
|
||||||
|
CCArray *displayList = bone->getDisplayManager()->getDecorativeDisplayList();
|
||||||
|
|
||||||
|
CCObject *displayObject = NULL;
|
||||||
|
CCARRAY_FOREACH(displayList, displayObject)
|
||||||
|
{
|
||||||
|
CCColliderDetector *detector = ((CCDecorativeDisplay*)displayObject)->getColliderDetector();
|
||||||
|
if (detector != NULL)
|
||||||
|
{
|
||||||
|
detector->setCPBody(m_pCPBody);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
NS_CC_EXT_END
|
NS_CC_EXT_END
|
||||||
|
|
|
@ -30,6 +30,9 @@ THE SOFTWARE.
|
||||||
#include "display/CCBatchNode.h"
|
#include "display/CCBatchNode.h"
|
||||||
#include "animation/CCArmatureAnimation.h"
|
#include "animation/CCArmatureAnimation.h"
|
||||||
|
|
||||||
|
class b2Body;
|
||||||
|
struct cpBody;
|
||||||
|
|
||||||
NS_CC_EXT_BEGIN
|
NS_CC_EXT_BEGIN
|
||||||
|
|
||||||
class CCArmature : public CCNodeRGBA, public CCBlendProtocol
|
class CCArmature : public CCNodeRGBA, public CCBlendProtocol
|
||||||
|
@ -154,6 +157,12 @@ protected:
|
||||||
CCPoint m_pOffsetPoint;
|
CCPoint m_pOffsetPoint;
|
||||||
|
|
||||||
CCArmatureAnimation *m_pAnimation;
|
CCArmatureAnimation *m_pAnimation;
|
||||||
|
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
CC_PROPERTY(b2Body*, m_pB2Body, B2Body);
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
CC_PROPERTY(cpBody*, m_pCPBody, CPBody);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
NS_CC_EXT_END
|
NS_CC_EXT_END
|
||||||
|
|
|
@ -320,6 +320,16 @@ CCAffineTransform CCBone::nodeToArmatureTransform()
|
||||||
return m_tWorldTransform;
|
return m_tWorldTransform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CCAffineTransform CCBone::nodeToWorldTransform()
|
||||||
|
{
|
||||||
|
return CCAffineTransformConcat(m_tWorldTransform, m_pArmature->nodeToWorldTransform());
|
||||||
|
}
|
||||||
|
|
||||||
|
CCNode *CCBone::getDisplayRenderNode()
|
||||||
|
{
|
||||||
|
return m_pDisplayManager->getDisplayRenderNode();
|
||||||
|
}
|
||||||
|
|
||||||
void CCBone::addDisplay(CCDisplayData *displayData, int index)
|
void CCBone::addDisplay(CCDisplayData *displayData, int index)
|
||||||
{
|
{
|
||||||
m_pDisplayManager->addDisplay(displayData, index);
|
m_pDisplayManager->addDisplay(displayData, index);
|
||||||
|
|
|
@ -137,7 +137,9 @@ public:
|
||||||
virtual bool isTransformDirty();
|
virtual bool isTransformDirty();
|
||||||
|
|
||||||
virtual CCAffineTransform nodeToArmatureTransform();
|
virtual CCAffineTransform nodeToArmatureTransform();
|
||||||
|
virtual CCAffineTransform nodeToWorldTransform();
|
||||||
|
|
||||||
|
CCNode *getDisplayRenderNode();
|
||||||
public:
|
public:
|
||||||
/*
|
/*
|
||||||
* The origin state of the CCBone. Display's state is effected by m_pBoneData, m_pNode, m_pTweenData
|
* The origin state of the CCBone. Display's state is effected by m_pBoneData, m_pNode, m_pTweenData
|
||||||
|
|
|
@ -313,10 +313,7 @@ void CCTween::arriveKeyFrame(CCFrameData *keyFrameData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(keyFrameData->m_strEvent.length() != 0)
|
|
||||||
{
|
|
||||||
m_pAnimation->FrameEventSignal.emit(m_pBone, keyFrameData->m_strEvent.c_str());
|
|
||||||
}
|
|
||||||
// if(keyFrameData->m_strSound.length() != 0)
|
// if(keyFrameData->m_strSound.length() != 0)
|
||||||
// {
|
// {
|
||||||
// //soundManager.dispatchEventWith(Event.SOUND_FRAME, keyFrameData->sound);
|
// //soundManager.dispatchEventWith(Event.SOUND_FRAME, keyFrameData->sound);
|
||||||
|
|
|
@ -44,7 +44,7 @@ CCDecorativeDisplay::CCDecorativeDisplay()
|
||||||
, m_pDisplayData(NULL)
|
, m_pDisplayData(NULL)
|
||||||
|
|
||||||
{
|
{
|
||||||
#if ENABLE_PHYSICS_DETECT
|
#if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
m_pColliderDetector = NULL;
|
m_pColliderDetector = NULL;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ CCDecorativeDisplay::~CCDecorativeDisplay(void)
|
||||||
CC_SAFE_RELEASE_NULL(m_pDisplayData);
|
CC_SAFE_RELEASE_NULL(m_pDisplayData);
|
||||||
CC_SAFE_RELEASE_NULL(m_pDisplay);
|
CC_SAFE_RELEASE_NULL(m_pDisplay);
|
||||||
|
|
||||||
#if ENABLE_PHYSICS_DETECT
|
#if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
CC_SAFE_RELEASE_NULL(m_pColliderDetector);
|
CC_SAFE_RELEASE_NULL(m_pColliderDetector);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ THE SOFTWARE.
|
||||||
#include "../external_tool/sigslot.h"
|
#include "../external_tool/sigslot.h"
|
||||||
|
|
||||||
|
|
||||||
#if ENABLE_PHYSICS_DETECT
|
#if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
#include "../physics/CCColliderDetector.h"
|
#include "../physics/CCColliderDetector.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ protected:
|
||||||
CC_SYNTHESIZE_RETAIN(CCNode *, m_pDisplay, Display);
|
CC_SYNTHESIZE_RETAIN(CCNode *, m_pDisplay, Display);
|
||||||
CC_SYNTHESIZE_RETAIN(CCDisplayData *, m_pDisplayData, DisplayData);
|
CC_SYNTHESIZE_RETAIN(CCDisplayData *, m_pDisplayData, DisplayData);
|
||||||
|
|
||||||
#if ENABLE_PHYSICS_DETECT
|
#if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
CC_SYNTHESIZE_RETAIN(CCColliderDetector *, m_pColliderDetector, ColliderDetector);
|
CC_SYNTHESIZE_RETAIN(CCColliderDetector *, m_pColliderDetector, ColliderDetector);
|
||||||
#endif
|
#endif
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -72,7 +72,7 @@ void CCDisplayFactory::updateDisplay(CCBone *bone, CCDecorativeDisplay *decoDisp
|
||||||
{
|
{
|
||||||
CS_RETURN_IF(!decoDisplay);
|
CS_RETURN_IF(!decoDisplay);
|
||||||
|
|
||||||
#if ENABLE_PHYSICS_DETECT
|
#if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
if (dirty)
|
if (dirty)
|
||||||
{
|
{
|
||||||
CCColliderDetector *detector = decoDisplay->getColliderDetector();
|
CCColliderDetector *detector = decoDisplay->getColliderDetector();
|
||||||
|
@ -167,7 +167,7 @@ void CCDisplayFactory::createSpriteDisplay(CCBone *bone, CCDecorativeDisplay *de
|
||||||
|
|
||||||
decoDisplay->setDisplay(skin);
|
decoDisplay->setDisplay(skin);
|
||||||
|
|
||||||
#if ENABLE_PHYSICS_DETECT
|
#if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
if (textureData && textureData->contourDataList.count() > 0)
|
if (textureData && textureData->contourDataList.count() > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,11 @@ void CCDisplayManager::removeDisplay(int index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CCArray *CCDisplayManager::getDecorativeDisplayList()
|
||||||
|
{
|
||||||
|
return m_pDecoDisplayList;
|
||||||
|
}
|
||||||
|
|
||||||
void CCDisplayManager::changeDisplayByIndex(int index, bool force)
|
void CCDisplayManager::changeDisplayByIndex(int index, bool force)
|
||||||
{
|
{
|
||||||
CCAssert( (m_pDecoDisplayList ? index < (int)m_pDecoDisplayList->count() : true), "the _index value is out of range");
|
CCAssert( (m_pDecoDisplayList ? index < (int)m_pDecoDisplayList->count() : true), "the _index value is out of range");
|
||||||
|
@ -177,7 +182,7 @@ void CCDisplayManager::changeDisplayByIndex(int index, bool force)
|
||||||
|
|
||||||
void CCDisplayManager::setCurrentDecorativeDisplay(CCDecorativeDisplay *decoDisplay)
|
void CCDisplayManager::setCurrentDecorativeDisplay(CCDecorativeDisplay *decoDisplay)
|
||||||
{
|
{
|
||||||
#if ENABLE_PHYSICS_DETECT
|
#if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
if (m_pCurrentDecoDisplay && m_pCurrentDecoDisplay->getColliderDetector())
|
if (m_pCurrentDecoDisplay && m_pCurrentDecoDisplay->getColliderDetector())
|
||||||
{
|
{
|
||||||
m_pCurrentDecoDisplay->getColliderDetector()->setActive(false);
|
m_pCurrentDecoDisplay->getColliderDetector()->setActive(false);
|
||||||
|
@ -186,7 +191,7 @@ void CCDisplayManager::setCurrentDecorativeDisplay(CCDecorativeDisplay *decoDisp
|
||||||
|
|
||||||
m_pCurrentDecoDisplay = decoDisplay;
|
m_pCurrentDecoDisplay = decoDisplay;
|
||||||
|
|
||||||
#if ENABLE_PHYSICS_DETECT
|
#if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
if (m_pCurrentDecoDisplay && m_pCurrentDecoDisplay->getColliderDetector())
|
if (m_pCurrentDecoDisplay && m_pCurrentDecoDisplay->getColliderDetector())
|
||||||
{
|
{
|
||||||
m_pCurrentDecoDisplay->getColliderDetector()->setActive(true);
|
m_pCurrentDecoDisplay->getColliderDetector()->setActive(true);
|
||||||
|
|
|
@ -24,6 +24,7 @@ THE SOFTWARE.
|
||||||
|
|
||||||
#include "CCSkin.h"
|
#include "CCSkin.h"
|
||||||
#include "../utils/CCTransformHelp.h"
|
#include "../utils/CCTransformHelp.h"
|
||||||
|
#include "../CCArmature.h"
|
||||||
|
|
||||||
NS_CC_EXT_BEGIN
|
NS_CC_EXT_BEGIN
|
||||||
|
|
||||||
|
@ -149,4 +150,9 @@ void CCSkin::updateTransform()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CCAffineTransform CCSkin::nodeToWorldTransform()
|
||||||
|
{
|
||||||
|
return CCAffineTransformConcat(m_sTransform, m_pBone->getArmature()->nodeToWorldTransform());
|
||||||
|
}
|
||||||
|
|
||||||
NS_CC_EXT_END
|
NS_CC_EXT_END
|
||||||
|
|
|
@ -42,6 +42,8 @@ public:
|
||||||
void updateArmatureTransform();
|
void updateArmatureTransform();
|
||||||
void updateTransform();
|
void updateTransform();
|
||||||
|
|
||||||
|
CCAffineTransform nodeToWorldTransform();
|
||||||
|
|
||||||
CC_PROPERTY_PASS_BY_REF(CCBaseData, m_sSkinData, SkinData);
|
CC_PROPERTY_PASS_BY_REF(CCBaseData, m_sSkinData, SkinData);
|
||||||
CC_SYNTHESIZE(CCBone *, m_pBone, Bone);
|
CC_SYNTHESIZE(CCBone *, m_pBone, Bone);
|
||||||
|
|
||||||
|
|
|
@ -1,254 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
|
|
||||||
*
|
|
||||||
* iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
|
|
||||||
*
|
|
||||||
* 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 "GLES-Render.h"
|
|
||||||
#include "cocos2d.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
NS_CC_EXT_BEGIN
|
|
||||||
|
|
||||||
USING_NS_CC;
|
|
||||||
|
|
||||||
GLESDebugDraw::GLESDebugDraw()
|
|
||||||
: mRatio( 1.0f )
|
|
||||||
{
|
|
||||||
this->initShader();
|
|
||||||
}
|
|
||||||
|
|
||||||
GLESDebugDraw::GLESDebugDraw( float32 ratio )
|
|
||||||
: mRatio( ratio )
|
|
||||||
{
|
|
||||||
this->initShader();
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLESDebugDraw::initShader( void )
|
|
||||||
{
|
|
||||||
mShaderProgram = CCShaderCache::sharedShaderCache()->programForKey(kCCShader_Position_uColor);
|
|
||||||
|
|
||||||
mColorLocation = glGetUniformLocation( mShaderProgram->getProgram(), "u_color");
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLESDebugDraw::DrawPolygon(const b2Vec2* old_vertices, int vertexCount, const b2Color& color)
|
|
||||||
{
|
|
||||||
mShaderProgram->use();
|
|
||||||
mShaderProgram->setUniformsForBuiltins();
|
|
||||||
|
|
||||||
b2Vec2* vertices = new b2Vec2[vertexCount];
|
|
||||||
for( int i=0;i<vertexCount;i++)
|
|
||||||
{
|
|
||||||
vertices[i] = old_vertices[i];
|
|
||||||
vertices[i] *= mRatio;
|
|
||||||
}
|
|
||||||
|
|
||||||
mShaderProgram->setUniformLocationWith4f(mColorLocation, color.r, color.g, color.b, 1);
|
|
||||||
|
|
||||||
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
|
|
||||||
glDrawArrays(GL_LINE_LOOP, 0, vertexCount);
|
|
||||||
|
|
||||||
CC_INCREMENT_GL_DRAWS(1);
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
|
|
||||||
delete[] vertices;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLESDebugDraw::DrawSolidPolygon(const b2Vec2* old_vertices, int vertexCount, const b2Color& color)
|
|
||||||
{
|
|
||||||
mShaderProgram->use();
|
|
||||||
mShaderProgram->setUniformsForBuiltins();
|
|
||||||
|
|
||||||
b2Vec2* vertices = new b2Vec2[vertexCount];
|
|
||||||
for( int i=0;i<vertexCount;i++) {
|
|
||||||
vertices[i] = old_vertices[i];
|
|
||||||
vertices[i] *= mRatio;
|
|
||||||
}
|
|
||||||
|
|
||||||
mShaderProgram->setUniformLocationWith4f(mColorLocation, color.r*0.5f, color.g*0.5f, color.b*0.5f, 0.5f);
|
|
||||||
|
|
||||||
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
|
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLE_FAN, 0, vertexCount);
|
|
||||||
|
|
||||||
mShaderProgram->setUniformLocationWith4f(mColorLocation, color.r, color.g, color.b, 1);
|
|
||||||
glDrawArrays(GL_LINE_LOOP, 0, vertexCount);
|
|
||||||
|
|
||||||
CC_INCREMENT_GL_DRAWS(2);
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
|
|
||||||
delete[] vertices;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLESDebugDraw::DrawCircle(const b2Vec2& center, float32 radius, const b2Color& color)
|
|
||||||
{
|
|
||||||
mShaderProgram->use();
|
|
||||||
mShaderProgram->setUniformsForBuiltins();
|
|
||||||
|
|
||||||
const float32 k_segments = 16.0f;
|
|
||||||
int vertexCount=16;
|
|
||||||
const float32 k_increment = 2.0f * b2_pi / k_segments;
|
|
||||||
float32 theta = 0.0f;
|
|
||||||
|
|
||||||
GLfloat* glVertices = new GLfloat[vertexCount*2];
|
|
||||||
for (int i = 0; i < k_segments; ++i)
|
|
||||||
{
|
|
||||||
b2Vec2 v = center + radius * b2Vec2(cosf(theta), sinf(theta));
|
|
||||||
glVertices[i*2]=v.x * mRatio;
|
|
||||||
glVertices[i*2+1]=v.y * mRatio;
|
|
||||||
theta += k_increment;
|
|
||||||
}
|
|
||||||
|
|
||||||
mShaderProgram->setUniformLocationWith4f(mColorLocation, color.r, color.g, color.b, 1);
|
|
||||||
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, glVertices);
|
|
||||||
|
|
||||||
glDrawArrays(GL_LINE_LOOP, 0, vertexCount);
|
|
||||||
|
|
||||||
CC_INCREMENT_GL_DRAWS(1);
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
|
|
||||||
delete[] glVertices;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLESDebugDraw::DrawSolidCircle(const b2Vec2& center, float32 radius, const b2Vec2& axis, const b2Color& color)
|
|
||||||
{
|
|
||||||
mShaderProgram->use();
|
|
||||||
mShaderProgram->setUniformsForBuiltins();
|
|
||||||
|
|
||||||
const float32 k_segments = 16.0f;
|
|
||||||
int vertexCount=16;
|
|
||||||
const float32 k_increment = 2.0f * b2_pi / k_segments;
|
|
||||||
float32 theta = 0.0f;
|
|
||||||
|
|
||||||
GLfloat* glVertices = new GLfloat[vertexCount*2];
|
|
||||||
for (int i = 0; i < k_segments; ++i)
|
|
||||||
{
|
|
||||||
b2Vec2 v = center + radius * b2Vec2(cosf(theta), sinf(theta));
|
|
||||||
glVertices[i*2]=v.x * mRatio;
|
|
||||||
glVertices[i*2+1]=v.y * mRatio;
|
|
||||||
theta += k_increment;
|
|
||||||
}
|
|
||||||
|
|
||||||
mShaderProgram->setUniformLocationWith4f(mColorLocation, color.r*0.5f, color.g*0.5f, color.b*0.5f, 0.5f);
|
|
||||||
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, glVertices);
|
|
||||||
glDrawArrays(GL_TRIANGLE_FAN, 0, vertexCount);
|
|
||||||
|
|
||||||
|
|
||||||
mShaderProgram->setUniformLocationWith4f(mColorLocation, color.r, color.g, color.b, 1);
|
|
||||||
glDrawArrays(GL_LINE_LOOP, 0, vertexCount);
|
|
||||||
|
|
||||||
// Draw the axis line
|
|
||||||
DrawSegment(center,center+radius*axis,color);
|
|
||||||
|
|
||||||
CC_INCREMENT_GL_DRAWS(2);
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
|
|
||||||
delete[] glVertices;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLESDebugDraw::DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color)
|
|
||||||
{
|
|
||||||
mShaderProgram->use();
|
|
||||||
mShaderProgram->setUniformsForBuiltins();
|
|
||||||
|
|
||||||
mShaderProgram->setUniformLocationWith4f(mColorLocation, color.r, color.g, color.b, 1);
|
|
||||||
|
|
||||||
GLfloat glVertices[] =
|
|
||||||
{
|
|
||||||
p1.x * mRatio, p1.y * mRatio,
|
|
||||||
p2.x * mRatio, p2.y * mRatio
|
|
||||||
};
|
|
||||||
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, glVertices);
|
|
||||||
|
|
||||||
glDrawArrays(GL_LINES, 0, 2);
|
|
||||||
|
|
||||||
CC_INCREMENT_GL_DRAWS(1);
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLESDebugDraw::DrawTransform(const b2Transform& xf)
|
|
||||||
{
|
|
||||||
b2Vec2 p1 = xf.p, p2;
|
|
||||||
const float32 k_axisScale = 0.4f;
|
|
||||||
p2 = p1 + k_axisScale * xf.q.GetXAxis();
|
|
||||||
DrawSegment(p1, p2, b2Color(1,0,0));
|
|
||||||
|
|
||||||
p2 = p1 + k_axisScale * xf.q.GetYAxis();
|
|
||||||
DrawSegment(p1,p2,b2Color(0,1,0));
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLESDebugDraw::DrawPoint(const b2Vec2& p, float32 size, const b2Color& color)
|
|
||||||
{
|
|
||||||
mShaderProgram->use();
|
|
||||||
mShaderProgram->setUniformsForBuiltins();
|
|
||||||
|
|
||||||
mShaderProgram->setUniformLocationWith4f(mColorLocation, color.r, color.g, color.b, 1);
|
|
||||||
|
|
||||||
// glPointSize(size);
|
|
||||||
|
|
||||||
GLfloat glVertices[] = {
|
|
||||||
p.x * mRatio, p.y * mRatio
|
|
||||||
};
|
|
||||||
|
|
||||||
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, glVertices);
|
|
||||||
|
|
||||||
glDrawArrays(GL_POINTS, 0, 1);
|
|
||||||
// glPointSize(1.0f);
|
|
||||||
|
|
||||||
CC_INCREMENT_GL_DRAWS(1);
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLESDebugDraw::DrawString(int x, int y, const char *string, ...)
|
|
||||||
{
|
|
||||||
// NSLog(@"DrawString: unsupported: %s", string);
|
|
||||||
//printf(string);
|
|
||||||
/* Unsupported as yet. Could replace with bitmap font renderer at a later date */
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLESDebugDraw::DrawAABB(b2AABB* aabb, const b2Color& color)
|
|
||||||
{
|
|
||||||
mShaderProgram->use();
|
|
||||||
mShaderProgram->setUniformsForBuiltins();
|
|
||||||
|
|
||||||
mShaderProgram->setUniformLocationWith4f(mColorLocation, color.r, color.g, color.b, 1);
|
|
||||||
|
|
||||||
GLfloat glVertices[] = {
|
|
||||||
aabb->lowerBound.x * mRatio, aabb->lowerBound.y * mRatio,
|
|
||||||
aabb->upperBound.x * mRatio, aabb->lowerBound.y * mRatio,
|
|
||||||
aabb->upperBound.x * mRatio, aabb->upperBound.y * mRatio,
|
|
||||||
aabb->lowerBound.x * mRatio, aabb->upperBound.y * mRatio
|
|
||||||
};
|
|
||||||
|
|
||||||
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, glVertices);
|
|
||||||
glDrawArrays(GL_LINE_LOOP, 0, 8);
|
|
||||||
|
|
||||||
CC_INCREMENT_GL_DRAWS(1);
|
|
||||||
|
|
||||||
CHECK_GL_ERROR_DEBUG();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_CC_EXT_END
|
|
|
@ -1,67 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
|
|
||||||
*
|
|
||||||
* iPhone port by Simon Oliver - http://www.simonoliver.com - http://www.handcircus.com
|
|
||||||
*
|
|
||||||
* 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 RENDER_H
|
|
||||||
#define RENDER_H
|
|
||||||
|
|
||||||
#include "Box2D/Box2D.h"
|
|
||||||
#include "cocos2d.h"
|
|
||||||
#include "ExtensionMacros.h"
|
|
||||||
|
|
||||||
struct b2AABB;
|
|
||||||
|
|
||||||
NS_CC_EXT_BEGIN
|
|
||||||
|
|
||||||
// This class implements debug drawing callbacks that are invoked
|
|
||||||
// inside b2World::Step.
|
|
||||||
class GLESDebugDraw : public b2Draw
|
|
||||||
{
|
|
||||||
float32 mRatio;
|
|
||||||
cocos2d::CCGLProgram* mShaderProgram;
|
|
||||||
GLint mColorLocation;
|
|
||||||
|
|
||||||
void initShader( void );
|
|
||||||
public:
|
|
||||||
GLESDebugDraw();
|
|
||||||
|
|
||||||
GLESDebugDraw( float32 ratio );
|
|
||||||
|
|
||||||
virtual void DrawPolygon(const b2Vec2* vertices, int vertexCount, const b2Color& color);
|
|
||||||
|
|
||||||
virtual void DrawSolidPolygon(const b2Vec2* vertices, int vertexCount, const b2Color& color);
|
|
||||||
|
|
||||||
virtual void DrawCircle(const b2Vec2& center, float32 radius, const b2Color& color);
|
|
||||||
|
|
||||||
virtual void DrawSolidCircle(const b2Vec2& center, float32 radius, const b2Vec2& axis, const b2Color& color);
|
|
||||||
|
|
||||||
virtual void DrawSegment(const b2Vec2& p1, const b2Vec2& p2, const b2Color& color);
|
|
||||||
|
|
||||||
virtual void DrawTransform(const b2Transform& xf);
|
|
||||||
|
|
||||||
virtual void DrawPoint(const b2Vec2& p, float32 size, const b2Color& color);
|
|
||||||
|
|
||||||
virtual void DrawString(int x, int y, const char* string, ...);
|
|
||||||
|
|
||||||
virtual void DrawAABB(b2AABB* aabb, const b2Color& color);
|
|
||||||
};
|
|
||||||
|
|
||||||
NS_CC_EXT_END
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -23,9 +23,15 @@ THE SOFTWARE.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "CCColliderDetector.h"
|
#include "CCColliderDetector.h"
|
||||||
#include "CCPhysicsWorld.h"
|
|
||||||
#include "../CCBone.h"
|
#include "../CCBone.h"
|
||||||
|
#include "../utils/CCTransformHelp.h"
|
||||||
|
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
#include "Box2D/Box2D.h"
|
#include "Box2D/Box2D.h"
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
#include "chipmunk.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
NS_CC_EXT_BEGIN
|
NS_CC_EXT_BEGIN
|
||||||
|
|
||||||
|
@ -56,20 +62,15 @@ CCColliderDetector *CCColliderDetector::create(CCBone *bone)
|
||||||
CCColliderDetector::CCColliderDetector()
|
CCColliderDetector::CCColliderDetector()
|
||||||
: m_pColliderBodyList(NULL)
|
: m_pColliderBodyList(NULL)
|
||||||
{
|
{
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
m_pB2Body = NULL;
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
m_pCPBody = NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
CCColliderDetector::~CCColliderDetector()
|
CCColliderDetector::~CCColliderDetector()
|
||||||
{
|
{
|
||||||
CCObject *object = NULL;
|
|
||||||
CCARRAY_FOREACH(m_pColliderBodyList, object)
|
|
||||||
{
|
|
||||||
ColliderBody *colliderBody = (ColliderBody *)object;
|
|
||||||
|
|
||||||
b2Body *body = colliderBody->getB2Body();
|
|
||||||
CCPhysicsWorld::sharedPhysicsWorld()->getNoGravityWorld()->DestroyBody(body);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
m_pColliderBodyList->removeAllObjects();
|
m_pColliderBodyList->removeAllObjects();
|
||||||
CC_SAFE_DELETE(m_pColliderBodyList);
|
CC_SAFE_DELETE(m_pColliderBodyList);
|
||||||
}
|
}
|
||||||
|
@ -93,38 +94,7 @@ bool CCColliderDetector::init(CCBone *bone)
|
||||||
|
|
||||||
void CCColliderDetector::addContourData(CCContourData *contourData)
|
void CCColliderDetector::addContourData(CCContourData *contourData)
|
||||||
{
|
{
|
||||||
const CCArray *array = &contourData->vertexList;
|
ColliderBody *colliderBody = new ColliderBody(contourData);
|
||||||
CCObject *object = NULL;
|
|
||||||
|
|
||||||
b2Vec2 *b2bv = new b2Vec2[contourData->vertexList.count()];
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
CCARRAY_FOREACH(array, object)
|
|
||||||
{
|
|
||||||
CCContourVertex2 *v = (CCContourVertex2 *)object;
|
|
||||||
b2bv[i].Set(v->x / PT_RATIO, v->y / PT_RATIO);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
b2PolygonShape polygon;
|
|
||||||
polygon.Set(b2bv, contourData->vertexList.count());
|
|
||||||
|
|
||||||
CC_SAFE_DELETE(b2bv);
|
|
||||||
|
|
||||||
b2FixtureDef fixtureDef;
|
|
||||||
fixtureDef.shape = &polygon;
|
|
||||||
fixtureDef.density = 10.0f;
|
|
||||||
fixtureDef.isSensor = true;
|
|
||||||
|
|
||||||
b2BodyDef bodyDef;
|
|
||||||
bodyDef.type = b2_dynamicBody;
|
|
||||||
bodyDef.position = b2Vec2(0.0f, 0.0f);
|
|
||||||
bodyDef.userData = m_pBone;
|
|
||||||
|
|
||||||
b2Body *body = CCPhysicsWorld::sharedPhysicsWorld()->getNoGravityWorld()->CreateBody(&bodyDef);
|
|
||||||
body->CreateFixture(&fixtureDef);
|
|
||||||
|
|
||||||
ColliderBody *colliderBody = new ColliderBody(body, contourData);
|
|
||||||
m_pColliderBodyList->addObject(colliderBody);
|
m_pColliderBodyList->addObject(colliderBody);
|
||||||
colliderBody->release();
|
colliderBody->release();
|
||||||
}
|
}
|
||||||
|
@ -148,26 +118,35 @@ void CCColliderDetector::removeAll()
|
||||||
m_pColliderBodyList->removeAllObjects();
|
m_pColliderBodyList->removeAllObjects();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCColliderDetector::setColliderFilter(b2Filter &filter)
|
|
||||||
{
|
|
||||||
CCObject *object = NULL;
|
|
||||||
CCARRAY_FOREACH(m_pColliderBodyList, object)
|
|
||||||
{
|
|
||||||
ColliderBody *colliderBody = (ColliderBody *)object;
|
|
||||||
colliderBody->getB2Body()->GetFixtureList()->SetFilterData(filter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCColliderDetector::setActive(bool active)
|
void CCColliderDetector::setActive(bool active)
|
||||||
{
|
{
|
||||||
CCObject *object = NULL;
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
CCARRAY_FOREACH(m_pColliderBodyList, object)
|
if (m_pB2Body)
|
||||||
{
|
{
|
||||||
ColliderBody *colliderBody = (ColliderBody *)object;
|
m_pB2Body->SetActive(active);
|
||||||
colliderBody->getB2Body()->SetActive(active);
|
}
|
||||||
}
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
if (m_pCPBody)
|
||||||
|
{
|
||||||
|
if (active)
|
||||||
|
{
|
||||||
|
cpBodyActivate(m_pCPBody);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cpBodySleep(m_pCPBody);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CCArray *CCColliderDetector::getColliderBodyList()
|
||||||
|
{
|
||||||
|
return m_pColliderBodyList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
CCPoint helpPoint;
|
CCPoint helpPoint;
|
||||||
|
|
||||||
void CCColliderDetector::updateTransform(CCAffineTransform &t)
|
void CCColliderDetector::updateTransform(CCAffineTransform &t)
|
||||||
|
@ -176,31 +155,144 @@ void CCColliderDetector::updateTransform(CCAffineTransform &t)
|
||||||
CCARRAY_FOREACH(m_pColliderBodyList, object)
|
CCARRAY_FOREACH(m_pColliderBodyList, object)
|
||||||
{
|
{
|
||||||
ColliderBody *colliderBody = (ColliderBody *)object;
|
ColliderBody *colliderBody = (ColliderBody *)object;
|
||||||
|
|
||||||
CCContourData *contourData = colliderBody->getContourData();
|
CCContourData *contourData = colliderBody->getContourData();
|
||||||
b2Body *body = colliderBody->getB2Body();
|
|
||||||
|
|
||||||
b2PolygonShape *shape = (b2PolygonShape *)body->GetFixtureList()->GetShape();
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
b2PolygonShape *shape = NULL;
|
||||||
|
if (m_pB2Body != NULL)
|
||||||
|
{
|
||||||
|
shape = (b2PolygonShape *)colliderBody->getB2Fixture()->GetShape();
|
||||||
|
}
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
cpPolyShape *shape = NULL;
|
||||||
|
if (m_pCPBody != NULL)
|
||||||
|
{
|
||||||
|
shape = (cpPolyShape *)colliderBody->getShape();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//! update every vertex
|
//! update every vertex
|
||||||
const CCArray *array = &contourData->vertexList;
|
const CCArray *array = &contourData->vertexList;
|
||||||
CCObject *object = NULL;
|
CCObject *object = NULL;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
CCARRAY_FOREACH(array, object)
|
CCARRAY_FOREACH(array, object)
|
||||||
{
|
{
|
||||||
CCContourVertex2 *cv = (CCContourVertex2 *)object;
|
CCContourVertex2 *cv = (CCContourVertex2 *)object;
|
||||||
b2Vec2 &bv = shape->m_vertices[i];
|
|
||||||
|
|
||||||
helpPoint.setPoint(cv->x, cv->y);
|
helpPoint.setPoint(cv->x, cv->y);
|
||||||
helpPoint = CCPointApplyAffineTransform(helpPoint, t);
|
helpPoint = CCPointApplyAffineTransform(helpPoint, t);
|
||||||
|
|
||||||
bv.Set(helpPoint.x / PT_RATIO, helpPoint.y / PT_RATIO);
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
if (shape != NULL)
|
||||||
|
{
|
||||||
|
b2Vec2 &bv = shape->m_vertices[i];
|
||||||
|
bv.Set(helpPoint.x / PT_RATIO, helpPoint.y / PT_RATIO);
|
||||||
|
}
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
if (shape != NULL)
|
||||||
|
{
|
||||||
|
cpVect v ;
|
||||||
|
v.x = helpPoint.x;
|
||||||
|
v.y = helpPoint.y;
|
||||||
|
shape->tVerts[i] = shape->verts[i] = v;
|
||||||
|
|
||||||
i++;
|
cpVect b = shape->verts[(i+1)%shape->numVerts];
|
||||||
}
|
cpVect n = cpvnormalize(cpvperp(cpvsub(b, shape->verts[i])));
|
||||||
|
|
||||||
|
shape->planes[i].n = n;
|
||||||
|
shape->planes[i].d = cpvdot(n, shape->verts[i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
|
||||||
|
void CCColliderDetector::setB2Body(b2Body *pBody)
|
||||||
|
{
|
||||||
|
m_pB2Body = pBody;
|
||||||
|
m_pB2Body->SetUserData(m_pBone);
|
||||||
|
|
||||||
|
CCObject *object = NULL;
|
||||||
|
CCARRAY_FOREACH(m_pColliderBodyList, object)
|
||||||
|
{
|
||||||
|
ColliderBody *colliderBody = (ColliderBody *)object;
|
||||||
|
|
||||||
|
CCContourData *contourData = colliderBody->getContourData();
|
||||||
|
const CCArray *array = &contourData->vertexList;
|
||||||
|
CCObject *object = NULL;
|
||||||
|
|
||||||
|
b2Vec2 *b2bv = new b2Vec2[contourData->vertexList.count()];
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
CCARRAY_FOREACH(array, object)
|
||||||
|
{
|
||||||
|
CCContourVertex2 *v = (CCContourVertex2 *)object;
|
||||||
|
b2bv[i].Set(v->x / PT_RATIO, v->y / PT_RATIO);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
b2PolygonShape polygon;
|
||||||
|
polygon.Set(b2bv, contourData->vertexList.count());
|
||||||
|
|
||||||
|
CC_SAFE_DELETE(b2bv);
|
||||||
|
|
||||||
|
b2FixtureDef fixtureDef;
|
||||||
|
fixtureDef.shape = &polygon;
|
||||||
|
fixtureDef.isSensor = true;
|
||||||
|
|
||||||
|
b2Fixture *fixture = m_pB2Body->CreateFixture(&fixtureDef);
|
||||||
|
colliderBody->setB2Fixture(fixture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
b2Body *CCColliderDetector::getB2Body()
|
||||||
|
{
|
||||||
|
return m_pB2Body;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
void CCColliderDetector::setCPBody(cpBody *pBody)
|
||||||
|
{
|
||||||
|
m_pCPBody = pBody;
|
||||||
|
|
||||||
|
CCObject *object = NULL;
|
||||||
|
CCARRAY_FOREACH(m_pColliderBodyList, object)
|
||||||
|
{
|
||||||
|
ColliderBody *colliderBody = (ColliderBody *)object;
|
||||||
|
|
||||||
|
CCContourData *contourData = colliderBody->getContourData();
|
||||||
|
const CCArray *array = &contourData->vertexList;
|
||||||
|
CCObject *object = NULL;
|
||||||
|
|
||||||
|
int num = contourData->vertexList.count();
|
||||||
|
CCContourVertex2 **vs = (CCContourVertex2 **)contourData->vertexList.data->arr;
|
||||||
|
cpVect *verts = new cpVect[num];
|
||||||
|
for (int i=0; i<num; i++)
|
||||||
|
{
|
||||||
|
verts[num-1-i].x = vs[i]->x;
|
||||||
|
verts[num-1-i].y = vs[i]->y;
|
||||||
|
}
|
||||||
|
|
||||||
|
cpShape* shape = cpPolyShapeNew(m_pCPBody, num, verts, cpvzero);
|
||||||
|
shape->sensor = true;
|
||||||
|
shape->data = m_pBone;
|
||||||
|
cpSpaceAddShape(m_pCPBody->space_private, shape);
|
||||||
|
|
||||||
|
colliderBody->setShape(shape);
|
||||||
|
|
||||||
|
delete []verts;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cpBody *CCColliderDetector::getCPBody()
|
||||||
|
{
|
||||||
|
return m_pCPBody;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
NS_CC_EXT_END
|
NS_CC_EXT_END
|
||||||
|
|
|
@ -28,8 +28,16 @@ THE SOFTWARE.
|
||||||
#include "../utils/CCArmatureDefine.h"
|
#include "../utils/CCArmatureDefine.h"
|
||||||
#include "../datas/CCDatas.h"
|
#include "../datas/CCDatas.h"
|
||||||
|
|
||||||
|
#ifndef PT_RATIO
|
||||||
|
#define PT_RATIO 32
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
class b2Body;
|
class b2Body;
|
||||||
struct b2Filter;
|
class b2Fixture;
|
||||||
|
|
||||||
|
struct cpBody;
|
||||||
|
struct cpShape;
|
||||||
|
|
||||||
NS_CC_EXT_BEGIN
|
NS_CC_EXT_BEGIN
|
||||||
|
|
||||||
|
@ -38,24 +46,36 @@ class CCBone;
|
||||||
class ColliderBody : public CCObject
|
class ColliderBody : public CCObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ColliderBody(b2Body *b2b, CCContourData *contourData)
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
:m_pB2b(NULL)
|
ColliderBody(CCContourData *contourData)
|
||||||
,m_pContourData(NULL)
|
: m_pFixture(NULL)
|
||||||
|
, m_pContourData(contourData)
|
||||||
{
|
{
|
||||||
this->m_pB2b = b2b;
|
|
||||||
this->m_pContourData = contourData;
|
|
||||||
CC_SAFE_RETAIN(m_pContourData);
|
CC_SAFE_RETAIN(m_pContourData);
|
||||||
}
|
}
|
||||||
|
private:
|
||||||
|
CC_SYNTHESIZE(b2Fixture*, m_pFixture, B2Fixture)
|
||||||
|
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
|
||||||
|
ColliderBody(CCContourData *contourData)
|
||||||
|
: m_pShape(NULL)
|
||||||
|
, m_pContourData(contourData)
|
||||||
|
{
|
||||||
|
CC_SAFE_RETAIN(m_pContourData);
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
CC_SYNTHESIZE(cpShape*, m_pShape, Shape)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
~ColliderBody()
|
~ColliderBody()
|
||||||
{
|
{
|
||||||
CC_SAFE_RELEASE(m_pContourData);
|
CC_SAFE_RELEASE(m_pContourData);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline b2Body *getB2Body()
|
|
||||||
{
|
|
||||||
return m_pB2b;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline CCContourData *getContourData()
|
inline CCContourData *getContourData()
|
||||||
{
|
{
|
||||||
|
@ -63,7 +83,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
b2Body *m_pB2b;
|
|
||||||
CCContourData *m_pContourData;
|
CCContourData *m_pContourData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -90,14 +109,19 @@ public:
|
||||||
|
|
||||||
void updateTransform(CCAffineTransform &t);
|
void updateTransform(CCAffineTransform &t);
|
||||||
|
|
||||||
void setColliderFilter(b2Filter &filter);
|
void setActive(bool active);
|
||||||
|
|
||||||
void setActive(bool active);
|
CCArray *getColliderBodyList();
|
||||||
private:
|
|
||||||
CCArray *m_pColliderBodyList;
|
protected:
|
||||||
|
CCArray *m_pColliderBodyList;
|
||||||
CC_SYNTHESIZE(CCBone*, m_pBone, Bone);
|
CC_SYNTHESIZE(CCBone*, m_pBone, Bone);
|
||||||
|
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
CC_PROPERTY(b2Body*, m_pB2Body, B2Body);
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
CC_PROPERTY(cpBody*, m_pCPBody, CPBody);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
NS_CC_EXT_END
|
NS_CC_EXT_END
|
||||||
|
|
|
@ -1,165 +0,0 @@
|
||||||
/****************************************************************************
|
|
||||||
Copyright (c) 2013 cocos2d-x.org
|
|
||||||
|
|
||||||
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 "CCPhysicsWorld.h"
|
|
||||||
#include "../utils/CCArmatureDefine.h"
|
|
||||||
#include "Box2D/Box2D.h"
|
|
||||||
#include "../external_tool/GLES-Render.h"
|
|
||||||
|
|
||||||
NS_CC_EXT_BEGIN
|
|
||||||
|
|
||||||
|
|
||||||
class Contact
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
b2Fixture *fixtureA;
|
|
||||||
b2Fixture *fixtureB;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ContactListener : public b2ContactListener
|
|
||||||
{
|
|
||||||
//! Callbacks for derived classes.
|
|
||||||
virtual void BeginContact(b2Contact *contact)
|
|
||||||
{
|
|
||||||
if (contact)
|
|
||||||
{
|
|
||||||
Contact c;
|
|
||||||
c.fixtureA = contact->GetFixtureA();
|
|
||||||
c.fixtureB = contact->GetFixtureB();
|
|
||||||
|
|
||||||
contact_list.push_back(c);
|
|
||||||
}
|
|
||||||
B2_NOT_USED(contact);
|
|
||||||
}
|
|
||||||
virtual void EndContact(b2Contact *contact)
|
|
||||||
{
|
|
||||||
contact_list.clear();
|
|
||||||
B2_NOT_USED(contact);
|
|
||||||
}
|
|
||||||
virtual void PreSolve(b2Contact *contact, const b2Manifold *oldManifold)
|
|
||||||
{
|
|
||||||
B2_NOT_USED(contact);
|
|
||||||
B2_NOT_USED(oldManifold);
|
|
||||||
}
|
|
||||||
virtual void PostSolve(const b2Contact *contact, const b2ContactImpulse *impulse)
|
|
||||||
{
|
|
||||||
B2_NOT_USED(contact);
|
|
||||||
B2_NOT_USED(impulse);
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
std::list<Contact> contact_list;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CCPhysicsWorld *CCPhysicsWorld::s_PhysicsWorld = NULL;
|
|
||||||
|
|
||||||
|
|
||||||
CCPhysicsWorld *CCPhysicsWorld::sharedPhysicsWorld()
|
|
||||||
{
|
|
||||||
if (s_PhysicsWorld == NULL)
|
|
||||||
{
|
|
||||||
s_PhysicsWorld = new CCPhysicsWorld();
|
|
||||||
s_PhysicsWorld->initNoGravityWorld();
|
|
||||||
}
|
|
||||||
|
|
||||||
return s_PhysicsWorld;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCPhysicsWorld::purgePhysicsWorld()
|
|
||||||
{
|
|
||||||
delete s_PhysicsWorld;
|
|
||||||
s_PhysicsWorld = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
CCPhysicsWorld::CCPhysicsWorld()
|
|
||||||
: m_pNoGravityWorld(NULL)
|
|
||||||
, m_pDebugDraw(NULL)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
CCPhysicsWorld::~CCPhysicsWorld()
|
|
||||||
{
|
|
||||||
CC_SAFE_DELETE(m_pDebugDraw);
|
|
||||||
CC_SAFE_DELETE(m_pNoGravityWorld);
|
|
||||||
CC_SAFE_DELETE(m_pContactListener);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCPhysicsWorld::initNoGravityWorld()
|
|
||||||
{
|
|
||||||
b2Vec2 noGravity(0, 0);
|
|
||||||
|
|
||||||
m_pNoGravityWorld = new b2World(noGravity);
|
|
||||||
m_pNoGravityWorld->SetAllowSleeping(true);
|
|
||||||
|
|
||||||
m_pContactListener = new ContactListener();
|
|
||||||
m_pNoGravityWorld->SetContactListener(m_pContactListener);
|
|
||||||
|
|
||||||
|
|
||||||
#if ENABLE_PHYSICS_DEBUG
|
|
||||||
m_pDebugDraw = new GLESDebugDraw( PT_RATIO );
|
|
||||||
m_pNoGravityWorld->SetDebugDraw(m_pDebugDraw);
|
|
||||||
|
|
||||||
uint32 flags = 0;
|
|
||||||
flags += b2Draw::e_shapeBit;
|
|
||||||
// flags += b2Draw::e_jointBit;
|
|
||||||
// flags += b2Draw::e_aabbBit;
|
|
||||||
// flags += b2Draw::e_pairBit;
|
|
||||||
// flags += b2Draw::e_centerOfMassBit;
|
|
||||||
m_pDebugDraw->SetFlags(flags);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
b2World *CCPhysicsWorld::getNoGravityWorld()
|
|
||||||
{
|
|
||||||
return m_pNoGravityWorld;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCPhysicsWorld::update(float dt)
|
|
||||||
{
|
|
||||||
m_pNoGravityWorld->Step(dt, 0, 0);
|
|
||||||
|
|
||||||
for (std::list<Contact>::iterator it = m_pContactListener->contact_list.begin(); it != m_pContactListener->contact_list.end(); ++it)
|
|
||||||
{
|
|
||||||
Contact &contact = *it;
|
|
||||||
|
|
||||||
b2Body *b2a = contact.fixtureA->GetBody();
|
|
||||||
b2Body *b2b = contact.fixtureB->GetBody();
|
|
||||||
|
|
||||||
CCBone *ba = (CCBone *)b2a->GetUserData();
|
|
||||||
CCBone *bb = (CCBone *)b2b->GetUserData();
|
|
||||||
|
|
||||||
BoneColliderSignal.emit(ba, bb);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCPhysicsWorld::drawDebug()
|
|
||||||
{
|
|
||||||
m_pNoGravityWorld->DrawDebugData();
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_CC_EXT_END
|
|
|
@ -1,80 +0,0 @@
|
||||||
/****************************************************************************
|
|
||||||
Copyright (c) 2013 cocos2d-x.org
|
|
||||||
|
|
||||||
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 __CCPHYSICSWORLD_H__
|
|
||||||
#define __CCPHYSICSWORLD_H__
|
|
||||||
|
|
||||||
#include "../utils/CCArmatureDefine.h"
|
|
||||||
#include "../CCBone.h"
|
|
||||||
#include "../external_tool/sigslot.h"
|
|
||||||
|
|
||||||
#include <list>
|
|
||||||
using std::list;
|
|
||||||
|
|
||||||
#ifndef PT_RATIO
|
|
||||||
#define PT_RATIO 32
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct b2Manifold;
|
|
||||||
struct b2ContactImpulse;
|
|
||||||
class b2Fixture;
|
|
||||||
class b2Contact;
|
|
||||||
class b2World;
|
|
||||||
|
|
||||||
NS_CC_EXT_BEGIN
|
|
||||||
|
|
||||||
class ContactListener;
|
|
||||||
class GLESDebugDraw;
|
|
||||||
|
|
||||||
class CCPhysicsWorld
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
static CCPhysicsWorld *sharedPhysicsWorld();
|
|
||||||
static void purgePhysicsWorld();
|
|
||||||
|
|
||||||
void initNoGravityWorld();
|
|
||||||
private:
|
|
||||||
CCPhysicsWorld();
|
|
||||||
~CCPhysicsWorld();
|
|
||||||
|
|
||||||
private:
|
|
||||||
static CCPhysicsWorld *s_PhysicsWorld;
|
|
||||||
|
|
||||||
b2World *m_pNoGravityWorld;
|
|
||||||
|
|
||||||
ContactListener *m_pContactListener;
|
|
||||||
|
|
||||||
GLESDebugDraw *m_pDebugDraw;
|
|
||||||
public:
|
|
||||||
void update(float dt);
|
|
||||||
void drawDebug();
|
|
||||||
|
|
||||||
b2World *getNoGravityWorld();
|
|
||||||
|
|
||||||
sigslot::signal2<CCBone *, CCBone *> BoneColliderSignal;
|
|
||||||
};
|
|
||||||
|
|
||||||
NS_CC_EXT_END
|
|
||||||
|
|
||||||
#endif/*__CCPHYSICSWORLD_H__*/
|
|
|
@ -27,7 +27,6 @@ THE SOFTWARE.
|
||||||
#include "CCTransformHelp.h"
|
#include "CCTransformHelp.h"
|
||||||
#include "CCDataReaderHelper.h"
|
#include "CCDataReaderHelper.h"
|
||||||
#include "CCSpriteFrameCacheHelper.h"
|
#include "CCSpriteFrameCacheHelper.h"
|
||||||
#include "../physics/CCPhysicsWorld.h"
|
|
||||||
|
|
||||||
|
|
||||||
NS_CC_EXT_BEGIN
|
NS_CC_EXT_BEGIN
|
||||||
|
@ -67,8 +66,6 @@ CCArmatureDataManager::~CCArmatureDataManager(void)
|
||||||
void CCArmatureDataManager::purgeArmatureSystem()
|
void CCArmatureDataManager::purgeArmatureSystem()
|
||||||
{
|
{
|
||||||
CCSpriteFrameCacheHelper::purgeSpriteFrameCacheHelper();
|
CCSpriteFrameCacheHelper::purgeSpriteFrameCacheHelper();
|
||||||
CCPhysicsWorld::purgePhysicsWorld();
|
|
||||||
|
|
||||||
CC_SAFE_RELEASE_NULL(s_sharedArmatureDataManager);
|
CC_SAFE_RELEASE_NULL(s_sharedArmatureDataManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,15 +31,14 @@ THE SOFTWARE.
|
||||||
#include "ExtensionMacros.h"
|
#include "ExtensionMacros.h"
|
||||||
|
|
||||||
|
|
||||||
#ifndef ENABLE_PHYSICS_DEBUG
|
#ifndef ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
#define ENABLE_PHYSICS_DEBUG 1
|
#define ENABLE_PHYSICS_BOX2D_DETECT 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ENABLE_PHYSICS_DETECT
|
#ifndef ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
#define ENABLE_PHYSICS_DETECT 1
|
#define ENABLE_PHYSICS_CHIPMUNK_DETECT 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define MAX_VERTEXZ_VALUE 5000000.0f
|
#define MAX_VERTEXZ_VALUE 5000000.0f
|
||||||
#define ARMATURE_MAX_CHILD 50.0f
|
#define ARMATURE_MAX_CHILD 50.0f
|
||||||
#define ARMATURE_MAX_ZORDER 100
|
#define ARMATURE_MAX_ZORDER 100
|
||||||
|
|
|
@ -50,7 +50,6 @@
|
||||||
#include "CCArmature/display/CCDisplayManager.h"
|
#include "CCArmature/display/CCDisplayManager.h"
|
||||||
#include "CCArmature/display/CCSkin.h"
|
#include "CCArmature/display/CCSkin.h"
|
||||||
#include "CCArmature/physics/CCColliderDetector.h"
|
#include "CCArmature/physics/CCColliderDetector.h"
|
||||||
#include "CCArmature/physics/CCPhysicsWorld.h"
|
|
||||||
#include "CCArmature/utils/CCArmatureDataManager.h"
|
#include "CCArmature/utils/CCArmatureDataManager.h"
|
||||||
#include "CCArmature/utils/CCConstValue.h"
|
#include "CCArmature/utils/CCConstValue.h"
|
||||||
#include "CCArmature/utils/CCDataReaderHelper.h"
|
#include "CCArmature/utils/CCDataReaderHelper.h"
|
||||||
|
|
|
@ -104,13 +104,11 @@
|
||||||
<ClCompile Include="..\CCArmature\display\CCDisplayManager.cpp" />
|
<ClCompile Include="..\CCArmature\display\CCDisplayManager.cpp" />
|
||||||
<ClCompile Include="..\CCArmature\display\CCSkin.cpp" />
|
<ClCompile Include="..\CCArmature\display\CCSkin.cpp" />
|
||||||
<ClCompile Include="..\CCArmature\external_tool\CCTexture2DMutable.cpp" />
|
<ClCompile Include="..\CCArmature\external_tool\CCTexture2DMutable.cpp" />
|
||||||
<ClCompile Include="..\CCArmature\external_tool\GLES-Render.cpp" />
|
|
||||||
<ClCompile Include="..\CCArmature\external_tool\Json\CSContentJsonDictionary.cpp" />
|
<ClCompile Include="..\CCArmature\external_tool\Json\CSContentJsonDictionary.cpp" />
|
||||||
<ClCompile Include="..\CCArmature\external_tool\Json\lib_json\json_reader.cpp" />
|
<ClCompile Include="..\CCArmature\external_tool\Json\lib_json\json_reader.cpp" />
|
||||||
<ClCompile Include="..\CCArmature\external_tool\Json\lib_json\json_value.cpp" />
|
<ClCompile Include="..\CCArmature\external_tool\Json\lib_json\json_value.cpp" />
|
||||||
<ClCompile Include="..\CCArmature\external_tool\Json\lib_json\json_writer.cpp" />
|
<ClCompile Include="..\CCArmature\external_tool\Json\lib_json\json_writer.cpp" />
|
||||||
<ClCompile Include="..\CCArmature\physics\CCColliderDetector.cpp" />
|
<ClCompile Include="..\CCArmature\physics\CCColliderDetector.cpp" />
|
||||||
<ClCompile Include="..\CCArmature\physics\CCPhysicsWorld.cpp" />
|
|
||||||
<ClCompile Include="..\CCArmature\utils\CCArmatureDataManager.cpp" />
|
<ClCompile Include="..\CCArmature\utils\CCArmatureDataManager.cpp" />
|
||||||
<ClCompile Include="..\CCArmature\utils\CCDataReaderHelper.cpp" />
|
<ClCompile Include="..\CCArmature\utils\CCDataReaderHelper.cpp" />
|
||||||
<ClCompile Include="..\CCArmature\utils\CCSpriteFrameCacheHelper.cpp" />
|
<ClCompile Include="..\CCArmature\utils\CCSpriteFrameCacheHelper.cpp" />
|
||||||
|
@ -205,7 +203,6 @@
|
||||||
<ClInclude Include="..\CCArmature\display\CCDisplayManager.h" />
|
<ClInclude Include="..\CCArmature\display\CCDisplayManager.h" />
|
||||||
<ClInclude Include="..\CCArmature\display\CCSkin.h" />
|
<ClInclude Include="..\CCArmature\display\CCSkin.h" />
|
||||||
<ClInclude Include="..\CCArmature\external_tool\CCTexture2DMutable.h" />
|
<ClInclude Include="..\CCArmature\external_tool\CCTexture2DMutable.h" />
|
||||||
<ClInclude Include="..\CCArmature\external_tool\GLES-Render.h" />
|
|
||||||
<ClInclude Include="..\CCArmature\external_tool\Json\CSContentJsonDictionary.h" />
|
<ClInclude Include="..\CCArmature\external_tool\Json\CSContentJsonDictionary.h" />
|
||||||
<ClInclude Include="..\CCArmature\external_tool\Json\lib_json\autolink.h" />
|
<ClInclude Include="..\CCArmature\external_tool\Json\lib_json\autolink.h" />
|
||||||
<ClInclude Include="..\CCArmature\external_tool\Json\lib_json\config.h" />
|
<ClInclude Include="..\CCArmature\external_tool\Json\lib_json\config.h" />
|
||||||
|
@ -219,7 +216,6 @@
|
||||||
<ClInclude Include="..\CCArmature\external_tool\Json\lib_json\writer.h" />
|
<ClInclude Include="..\CCArmature\external_tool\Json\lib_json\writer.h" />
|
||||||
<ClInclude Include="..\CCArmature\external_tool\sigslot.h" />
|
<ClInclude Include="..\CCArmature\external_tool\sigslot.h" />
|
||||||
<ClInclude Include="..\CCArmature\physics\CCColliderDetector.h" />
|
<ClInclude Include="..\CCArmature\physics\CCColliderDetector.h" />
|
||||||
<ClInclude Include="..\CCArmature\physics\CCPhysicsWorld.h" />
|
|
||||||
<ClInclude Include="..\CCArmature\utils\CCArmatureDataManager.h" />
|
<ClInclude Include="..\CCArmature\utils\CCArmatureDataManager.h" />
|
||||||
<ClInclude Include="..\CCArmature\utils\CCArmatureDefine.h" />
|
<ClInclude Include="..\CCArmature\utils\CCArmatureDefine.h" />
|
||||||
<ClInclude Include="..\CCArmature\utils\CCConstValue.h" />
|
<ClInclude Include="..\CCArmature\utils\CCConstValue.h" />
|
||||||
|
|
|
@ -255,18 +255,12 @@
|
||||||
<ClCompile Include="..\CCArmature\physics\CCColliderDetector.cpp">
|
<ClCompile Include="..\CCArmature\physics\CCColliderDetector.cpp">
|
||||||
<Filter>CCArmature\physics</Filter>
|
<Filter>CCArmature\physics</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\CCArmature\physics\CCPhysicsWorld.cpp">
|
|
||||||
<Filter>CCArmature\physics</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CCArmature\CCArmature.cpp">
|
<ClCompile Include="..\CCArmature\CCArmature.cpp">
|
||||||
<Filter>CCArmature</Filter>
|
<Filter>CCArmature</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\CCArmature\CCBone.cpp">
|
<ClCompile Include="..\CCArmature\CCBone.cpp">
|
||||||
<Filter>CCArmature</Filter>
|
<Filter>CCArmature</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\CCArmature\external_tool\GLES-Render.cpp">
|
|
||||||
<Filter>CCArmature\external_tool</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\CCArmature\external_tool\Json\CSContentJsonDictionary.cpp">
|
<ClCompile Include="..\CCArmature\external_tool\Json\CSContentJsonDictionary.cpp">
|
||||||
<Filter>CCArmature\external_tool\Json</Filter>
|
<Filter>CCArmature\external_tool\Json</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -589,18 +583,12 @@
|
||||||
<ClInclude Include="..\CCArmature\physics\CCColliderDetector.h">
|
<ClInclude Include="..\CCArmature\physics\CCColliderDetector.h">
|
||||||
<Filter>CCArmature\physics</Filter>
|
<Filter>CCArmature\physics</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\CCArmature\physics\CCPhysicsWorld.h">
|
|
||||||
<Filter>CCArmature\physics</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CCArmature\CCArmature.h">
|
<ClInclude Include="..\CCArmature\CCArmature.h">
|
||||||
<Filter>CCArmature</Filter>
|
<Filter>CCArmature</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\CCArmature\CCBone.h">
|
<ClInclude Include="..\CCArmature\CCBone.h">
|
||||||
<Filter>CCArmature</Filter>
|
<Filter>CCArmature</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\CCArmature\external_tool\GLES-Render.h">
|
|
||||||
<Filter>CCArmature\external_tool</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\CCArmature\external_tool\Json\CSContentJsonDictionary.h">
|
<ClInclude Include="..\CCArmature\external_tool\Json\CSContentJsonDictionary.h">
|
||||||
<Filter>CCArmature\external_tool\Json</Filter>
|
<Filter>CCArmature\external_tool\Json</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "ArmatureScene.h"
|
#include "ArmatureScene.h"
|
||||||
#include "../../testResource.h"
|
#include "../../testResource.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace cocos2d;
|
using namespace cocos2d;
|
||||||
using namespace cocos2d::extension;
|
using namespace cocos2d::extension;
|
||||||
|
|
||||||
|
@ -32,8 +33,8 @@ CCLayer *CreateLayer(int index)
|
||||||
pLayer = new TestParticleDisplay(); break;
|
pLayer = new TestParticleDisplay(); break;
|
||||||
case TEST_USE_DIFFERENT_PICTURE:
|
case TEST_USE_DIFFERENT_PICTURE:
|
||||||
pLayer = new TestUseMutiplePicture(); break;
|
pLayer = new TestUseMutiplePicture(); break;
|
||||||
case TEST_BOX2D_DETECTOR:
|
case TEST_BCOLLIDER_DETECTOR:
|
||||||
pLayer = new TestBox2DDetector(); break;
|
pLayer = new TestColliderDetector(); break;
|
||||||
case TEST_BOUDINGBOX:
|
case TEST_BOUDINGBOX:
|
||||||
pLayer = new TestBoundingBox(); break;
|
pLayer = new TestBoundingBox(); break;
|
||||||
case TEST_ANCHORPOINT:
|
case TEST_ANCHORPOINT:
|
||||||
|
@ -98,13 +99,13 @@ ArmatureTestScene::ArmatureTestScene(bool bPortrait)
|
||||||
void ArmatureTestScene::runThisTest()
|
void ArmatureTestScene::runThisTest()
|
||||||
{
|
{
|
||||||
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/TestBone0.png", "armature/TestBone0.plist", "armature/TestBone.json");
|
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/TestBone0.png", "armature/TestBone0.plist", "armature/TestBone.json");
|
||||||
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/Cowboy0.png", "armature/Cowboy0.plist", "armature/Cowboy.json");
|
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/Cowboy0.png", "armature/Cowboy0.plist", "armature/Cowboy.ExportJson");
|
||||||
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/knight.png", "armature/knight.plist", "armature/knight.xml");
|
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/knight.png", "armature/knight.plist", "armature/knight.xml");
|
||||||
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/weapon.png", "armature/weapon.plist", "armature/weapon.xml");
|
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/weapon.png", "armature/weapon.plist", "armature/weapon.xml");
|
||||||
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/robot.png", "armature/robot.plist", "armature/robot.xml");
|
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/robot.png", "armature/robot.plist", "armature/robot.xml");
|
||||||
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/cyborg.png", "armature/cyborg.plist", "armature/cyborg.xml");
|
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/cyborg.png", "armature/cyborg.plist", "armature/cyborg.xml");
|
||||||
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/Dragon.png", "armature/Dragon.plist", "armature/Dragon.xml");
|
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("armature/Dragon.png", "armature/Dragon.plist", "armature/Dragon.xml");
|
||||||
|
|
||||||
s_nActionIdx = -1;
|
s_nActionIdx = -1;
|
||||||
addChild(NextTest());
|
addChild(NextTest());
|
||||||
|
|
||||||
|
@ -513,15 +514,121 @@ void TestUseMutiplePicture::registerWithTouchDispatcher()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void TestBox2DDetector::onEnter()
|
|
||||||
|
|
||||||
|
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
|
||||||
|
class Contact
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
b2Fixture *fixtureA;
|
||||||
|
b2Fixture *fixtureB;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ContactListener : public b2ContactListener
|
||||||
|
{
|
||||||
|
//! Callbacks for derived classes.
|
||||||
|
virtual void BeginContact(b2Contact *contact)
|
||||||
|
{
|
||||||
|
if (contact)
|
||||||
|
{
|
||||||
|
Contact c;
|
||||||
|
c.fixtureA = contact->GetFixtureA();
|
||||||
|
c.fixtureB = contact->GetFixtureB();
|
||||||
|
|
||||||
|
contact_list.push_back(c);
|
||||||
|
}
|
||||||
|
B2_NOT_USED(contact);
|
||||||
|
}
|
||||||
|
virtual void EndContact(b2Contact *contact)
|
||||||
|
{
|
||||||
|
contact_list.clear();
|
||||||
|
B2_NOT_USED(contact);
|
||||||
|
}
|
||||||
|
virtual void PreSolve(b2Contact *contact, const b2Manifold *oldManifold)
|
||||||
|
{
|
||||||
|
B2_NOT_USED(contact);
|
||||||
|
B2_NOT_USED(oldManifold);
|
||||||
|
}
|
||||||
|
virtual void PostSolve(const b2Contact *contact, const b2ContactImpulse *impulse)
|
||||||
|
{
|
||||||
|
B2_NOT_USED(contact);
|
||||||
|
B2_NOT_USED(impulse);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
std::list<Contact> contact_list;
|
||||||
|
};
|
||||||
|
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
|
||||||
|
enum ColliderType
|
||||||
|
{
|
||||||
|
eBulletTag,
|
||||||
|
eEnemyTag
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int TestColliderDetector::beginHit(cpArbiter *arb, cpSpace *space, void *unused)
|
||||||
|
{
|
||||||
|
CP_ARBITER_GET_SHAPES(arb, a, b);
|
||||||
|
|
||||||
|
CCBone *bone = (CCBone*)a->data;
|
||||||
|
bone->getArmature()->setVisible(false);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestColliderDetector::endHit(cpArbiter *arb, cpSpace *space, void *unused)
|
||||||
|
{
|
||||||
|
CP_ARBITER_GET_SHAPES(arb, a, b);
|
||||||
|
|
||||||
|
CCBone *bone = (CCBone*)a->data;
|
||||||
|
bone->getArmature()->setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestColliderDetector::destroyCPBody(cpBody *body)
|
||||||
|
{
|
||||||
|
cpShape *shape = body->shapeList_private;
|
||||||
|
while(shape)
|
||||||
|
{
|
||||||
|
cpShape *temp = shape->next_private;
|
||||||
|
|
||||||
|
cpSpaceRemoveShape(space, shape);
|
||||||
|
cpShapeFree(shape);
|
||||||
|
|
||||||
|
shape = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
cpSpaceRemoveBody(space, body);
|
||||||
|
cpBodyFree(body);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
TestColliderDetector::~TestColliderDetector()
|
||||||
|
{
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
CC_SAFE_DELETE(world);
|
||||||
|
CC_SAFE_DELETE(listener);
|
||||||
|
CC_SAFE_DELETE(debugDraw);
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
destroyCPBody(armature2->getCPBody());
|
||||||
|
destroyCPBody(bullet->getCPBody());
|
||||||
|
|
||||||
|
cpSpaceFree(space);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestColliderDetector::onEnter()
|
||||||
{
|
{
|
||||||
ArmatureTestLayer::onEnter();
|
ArmatureTestLayer::onEnter();
|
||||||
|
|
||||||
scheduleUpdate();
|
scheduleUpdate();
|
||||||
|
|
||||||
armature = cocos2d::extension::CCArmature::create("Cowboy");
|
armature = cocos2d::extension::CCArmature::create("Cowboy");
|
||||||
armature->getAnimation()->play("Fire");
|
armature->getAnimation()->play("FireWithoutBullet");
|
||||||
armature->getAnimation()->setAnimationScale(0.1f);
|
armature->getAnimation()->setAnimationScale(0.2f);
|
||||||
armature->setScaleX(-0.2f);
|
armature->setScaleX(-0.2f);
|
||||||
armature->setScaleY(0.2f);
|
armature->setScaleY(0.2f);
|
||||||
armature->setPosition(ccp(VisibleRect::left().x + 70, VisibleRect::left().y));
|
armature->setPosition(ccp(VisibleRect::left().x + 70, VisibleRect::left().y));
|
||||||
|
@ -534,36 +641,152 @@ void TestBox2DDetector::onEnter()
|
||||||
armature2->setPosition(ccp(VisibleRect::right().x - 30, VisibleRect::left().y));
|
armature2->setPosition(ccp(VisibleRect::right().x - 30, VisibleRect::left().y));
|
||||||
addChild(armature2);
|
addChild(armature2);
|
||||||
|
|
||||||
CCPhysicsWorld::sharedPhysicsWorld()->BoneColliderSignal.connect(this, &TestBox2DDetector::onHit);
|
bullet = CCPhysicsSprite::createWithSpriteFrameName("25.png");
|
||||||
|
addChild(bullet);
|
||||||
|
|
||||||
|
initWorld();
|
||||||
}
|
}
|
||||||
std::string TestBox2DDetector::title()
|
std::string TestColliderDetector::title()
|
||||||
{
|
{
|
||||||
return "Test Box2D Detector";
|
return "Test Box2D Detector";
|
||||||
}
|
}
|
||||||
void TestBox2DDetector::draw()
|
void TestColliderDetector::draw()
|
||||||
{
|
{
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
|
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
|
||||||
|
|
||||||
kmGLPushMatrix();
|
kmGLPushMatrix();
|
||||||
|
world->DrawDebugData();
|
||||||
CCPhysicsWorld::sharedPhysicsWorld()->drawDebug();
|
|
||||||
|
|
||||||
kmGLPopMatrix();
|
kmGLPopMatrix();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
void TestBox2DDetector::update(float delta)
|
void TestColliderDetector::update(float delta)
|
||||||
{
|
{
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
armature2->setVisible(true);
|
armature2->setVisible(true);
|
||||||
CCPhysicsWorld::sharedPhysicsWorld()->update(delta);
|
#endif
|
||||||
|
|
||||||
|
if (armature->getAnimation()->getCurrentFrameIndex() == 9)
|
||||||
|
{
|
||||||
|
CCPoint p = armature->getBone("Layer126")->getDisplayRenderNode()->convertToWorldSpaceAR(ccp(0, 0));
|
||||||
|
bullet->setPosition(ccp(p.x + 60, p.y));
|
||||||
|
|
||||||
|
bullet->stopAllActions();
|
||||||
|
bullet->runAction(CCMoveBy::create(1.5f, ccp(350, 0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
world->Step(delta, 0, 0);
|
||||||
|
|
||||||
|
for (std::list<Contact>::iterator it = listener->contact_list.begin(); it != listener->contact_list.end(); ++it)
|
||||||
|
{
|
||||||
|
Contact &contact = *it;
|
||||||
|
|
||||||
|
b2Body *b2a = contact.fixtureA->GetBody();
|
||||||
|
b2Body *b2b = contact.fixtureB->GetBody();
|
||||||
|
|
||||||
|
CCBone *ba = (CCBone *)b2a->GetUserData();
|
||||||
|
CCBone *bb = (CCBone *)b2b->GetUserData();
|
||||||
|
|
||||||
|
bb->getArmature()->setVisible(false);
|
||||||
|
}
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
cpSpaceStep(space, delta);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
void TestBox2DDetector::onHit(cocos2d::extension::CCBone *bone, cocos2d::extension::CCBone *bone2)
|
void TestColliderDetector::initWorld()
|
||||||
{
|
{
|
||||||
armature2->setVisible(false);
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
b2Vec2 noGravity(0, 0);
|
||||||
|
|
||||||
|
world = new b2World(noGravity);
|
||||||
|
world->SetAllowSleeping(true);
|
||||||
|
|
||||||
|
listener = new ContactListener();
|
||||||
|
world->SetContactListener(listener);
|
||||||
|
|
||||||
|
debugDraw = new GLESDebugDraw( PT_RATIO );
|
||||||
|
world->SetDebugDraw(debugDraw);
|
||||||
|
|
||||||
|
uint32 flags = 0;
|
||||||
|
flags += b2Draw::e_shapeBit;
|
||||||
|
// flags += b2Draw::e_jointBit;
|
||||||
|
// flags += b2Draw::e_aabbBit;
|
||||||
|
// flags += b2Draw::e_pairBit;
|
||||||
|
// flags += b2Draw::e_centerOfMassBit;
|
||||||
|
debugDraw->SetFlags(flags);
|
||||||
|
|
||||||
|
|
||||||
|
// Define the dynamic body.
|
||||||
|
//Set up a 1m squared box in the physics world
|
||||||
|
b2BodyDef bodyDef;
|
||||||
|
bodyDef.type = b2_dynamicBody;
|
||||||
|
|
||||||
|
b2Body *body = world->CreateBody(&bodyDef);
|
||||||
|
|
||||||
|
// Define another box shape for our dynamic body.
|
||||||
|
b2PolygonShape dynamicBox;
|
||||||
|
dynamicBox.SetAsBox(.5f, .5f);//These are mid points for our 1m box
|
||||||
|
|
||||||
|
// Define the dynamic body fixture.
|
||||||
|
b2FixtureDef fixtureDef;
|
||||||
|
fixtureDef.shape = &dynamicBox;
|
||||||
|
fixtureDef.isSensor = true;
|
||||||
|
body->CreateFixture(&fixtureDef);
|
||||||
|
|
||||||
|
|
||||||
|
bullet->setB2Body(body);
|
||||||
|
bullet->setPTMRatio(PT_RATIO);
|
||||||
|
bullet->setPosition( ccp( -100, -100) );
|
||||||
|
|
||||||
|
body = world->CreateBody(&bodyDef);
|
||||||
|
armature2->setB2Body(body);
|
||||||
|
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
space = cpSpaceNew();
|
||||||
|
space->gravity = cpv(0, 0);
|
||||||
|
|
||||||
|
// Physics debug layer
|
||||||
|
CCPhysicsDebugNode *debugLayer = CCPhysicsDebugNode::create(space);
|
||||||
|
this->addChild(debugLayer, INT_MAX);
|
||||||
|
|
||||||
|
CCSize size = bullet->getContentSize();
|
||||||
|
|
||||||
|
int num = 4;
|
||||||
|
cpVect verts[] = {
|
||||||
|
cpv(-size.width/2,-size.height/2),
|
||||||
|
cpv(-size.width/2,size.height/2),
|
||||||
|
cpv(size.width/2,size.height/2),
|
||||||
|
cpv(size.width/2,-size.height/2),
|
||||||
|
};
|
||||||
|
|
||||||
|
cpBody *body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero));
|
||||||
|
cpSpaceAddBody(space, body);
|
||||||
|
|
||||||
|
cpShape* shape = cpPolyShapeNew(body, num, verts, cpvzero);
|
||||||
|
shape->collision_type = eBulletTag;
|
||||||
|
cpSpaceAddShape(space, shape);
|
||||||
|
|
||||||
|
bullet->setCPBody(body);
|
||||||
|
|
||||||
|
body = cpBodyNew(INFINITY, INFINITY);
|
||||||
|
cpSpaceAddBody(space, body);
|
||||||
|
armature2->setCPBody(body);
|
||||||
|
|
||||||
|
shape = body->shapeList_private;
|
||||||
|
while(shape){
|
||||||
|
cpShape *next = shape->next_private;
|
||||||
|
shape->collision_type = eEnemyTag;
|
||||||
|
shape = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
cpSpaceAddCollisionHandler(space, eEnemyTag, eBulletTag, beginHit, NULL, NULL, endHit, NULL);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void TestBoundingBox::onEnter()
|
void TestBoundingBox::onEnter()
|
||||||
{
|
{
|
||||||
ArmatureTestLayer::onEnter();
|
ArmatureTestLayer::onEnter();
|
||||||
|
|
|
@ -6,6 +6,13 @@
|
||||||
#include "../../VisibleRect.h"
|
#include "../../VisibleRect.h"
|
||||||
#include "../../testBasic.h"
|
#include "../../testBasic.h"
|
||||||
|
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
#include "../../Box2DTestBed/GLES-Render.h"
|
||||||
|
#include "Box2D/Box2D.h"
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
#include "chipmunk.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
class ArmatureTestScene : public TestScene
|
class ArmatureTestScene : public TestScene
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -26,7 +33,7 @@ enum {
|
||||||
TEST_ANIMATION_EVENT,
|
TEST_ANIMATION_EVENT,
|
||||||
TEST_PARTICLE_DISPLAY,
|
TEST_PARTICLE_DISPLAY,
|
||||||
TEST_USE_DIFFERENT_PICTURE,
|
TEST_USE_DIFFERENT_PICTURE,
|
||||||
TEST_BOX2D_DETECTOR,
|
TEST_BCOLLIDER_DETECTOR,
|
||||||
TEST_BOUDINGBOX,
|
TEST_BOUDINGBOX,
|
||||||
TEST_ANCHORPOINT,
|
TEST_ANCHORPOINT,
|
||||||
TEST_ARMATURE_NESTING,
|
TEST_ARMATURE_NESTING,
|
||||||
|
@ -141,20 +148,43 @@ class TestParticleDisplay : public ArmatureTestLayer
|
||||||
cocos2d::extension::CCArmature *armature;
|
cocos2d::extension::CCArmature *armature;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TestBox2DDetector : public ArmatureTestLayer, public sigslot::has_slots<>
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
class ContactListener;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class TestColliderDetector : public ArmatureTestLayer, public sigslot::has_slots<>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
~TestColliderDetector();
|
||||||
|
|
||||||
virtual void onEnter();
|
virtual void onEnter();
|
||||||
virtual std::string title();
|
virtual std::string title();
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
virtual void update(float delta);
|
virtual void update(float delta);
|
||||||
|
|
||||||
void onHit(cocos2d::extension::CCBone *bone, cocos2d::extension::CCBone *bone2);
|
void initWorld();
|
||||||
|
|
||||||
cocos2d::extension::CCArmature *armature;
|
cocos2d::extension::CCArmature *armature;
|
||||||
cocos2d::extension::CCArmature *armature2;
|
cocos2d::extension::CCArmature *armature2;
|
||||||
|
|
||||||
|
cocos2d::extension::CCPhysicsSprite *bullet;
|
||||||
|
|
||||||
|
#if ENABLE_PHYSICS_BOX2D_DETECT
|
||||||
|
b2World *world;
|
||||||
|
ContactListener *listener;
|
||||||
|
GLESDebugDraw *debugDraw;
|
||||||
|
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
|
||||||
|
cpSpace *space;
|
||||||
|
|
||||||
|
static int beginHit(cpArbiter *arb, cpSpace *space, void *unused);
|
||||||
|
static void endHit(cpArbiter *arb, cpSpace *space, void *unused);
|
||||||
|
|
||||||
|
void destroyCPBody(cpBody *body);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class TestBoundingBox : public ArmatureTestLayer
|
class TestBoundingBox : public ArmatureTestLayer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
db891b84393bfe4b806f46bbf9c2879fa9438608
|
2b61d3b005b4076c5ff22a78a00822c0f0dc0875
|
Loading…
Reference in New Issue