/* "add" logic MUST only be on this method * If a class want's to extend the 'addChild' behavior it only needs * to override this method */ void Node::addChild(Node *child, int zOrder, int tag) { CCASSERT( child != nullptr, "Argument must be non-nil"); CCASSERT( child->_parent == nullptr, "child already added. It can't be added again"); if (_children.empty()) { this->childrenAlloc(); } this->insertChild(child, zOrder); #if CC_USE_PHYSICS if (child->getPhysicsBody() != nullptr) { child->getPhysicsBody()->setPosition(this->convertToWorldSpace(child->getPosition())); } for (Node* node = this->getParent(); node != nullptr; node = node->getParent()) { if (dynamic_cast<Scene*>(node) != nullptr) { (dynamic_cast<Scene*>(node))->addChildToPhysicsWorld(child); break; } } #endif child->_tag = tag; child->setParent(this); child->setOrderOfArrival(s_globalOrderOfArrival++); if( _running ) { child->onEnter(); // prevent onEnterTransitionDidFinish to be called twice when a node is added in onEnter if (_isTransitionFinished) { child->onEnterTransitionDidFinish(); } } if (_cascadeColorEnabled) { updateCascadeColor(); } if (_cascadeOpacityEnabled) { updateCascadeOpacity(); } }
/* "add" logic MUST only be on this method * If a class want's to extend the 'addChild' behavior it only needs * to override this method */ void ProtectedNode::addProtectedChild(Node *child, int zOrder, int tag) { CCASSERT( child != nullptr, "Argument must be non-nil"); CCASSERT( child->getParent() == nullptr, "child already added. It can't be added again"); if (_protectedChildren.empty()) { _protectedChildren.reserve(4); } this->insertProtectedChild(child, zOrder); child->setTag(tag); child->setParent(this); child->setOrderOfArrival(s_globalOrderOfArrival++); #if CC_USE_PHYSICS // Recursive add children with which have physics body. for (Node* node = this; node != nullptr; node = node->getParent()) { Layer* layer = dynamic_cast<Layer*>(node); if (layer != nullptr && layer->getPhysicsWorld() != nullptr) { layer->addChildToPhysicsWorld(child); break; } } #endif if( _running ) { child->onEnter(); // prevent onEnterTransitionDidFinish to be called twice when a node is added in onEnter if (_isTransitionFinished) { child->onEnterTransitionDidFinish(); } } if (_cascadeColorEnabled) { updateCascadeColor(); } if (_cascadeOpacityEnabled) { updateCascadeOpacity(); } }
void Node::setCascadeColorEnabled(bool cascadeColorEnabled) { if (_cascadeColorEnabled == cascadeColorEnabled) { return; } _cascadeColorEnabled = cascadeColorEnabled; if (_cascadeColorEnabled) { updateCascadeColor(); } else { disableCascadeColor(); } }
void Node::addChildHelper(Node* child, int localZOrder, int tag, const std::string &name, bool setTag) { if (child == nullptr) { return; } if (_children.empty()) { this->childrenAlloc(); } this->insertChild(child, localZOrder); if (setTag) child->setTag(tag); else child->setName(name); child->setParent(this); child->setOrderOfArrival(s_globalOrderOfArrival++); if( _running ) { child->onEnter(); // prevent onEnterTransitionDidFinish to be called twice when a node is added in onEnter if (_isTransitionFinished) { child->onEnterTransitionDidFinish(); } } if (_cascadeColorEnabled) { updateCascadeColor(); } if (_cascadeOpacityEnabled) { updateCascadeOpacity(); } }
/* "add" logic MUST only be on this method * If a class want's to extend the 'addChild' behavior it only needs * to override this method */ void ProtectedNode::addProtectedChild(Node *child, int zOrder, int tag) { CCASSERT( child != nullptr, "Argument must be non-nil"); CCASSERT( child->getParent() == nullptr, "child already added. It can't be added again"); if (_protectedChildren.empty()) { _protectedChildren.reserve(4); } this->insertProtectedChild(child, zOrder); child->setTag(tag); child->setParent(this); child->updateOrderOfArrival(); if( _running ) { child->onEnter(); // prevent onEnterTransitionDidFinish to be called twice when a node is added in onEnter if (_isTransitionFinished) { child->onEnterTransitionDidFinish(); } } if (_cascadeColorEnabled) { updateCascadeColor(); } if (_cascadeOpacityEnabled) { updateCascadeOpacity(); } }
void EncryptedTMXLayer::addChild(Node * child, int zOrder, int tag) { CCASSERT( child != nullptr, "Argument must be non-nil"); CCASSERT( child->getParent() == nullptr, "child already added. It can't be added again"); if (_children.empty()) { this->childrenAlloc(); } this->insertChild(child, zOrder); child->setTag(tag); child->setParent(this); child->setOrderOfArrival(s_globalOrderOfArrival++); if( _running ) { child->onEnter(); // prevent onEnterTransitionDidFinish to be called twice when a node is added in onEnter if (_isTransitionFinished) { child->onEnterTransitionDidFinish(); } } if (_cascadeColorEnabled) { updateCascadeColor(); } if (_cascadeOpacityEnabled) { updateCascadeOpacity(); } }
void Node::setColor(const Color3B& color) { _displayedColor = _realColor = color; updateCascadeColor(); }