123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- #include "RUQCoreLayer.h"
- #include "RUQCoreBtn.h"
- #include "RUUtils.h"
- NS_RU_BEGIN
- void QCoreLayerDelegate::completedAnimationSequenceNamed(const char *name, int seqId,int tag)
- {
- if (_completedAniCallBack) {
- _completedAniCallBack(string(name));
- }
- }
- void QCoreLayerDelegate::registerCompletedAniCallBack(std::function<void(string name)> callback)
- {
- _completedAniCallBack = callback;
- }
- int QCoreLayer::_count = 0;
- QCoreLayer * QCoreLayer::Layer(const string& file, bool batchReader)
- {
- auto *lib = redream::NodeLoaderLibrary::newDefaultNodeLoaderLibrary();
- lib->registerNodeLoader("QCoreLayer",QCoreLayerLoader::loader());
- lib->registerNodeLoader("QCoreBtn",QCoreBtnLoader::loader());
-
- redream::REDReader *reader = new redream::REDReader(lib);
- reader->setBatchNode(batchReader);
- QCoreLayer * node = dynamic_cast<QCoreLayer*>(reader->readNodeGraphFromFile(file.c_str()));
- node->setAnimManager(reader->getAnimationManagers());
- node->_ccbName = file;
- reader->release();
- return node;
- }
- QCoreLayer* QCoreLayer::LayerBatchReader(string file,unordered_set<string> plistSt){
- auto *lib = redream::NodeLoaderLibrary::newDefaultNodeLoaderLibrary();
- lib->registerNodeLoader("QCoreLayer",QCoreLayerLoader::loader());
- lib->registerNodeLoader("QCoreBtn",QCoreBtnLoader::loader());
- redream::REDReader *reader = new redream::REDReader(lib);
- reader->setPlist(plistSt,plistSt);
- reader->setBatchNode(true);
- QCoreLayer * node = dynamic_cast<QCoreLayer*>(reader->readNodeGraphFromFile(file.c_str()));
- node->setAnimManager(reader->getAnimationManagers());
- node->_ccbName = file;
- reader->release();
- return node;
- }
- QCoreLayer* QCoreLayer::LayerBatchReader(string file,unordered_set<string> plistSt,unordered_set<string> repleacPlistSt){
- auto *lib = redream::NodeLoaderLibrary::newDefaultNodeLoaderLibrary();
- lib->registerNodeLoader("QCoreLayer",QCoreLayerLoader::loader());
- lib->registerNodeLoader("QCoreBtn",QCoreBtnLoader::loader());
- redream::REDReader *reader = new redream::REDReader(lib);
- reader->setPlist(plistSt,repleacPlistSt);
- reader->setBatchNode(true);
- QCoreLayer * node = dynamic_cast<QCoreLayer*>(reader->readNodeGraphFromFile(file.c_str()));
- node->setAnimManager(reader->getAnimationManagers());
- node->_ccbName = file;
- reader->release();
- return node;
- }
- QCoreLayer::QCoreLayer()
- {
- _mAnimCtrl=nullptr;
- _count++;
- _aniDelegate = new QCoreLayerDelegate();
- _aniDelegate->autorelease();
- _aniDelegate->retain();
- }
- QCoreLayer::~QCoreLayer()
- {
- _aniDelegate->release();
- if (_mAnimCtrl!=nullptr) {
- _mAnimCtrl->setDelegate(nullptr);
- }
- CC_SAFE_RELEASE_NULL(_mAnimCtrl);
- _count--;
- }
- void QCoreLayer::onExit()
- {
- if (_cbOnExit != nullptr) {
- _cbOnExit(_ccbName, this);
- }
- Layer::onExit();
- }
- std::function<void(const string&, QCoreLayer*)> QCoreLayer::setCbOnExit(std::function<void(const string&, QCoreLayer*)> cb)
- {
- auto t = _cbOnExit;
- _cbOnExit = cb;
- return t;
- }
- void QCoreLayer::setCcbiName(const string& name)
- {
- _ccbName = name;
- }
- bool QCoreLayer::setCBSpriteName(string spriteName,string spriteFrameName)
- {
- if(!hasChileByName(spriteName)){
- return false;
- }
- Sprite* temp = getSprite(spriteName);
- if (temp!= nullptr) {
- SpriteFrame * spf = SpriteFrameCache::getInstance()->getSpriteFrameByName(spriteFrameName);
- if (spf == nullptr){
- Texture2D * texture = Director::getInstance()->getTextureCache()->addImage(spriteFrameName);
- if ( texture != nullptr ){
- Size sz = texture->getContentSize();
- spf = SpriteFrame::createWithTexture(texture, Rect(0, 0, sz.width, sz.height));
- }
- }
- if (spf != nullptr) {
- temp->setSpriteFrame(spf);
- return true;
- }
- }
- return false;
- }
- bool QCoreLayer::onAssignREDMemberVariable(cocos2d::Ref* pTarget, const char* pMemberVariableName, Node* pNode)
- {
- if (pTarget == this&&pNode != this&&strcmp(pMemberVariableName,"")!=0)
- {
- _mapChilden.insert(pair<string, Node*>(string(pMemberVariableName),pNode));
- return true;
- }
- // RED_MEMBERVARIABLEASSIGNER_GLUE_WEAK(this, "name", Node*, aaa::node_bind);
- return false;
- }
- SEL_MenuHandler QCoreLayer::onResolveREDCCMenuItemSelector(Ref * pTarget, const char * pSelectorName)
- {
-
- return nullptr;
- }
- Control::Handler QCoreLayer::onResolveREDCCControlSelector(Ref * pTarget, const char * pSelectorName)
- {
-
- return nullptr;
- }
- cocos2d::SEL_CallFuncN QCoreLayer::onResolveREDCCCallFuncSelector(cocos2d::Ref * pTarget, const char* pSelectorName) {
- // RED_SELECTORRESOLVER_CALLFUNC_GLUE(this, "onCallback1", TimelineCallbackTestLayer::onCallback1); //void(Node*)
- string selectorName(pSelectorName) ;
- string event = string("__CCCallFuncSelector__")+selectorName ;
- if(_timelineCallbackListeners.find(event) == _timelineCallbackListeners.end())
- {
- EventListenerCustom* ecl = EventListenerCustom::create(event, [this,pTarget,selectorName](EventCustom*){
- auto iter = _timelineCallbacks.find(selectorName) ;
- if(iter != _timelineCallbacks.end() && iter->second && pTarget == dynamic_cast<Ref*>(this))
- {
- iter->second();
- }
- });
- Node* node = dynamic_cast<Node*>(pTarget);
- if(node)
- {
- _director->getEventDispatcher()->addEventListenerWithSceneGraphPriority(ecl, node);
- _timelineCallbackListeners[event] = ecl;
- }
- }
- return CC_CALLFUNCN_SELECTOR(QCoreLayer::onTimeLineCallback);
- return nullptr;
- };
- bool QCoreLayer::onAssignREDCustomProperty(cocos2d::Ref* target, const char* memberVariableName, const cocos2d::Value& value) {
- _customProperties.insert(std::pair<std::string, Value>(std::string(memberVariableName), value));
- return true;
- }
- void QCoreLayer::onNodeLoaded(cocos2d::Node * node, redream::NodeLoader * nodeLoader)
- {
-
- }
- void QCoreLayer::registerCompletedAniCallBack(std::function<void(string name)> callback)
- {
- _aniDelegate->registerCompletedAniCallBack(callback);
- }
- void QCoreLayer::setAnimManager(redream::REDReader::REDAnimationManagerMapPtr map)
- {
- auto it = map->find(this);
- CC_SAFE_RELEASE_NULL(_mAnimCtrl);
- _mAnimCtrl = it->second;
- _mAnimCtrl->setDelegate(_aniDelegate);
- CC_SAFE_RETAIN(_mAnimCtrl);
-
-
- M_SNODE::iterator it1 = _mapChilden.begin();
- for (; it1 !=_mapChilden.end(); it1++) {
- QCoreLayer* cl = dynamic_cast<QCoreLayer*>(it1->second);
- if (cl != nullptr &&!(it1->first.empty()))
- {
- cl->setAnimManager(map);
- }
- }
- }
- float QCoreLayer::getAnimTime(std::string animName)
- {
- return _mAnimCtrl->getSequenceDuration(animName.c_str());
- }
- void QCoreLayer::playAnim(std::string animName, const std::function<void(float)> &cbFinishAnim, std::string cbScheduleKey)
- {
- CCASSERT(!animName.empty(), "时间线名字不能为空");
- _mAnimCtrl->runAnimationsForSequenceNamed(animName.c_str());
- if (cbFinishAnim) {
- float animTime = getAnimTime(animName);
- if (cbScheduleKey.empty()) {
- cbScheduleKey = "playAnim_" + Value(randomInt(1, 1000000)).asString();
- }
- scheduleOnce(cbFinishAnim, animTime, cbScheduleKey);
- }
- }
- void QCoreLayer::playAnimAndRemoveSelf(std::string animName)
- {
- _mAnimCtrl->runAnimationsForSequenceNamed(animName.c_str());
- registerCompletedAniCallBack([=](string timeLineName){
- if (timeLineName == animName) {
- this->removeFromParent();
- }
- });
- }
- bool QCoreLayer::isValidAnim(std::string animName)
- {
- bool ret = true;
- if (_mAnimCtrl->getSequenceId(animName.c_str()) == -1) {
- ret = false;
- }
-
- return ret;
- }
- void QCoreLayer::setAnimationSpeed(float tRate)
- {
- if(_mAnimCtrl){
- _mAnimCtrl->setAnimationSpeed(tRate);
- }else{
- CCAssert(false, "QCoreLayer setAnimationSpeed failed");
- }
- }
- Spawn* QCoreLayer::getNodeAniByName(std::string timeLineName, std::string nodeName,const Vec2& orginPos)
- {
- auto tNode = getByName(nodeName);
- return _mAnimCtrl->getNodeAniByName(timeLineName.c_str(),tNode,orginPos);
- }
- void QCoreLayer::changeToOtherParent(Node* newParent)
- {
- this->retain();
-
- std::function<void(const string&, QCoreLayer*)> cbBack = _cbOnExit;
- _cbOnExit = nullptr;
-
- this->removeFromParentAndCleanup(false);
-
- _cbOnExit = cbBack;
-
- newParent->addChild(this);
- this->release();
- }
- bool QCoreLayer::hasChileByName(std::string name)
- {
- auto iter = _mapChilden.find(name);
- if (iter != _mapChilden.end()) {
- return true;
- }else{
- return false;
- }
- }
- Node* QCoreLayer::getByName(std::string name)
- {
- // return _mapChilden[name];
- auto iter = _mapChilden.find(name);
- CCASSERT(iter != _mapChilden.end(), "ccb无这个变量???");
- return iter->second;
- }
- Sprite* QCoreLayer::getSprite(std::string name)
- {
- auto iter = _mapChilden.find(name);
- CCASSERT(iter != _mapChilden.end(), "ccb无这个变量???");
- return dynamic_cast<Sprite*>(iter->second);
- }
- Label* QCoreLayer::getLabel(std::string name)
- {
- // return (Label*)_mapChilden[name];
- auto iter = _mapChilden.find(name);
- CCASSERT(iter != _mapChilden.end(), "ccb无这个变量???");
- return dynamic_cast<Label*>(iter->second);
- }
- ParticleSystemQuad* QCoreLayer::getParticle(std::string name)
- {
- // return (ParticleSystemQuad*)_mapChilden[name];
- auto iter = _mapChilden.find(name);
- CCASSERT(iter != _mapChilden.end(), "ccb无这个变量???");
- return dynamic_cast<ParticleSystemQuad*>(iter->second);
- }
- ZMLCCParticleSystemQuad* QCoreLayer::getZMLCCParticle(std::string name)
- {
- // return (ParticleSystemQuad*)_mapChilden[name];
- auto iter = _mapChilden.find(name);
- CCASSERT(iter != _mapChilden.end(), "ccb无这个变量???");
- return dynamic_cast<ZMLCCParticleSystemQuad*>(iter->second);
- }
- RRP::RParticleSystem* QCoreLayer::getRParticle(std::string name)
- {
- auto iter = _mapChilden.find(name);
- CCASSERT(iter != _mapChilden.end(), "ccb无这个变量???");
- return dynamic_cast<RRP::RParticleSystem*>(iter->second);
- }
- QCoreLayer* QCoreLayer::getCoreLayer(std::string name)
- {
- // return (QCoreLayer*)_mapChilden[name];
- auto iter = _mapChilden.find(name);
- CCASSERT(iter != _mapChilden.end(), "ccb无这个变量???");
- return dynamic_cast<QCoreLayer*>(iter->second);
- }
- QCoreBtn* QCoreLayer::getCoreBtn(std::string name)
- {
- // return (QCoreLayer*)_mapChilden[name];
- auto iter = _mapChilden.find(name);
- CCASSERT(iter != _mapChilden.end(), "ccb无这个变量???");
- return dynamic_cast<QCoreBtn*>(iter->second);
- }
- Value QCoreLayer::getCustomeProperty(const char* name) {
- std::map<std::string, Value>::iterator iter = _customProperties.find(std::string(name));
- if (iter != _customProperties.end()) {
- return iter->second;
- }
- return Value();
- }
- void QCoreLayer::updateAnimSpeed(float speed)
- {
- if (speed > 0) {
- _mAnimCtrl->updateSpeed(speed);
- }
- }
- redream::NodeLoaderLibrary* QCoreLayer::sharedLibrary()
- {
- auto *lib = redream::NodeLoaderLibrary::newDefaultNodeLoaderLibrary();
- lib->registerNodeLoader("QCoreLayer", QCoreLayerLoader::loader());
- lib->registerNodeLoader("QCoreBtn", QCoreBtnLoader::loader());
-
- return lib;
- }
- static redream::NodeLoaderLibrary * s_globalLoaderLibary = nullptr;
- void QCoreLayer::registerNodeLoaderLibrary(tuple<const char *, redream::NodeLoader *> nodeLoaderArr)
- {
- if (s_globalLoaderLibary == nullptr)
- {
- redream::NodeLoaderLibrary * ccNodeLoaderLibrary = redream::NodeLoaderLibrary::newDefaultNodeLoaderLibrary();
- s_globalLoaderLibary = ccNodeLoaderLibrary;
- s_globalLoaderLibary->retain();
- }
- s_globalLoaderLibary->registerNodeLoader(get<0>(nodeLoaderArr), get<1>(nodeLoaderArr));
- }
- QCoreLayer * QCoreLayer::loadFromRED(string pREDFileName,Ref* owner)
- {
- redream::REDReader * ccbReader = new redream::REDReader(s_globalLoaderLibary);
- // ccbReader->autorelease();
- QCoreLayer * node = (QCoreLayer*)ccbReader->readNodeGraphFromFile(pREDFileName.c_str(), owner);
- if (node != nullptr) {
- node->setAnimManager(ccbReader->getAnimationManagers());
- node->_ccbName = pREDFileName;
- }
- ccbReader->release();
- return node;
- }
- void QCoreLayer::SmartScaleHeightNode(Node* layer, Size designSize)
- {
- Size frameSize = Director::getInstance()->getVisibleSize();
- Size contentSize = layer->getContentSize();
-
- if ((frameSize.height / frameSize.width) < (1136.0 / designSize.width)) {
- contentSize.width = frameSize.width;
- float targetScale = contentSize.width / designSize.width;
-
- layer->setScale(targetScale, 1);
- layer->setContentSize(contentSize);
- } else if ((frameSize.height / frameSize.width) > (1136.0 / designSize.width)) {
- contentSize.height = frameSize.height;
- float targetScale = contentSize.height / designSize.height;
-
- layer->setScale(1, targetScale);
- layer->setContentSize(contentSize);
- }
- }
- NS_RU_END
|