void CS_DISPLAY_UPDATE(Bone *bone, DecorativeDisplay *decoDisplay, float dt, bool dirty) { CS_RETURN_IF(!decoDisplay); #if ENABLE_PHYSICS_DETECT if (dirty) { ColliderDetector *detector = decoDisplay->getColliderDetector(); if (detector) { CCAffineTransform t = CCAffineTransformConcat(bone->nodeToArmatureTransform(), bone->getArmature()->nodeToWorldTransform()); detector->updateTransform(t); } } #endif switch(decoDisplay->getDisplayData()->displayType) { case CS_DISPLAY_SPRITE: CS_DISPLAY_SPRITE_UPDATE(bone, decoDisplay, dt, dirty); break; case CS_DISPLAY_PARTICLE: CS_DISPLAY_PARTICLE_UPDATE(bone, decoDisplay, dt, dirty); break; case CS_DISPLAY_ARMATURE: CS_DISPLAY_ARMATURE_UPDATE(bone, decoDisplay, dt, dirty); break; case CS_DISPLAY_NODE: CS_DISPLAY_NODE_UPDATE(bone, decoDisplay, dt, dirty); break; default: break; } }
void DisplayFactory::updateDisplay(Bone *bone, float dt, bool dirty) { Node *display = bone->getDisplayRenderNode(); CS_RETURN_IF(!display); switch(bone->getDisplayRenderNodeType()) { case CS_DISPLAY_SPRITE: if (dirty) { static_cast<Skin*>(display)->updateArmatureTransform(); } break; case CS_DISPLAY_PARTICLE: updateParticleDisplay(bone, display, dt); break; case CS_DISPLAY_ARMATURE: updateArmatureDisplay(bone, display, dt); break; default: { Mat4 transform = bone->getNodeToArmatureTransform(); display->setAdditionalTransform(&transform); } break; } #if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT || ENABLE_PHYSICS_SAVE_CALCULATED_VERTEX if (dirty) { DecorativeDisplay *decoDisplay = bone->getDisplayManager()->getCurrentDecorativeDisplay(); ColliderDetector *detector = decoDisplay->getColliderDetector(); if (detector) { do { #if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT CC_BREAK_IF(!detector->getBody()); #endif Mat4 displayTransform = display->getNodeToParentTransform(); Vec2 anchorPoint = display->getAnchorPointInPoints(); anchorPoint = PointApplyTransform(anchorPoint, displayTransform); displayTransform.m[12] = anchorPoint.x; displayTransform.m[13] = anchorPoint.y; Mat4 t = TransformConcat( bone->getArmature()->getNodeToParentTransform(),displayTransform); detector->updateTransform(t); } while (0); } } #endif }
void CS_DISPLAY_ARMATURE_UPDATE(Bone *bone, DecorativeDisplay *decoDisplay, float dt, bool dirty) { CS_RETURN_IF(!dirty); Armature *armature = bone->getChildArmature(); if(armature) { armature->sortAllChildren(); armature->update(dt); } }
void DisplayFactory::updateArmatureDisplay(Bone *bone, DecorativeDisplay *decoDisplay, float dt, bool dirty) { CS_RETURN_IF(!dirty); Armature *armature = bone->getChildArmature(); if(armature) { armature->sortAllChildren(); armature->update(dt); } }
void CCDisplayFactory::updateDisplay(CCBone *bone, float dt, bool dirty) { CCNode *display = bone->getDisplayRenderNode(); CS_RETURN_IF(!display); switch(bone->getDisplayRenderNodeType()) { case CS_DISPLAY_SPRITE: if (dirty) { (static_cast<CCSkin*>(display))->updateArmatureTransform(); } break; case CS_DISPLAY_PARTICLE: updateParticleDisplay(bone, display, dt); break; case CS_DISPLAY_ARMATURE: updateArmatureDisplay(bone, display, dt); break; default: display->setAdditionalTransform(bone->nodeToArmatureTransform()); break; } #if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT || ENABLE_PHYSICS_SAVE_CALCULATED_VERTEX if (dirty) { CCDecorativeDisplay *decoDisplay = bone->getDisplayManager()->getCurrentDecorativeDisplay(); CCColliderDetector *detector = decoDisplay->getColliderDetector(); if (detector) { do { #if ENABLE_PHYSICS_BOX2D_DETECT CC_BREAK_IF(!detector->getBody()); #elif ENABLE_PHYSICS_CHIPMUNK_DETECT CC_BREAK_IF(!detector->getBody()); #endif CCAffineTransform displayTransform = display->nodeToParentTransform(); CCPoint anchorPoint = display->getAnchorPointInPoints(); anchorPoint = CCPointApplyAffineTransform(anchorPoint, displayTransform); displayTransform.tx = anchorPoint.x; displayTransform.ty = anchorPoint.y; CCAffineTransform t = CCAffineTransformConcat(displayTransform, bone->getArmature()->nodeToParentTransform()); detector->updateTransform(t); } while (0); } } #endif }
void CCDisplayFactory::updateDisplay(CCBone *bone, CCDecorativeDisplay *decoDisplay, float dt, bool dirty) { CS_RETURN_IF(!decoDisplay); #if ENABLE_PHYSICS_BOX2D_DETECT || ENABLE_PHYSICS_CHIPMUNK_DETECT if (dirty) { CCColliderDetector *detector = decoDisplay->getColliderDetector(); if (detector) { do { #if ENABLE_PHYSICS_BOX2D_DETECT CC_BREAK_IF(!detector->getBody()); #elif ENABLE_PHYSICS_CHIPMUNK_DETECT CC_BREAK_IF(!detector->getBody()); #endif CCNode *node = decoDisplay->getDisplay(); CCAffineTransform displayTransform = node->nodeToParentTransform(); CCPoint anchorPoint = node->getAnchorPointInPoints(); anchorPoint = CCPointApplyAffineTransform(anchorPoint, displayTransform); displayTransform.tx = anchorPoint.x; displayTransform.ty = anchorPoint.y; CCAffineTransform t = CCAffineTransformConcat(displayTransform, bone->getArmature()->nodeToParentTransform()); detector->updateTransform(t); } while (0); } } #endif CCNode *display = decoDisplay->getDisplay(); switch(decoDisplay->getDisplayData()->displayType) { case CS_DISPLAY_SPRITE: updateSpriteDisplay(bone, display, dt, dirty); break; case CS_DISPLAY_PARTICLE: updateParticleDisplay(bone, display, dt, dirty); break; case CS_DISPLAY_ARMATURE: updateArmatureDisplay(bone, display, dt, dirty); break; default: { display->setAdditionalTransform(bone->nodeToArmatureTransform()); } break; } }
void DisplayManager::initDisplayList(BoneData *boneData) { _decoDisplayList.clear(); CS_RETURN_IF(!boneData); for(auto& object : boneData->displayDataList) { DisplayData *displayData = static_cast<DisplayData *>(object); DecorativeDisplay *decoDisplay = DecorativeDisplay::create(); decoDisplay->setDisplayData(displayData); DisplayFactory::createDisplay(_bone, decoDisplay); _decoDisplayList.pushBack(decoDisplay); } }
void DisplayManager::initDisplayList(BoneData *boneData) { CC_SAFE_DELETE(_decoDisplayList); _decoDisplayList = Array::create(); _decoDisplayList->retain(); CS_RETURN_IF(!boneData); Object *object = NULL; Array *displayDataList = &boneData->displayDataList; CCARRAY_FOREACH(displayDataList, object) { DisplayData *displayData = (DisplayData *)object; DecorativeDisplay *decoDisplay = DecorativeDisplay::create(); decoDisplay->setDisplayData(displayData); DisplayFactory::createDisplay(_bone, decoDisplay); _decoDisplayList->addObject(decoDisplay); }
void CCDisplayManager::initDisplayList(CCBoneData *boneData) { CC_SAFE_DELETE(m_pDecoDisplayList); m_pDecoDisplayList = CCArray::create(); m_pDecoDisplayList->retain(); CS_RETURN_IF(!boneData); CCObject *object = NULL; CCArray *displayDataList = &boneData->displayDataList; CCARRAY_FOREACH(displayDataList, object) { CCDisplayData *displayData = (CCDisplayData *)object; CCDecorativeDisplay *decoDisplay = CCDecorativeDisplay::create(); decoDisplay->setDisplayData(displayData); CCDisplayFactory::createDisplay(m_pBone, decoDisplay); m_pDecoDisplayList->addObject(decoDisplay); }
Point DisplayManager::getAnchorPointInPoints() const { CS_RETURN_IF(!_displayRenderNode) Point(0, 0); return _displayRenderNode->getAnchorPointInPoints(); }
Rect DisplayManager::getBoundingBox() const { CS_RETURN_IF(!_displayRenderNode) Rect(0, 0, 0, 0); return _displayRenderNode->getBoundingBox(); }
Size DisplayManager::getContentSize() const { CS_RETURN_IF(!_displayRenderNode) Size(0, 0); return _displayRenderNode->getContentSize(); }
void CCDisplayFactory::updateSpriteDisplay(CCBone *bone, CCNode *display, float dt, bool dirty) { CS_RETURN_IF(!dirty); CCSkin *skin = (CCSkin *)display; skin->updateArmatureTransform(); }
Vector2 DisplayManager::getAnchorPoint() const { CS_RETURN_IF(!_displayRenderNode) Vector2(0, 0); return _displayRenderNode->getAnchorPoint(); }