1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756 |
- /****************************************************************************
- Copyright (c) 2009-2010 Ricardo Quesada
- Copyright (c) 2010-2012 cocos2d-x.org
- Copyright (c) 2011 Zynga Inc.
- Copyright (c) 2013-2016 Chukong Technologies Inc.
- Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
- 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 "2d/CCTransition.h"
- #include "2d/CCActionInterval.h"
- #include "2d/CCActionInstant.h"
- #include "2d/CCActionEase.h"
- #include "2d/CCActionCamera.h"
- #include "2d/CCActionTiledGrid.h"
- #include "2d/CCActionGrid.h"
- #include "2d/CCLayer.h"
- #include "2d/CCRenderTexture.h"
- #include "2d/CCNodeGrid.h"
- #include "base/CCDirector.h"
- #include "base/CCEventDispatcher.h"
- NS_CC_BEGIN
- const unsigned int kSceneFade = 0xFADEFADE;
- TransitionScene::TransitionScene()
- : _inScene(nullptr)
- , _outScene(nullptr)
- , _duration(0.0f)
- , _isInSceneOnTop(false)
- , _isSendCleanupToScene(false)
- {
- }
- TransitionScene::~TransitionScene()
- {
- CC_SAFE_RELEASE(_inScene);
- CC_SAFE_RELEASE(_outScene);
- }
- TransitionScene * TransitionScene::create(float t, Scene *scene)
- {
- TransitionScene * pScene = new (std::nothrow) TransitionScene();
- if(pScene && pScene->initWithDuration(t,scene))
- {
- pScene->autorelease();
- return pScene;
- }
- CC_SAFE_DELETE(pScene);
- return nullptr;
- }
- bool TransitionScene::initWithDuration(float t, Scene *scene)
- {
- CCASSERT(scene != nullptr, "Argument scene must be non-nil");
- if (Scene::init())
- {
- _duration = t;
- // retain
- #if CC_ENABLE_GC_FOR_NATIVE_OBJECTS
- auto sEngine = ScriptEngineManager::getInstance()->getScriptEngine();
- if (sEngine)
- {
- sEngine->retainScriptObject(this, scene);
- }
- #endif // CC_ENABLE_GC_FOR_NATIVE_OBJECTS
- _inScene = scene;
- _inScene->retain();
- _outScene = Director::getInstance()->getRunningScene();
- if (_outScene == nullptr)
- {
- _outScene = Scene::create();
- // just change its state is running that can run actions later
- // issue: https://github.com/cocos2d/cocos2d-x/issues/17442
- _outScene->onEnter();
- }
- _outScene->retain();
- CCASSERT( _inScene != _outScene, "Incoming scene must be different from the outgoing scene" );
-
- sceneOrder();
- return true;
- }
- else
- {
- return false;
- }
- }
- void TransitionScene::sceneOrder()
- {
- _isInSceneOnTop = true;
- }
- void TransitionScene::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
- {
- Scene::draw(renderer, transform, flags);
- if( _isInSceneOnTop ) {
- _outScene->visit(renderer, transform, flags);
- _inScene->visit(renderer, transform, flags);
- } else {
- _inScene->visit(renderer, transform, flags);
- _outScene->visit(renderer, transform, flags);
- }
- }
- void TransitionScene::finish()
- {
- // clean up
- _inScene->setVisible(true);
- _inScene->setPosition(0,0);
- _inScene->setScale(1.0f);
- _inScene->setRotation(0.0f);
- _inScene->setAdditionalTransform(nullptr);
- _outScene->setVisible(false);
- _outScene->setPosition(0,0);
- _outScene->setScale(1.0f);
- _outScene->setRotation(0.0f);
- _outScene->setAdditionalTransform(nullptr);
- //[self schedule:@selector(setNewScene:) interval:0];
- this->schedule(CC_SCHEDULE_SELECTOR(TransitionScene::setNewScene), 0);
- }
- void TransitionScene::setNewScene(float /*dt*/)
- {
- this->unschedule(CC_SCHEDULE_SELECTOR(TransitionScene::setNewScene));
-
- // Before replacing, save the "send cleanup to scene"
- Director *director = Director::getInstance();
- _isSendCleanupToScene = director->isSendCleanupToScene();
-
- director->replaceScene(_inScene);
- #if CC_ENABLE_GC_FOR_NATIVE_OBJECTS
- auto sEngine = ScriptEngineManager::getInstance()->getScriptEngine();
- if (sEngine)
- {
- sEngine->releaseScriptObject(this, _inScene);
- }
- #endif // CC_ENABLE_GC_FOR_NATIVE_OBJECTS
-
- // issue #267
- _outScene->setVisible(true);
- }
- void TransitionScene::hideOutShowIn()
- {
- _inScene->setVisible(true);
- _outScene->setVisible(false);
- }
- // custom onEnter
- void TransitionScene::onEnter()
- {
- #if CC_ENABLE_SCRIPT_BINDING
- if (_scriptType == kScriptTypeJavascript)
- {
- if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnEnter))
- return;
- }
- #endif // #if CC_ENABLE_SCRIPT_BINDING
-
- Scene::onEnter();
-
- // disable events while transitions
- _eventDispatcher->setEnabled(false);
-
- // outScene should not receive the onEnter callback
- // only the onExitTransitionDidStart
- _outScene->onExitTransitionDidStart();
-
- _inScene->onEnter();
- }
- // custom onExit
- void TransitionScene::onExit()
- {
- #if CC_ENABLE_SCRIPT_BINDING
- if (_scriptType == kScriptTypeJavascript)
- {
- if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnExit))
- return;
- }
- #endif // #if CC_ENABLE_SCRIPT_BINDING
-
- Scene::onExit();
-
- // enable events while transitions
- _eventDispatcher->setEnabled(true);
- _outScene->onExit();
- // _inScene should not receive the onEnter callback
- // only the onEnterTransitionDidFinish
- _inScene->onEnterTransitionDidFinish();
- #if CC_ENABLE_SCRIPT_BINDING
- if (ScriptEngineManager::getInstance()->getScriptEngine())
- ScriptEngineManager::getInstance()->getScriptEngine()->garbageCollect();
- #endif // CC_ENABLE_SCRIPT_BINDING
- }
- // custom cleanup
- void TransitionScene::cleanup()
- {
- #if CC_ENABLE_SCRIPT_BINDING
- if (_scriptType == kScriptTypeJavascript)
- {
- if (ScriptEngineManager::sendNodeEventToJSExtended(this, kNodeOnCleanup))
- return;
- }
- #endif // #if CC_ENABLE_SCRIPT_BINDING
-
- Scene::cleanup();
- if( _isSendCleanupToScene )
- _outScene->cleanup();
- }
- //
- // Oriented Transition
- //
- TransitionSceneOriented::TransitionSceneOriented()
- {
- }
- TransitionSceneOriented::~TransitionSceneOriented()
- {
- }
- TransitionSceneOriented * TransitionSceneOriented::create(float t, Scene *scene, Orientation orientation)
- {
- TransitionSceneOriented * newScene = new (std::nothrow) TransitionSceneOriented();
- newScene->initWithDuration(t,scene,orientation);
- newScene->autorelease();
- return newScene;
- }
- bool TransitionSceneOriented::initWithDuration(float t, Scene *scene, Orientation orientation)
- {
- if ( TransitionScene::initWithDuration(t, scene) )
- {
- _orientation = orientation;
- }
- return true;
- }
- //
- // RotoZoom
- //
- TransitionRotoZoom::TransitionRotoZoom()
- {
- }
- TransitionRotoZoom* TransitionRotoZoom::create(float t, Scene* scene)
- {
- TransitionRotoZoom* newScene = new (std::nothrow) TransitionRotoZoom();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- TransitionRotoZoom::~TransitionRotoZoom()
- {
- }
- void TransitionRotoZoom:: onEnter()
- {
- TransitionScene::onEnter();
- _inScene->setScale(0.001f);
- _outScene->setScale(1.0f);
- _inScene->setAnchorPoint(Vec2(0.5f, 0.5f));
- _outScene->setAnchorPoint(Vec2(0.5f, 0.5f));
- auto rotozoom = Sequence::create
- (
- Spawn::create
- (
- ScaleBy::create(_duration/2, 0.001f),
- RotateBy::create(_duration/2, 360 * 2),
- nullptr
- ),
- DelayTime::create(_duration/2),
- nullptr
- );
- _outScene->runAction(rotozoom);
- _inScene->runAction
- (
- Sequence::create
- (
- rotozoom->reverse(),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- )
- );
- }
- //
- // JumpZoom
- //
- TransitionJumpZoom::TransitionJumpZoom()
- {
- }
- TransitionJumpZoom::~TransitionJumpZoom()
- {
- }
- TransitionJumpZoom* TransitionJumpZoom::create(float t, Scene* scene)
- {
- TransitionJumpZoom* newScene = new (std::nothrow) TransitionJumpZoom();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionJumpZoom::onEnter()
- {
- TransitionScene::onEnter();
- Size s = Director::getInstance()->getWinSize();
- _inScene->setScale(0.5f);
- _inScene->setPosition(s.width, 0);
- _inScene->setAnchorPoint(Vec2(0.5f, 0.5f));
- _outScene->setAnchorPoint(Vec2(0.5f, 0.5f));
- ActionInterval *jump = JumpBy::create(_duration/4, Vec2(-s.width,0), s.width/4, 2);
- ActionInterval *scaleIn = ScaleTo::create(_duration/4, 1.0f);
- ActionInterval *scaleOut = ScaleTo::create(_duration/4, 0.5f);
- auto jumpZoomOut = Sequence::create(scaleOut, jump, nullptr);
- auto jumpZoomIn = Sequence::create(jump, scaleIn, nullptr);
- ActionInterval *delay = DelayTime::create(_duration/2);
- _outScene->runAction(jumpZoomOut);
- _inScene->runAction
- (
- Sequence::create
- (
- delay,
- jumpZoomIn,
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- )
- );
- }
- //
- // MoveInL
- //
- TransitionMoveInL::TransitionMoveInL()
- {
- }
- TransitionMoveInL::~TransitionMoveInL()
- {
- }
- TransitionMoveInL* TransitionMoveInL::create(float t, Scene* scene)
- {
- TransitionMoveInL* newScene = new (std::nothrow) TransitionMoveInL();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionMoveInL::onEnter()
- {
- TransitionScene::onEnter();
- this->initScenes();
- ActionInterval *a = this->action();
- _inScene->runAction
- (
- Sequence::create
- (
- this->easeActionWithAction(a),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- )
- );
- }
-
- ActionInterval* TransitionMoveInL::action()
- {
- return MoveTo::create(_duration, Vec2(0,0));
- }
- ActionInterval* TransitionMoveInL::easeActionWithAction(ActionInterval* action)
- {
- return EaseOut::create(action, 2.0f);
- // return [EaseElasticOut actionWithAction:action period:0.4f];
- }
- void TransitionMoveInL::initScenes()
- {
- Size s = Director::getInstance()->getWinSize();
- _inScene->setPosition(-s.width,0);
- }
- //
- // MoveInR
- //
- TransitionMoveInR::TransitionMoveInR()
- {
- }
- TransitionMoveInR::~TransitionMoveInR()
- {
- }
- TransitionMoveInR* TransitionMoveInR::create(float t, Scene* scene)
- {
- TransitionMoveInR* newScene = new (std::nothrow) TransitionMoveInR();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionMoveInR::initScenes()
- {
- Size s = Director::getInstance()->getWinSize();
- _inScene->setPosition(s.width,0);
- }
- //
- // MoveInT
- //
- TransitionMoveInT::TransitionMoveInT()
- {
- }
- TransitionMoveInT::~TransitionMoveInT()
- {
- }
- TransitionMoveInT* TransitionMoveInT::create(float t, Scene* scene)
- {
- TransitionMoveInT* newScene = new (std::nothrow) TransitionMoveInT();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionMoveInT::initScenes()
- {
- Size s = Director::getInstance()->getWinSize();
- _inScene->setPosition(0,s.height);
- }
- //
- // MoveInB
- //
- TransitionMoveInB::TransitionMoveInB()
- {
- }
- TransitionMoveInB::~TransitionMoveInB()
- {
- }
- TransitionMoveInB* TransitionMoveInB::create(float t, Scene* scene)
- {
- TransitionMoveInB* newScene = new (std::nothrow) TransitionMoveInB();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionMoveInB::initScenes()
- {
- Size s = Director::getInstance()->getWinSize();
- _inScene->setPosition(0,-s.height);
- }
- //
- // SlideInL
- //
- // The adjust factor is needed to prevent issue #442
- // One solution is to use DONT_RENDER_IN_SUBPIXELS images, but NO
- // The other issue is that in some transitions (and I don't know why)
- // the order should be reversed (In in top of Out or vice-versa).
- #define ADJUST_FACTOR 0.5f
- TransitionSlideInL::TransitionSlideInL()
- {
- }
- TransitionSlideInL::~TransitionSlideInL()
- {
- }
- void TransitionSlideInL::onEnter()
- {
- TransitionScene::onEnter();
- this->initScenes();
- ActionInterval *in = this->action();
- ActionInterval *out = this->action();
- ActionInterval* inAction = easeActionWithAction(in);
- ActionInterval* outAction = Sequence::create
- (
- easeActionWithAction(out),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- );
- _inScene->runAction(inAction);
- _outScene->runAction(outAction);
- }
- void TransitionSlideInL::sceneOrder()
- {
- _isInSceneOnTop = false;
- }
- void TransitionSlideInL:: initScenes()
- {
- Size s = Director::getInstance()->getWinSize();
- _inScene->setPosition(-(s.width-ADJUST_FACTOR),0);
- }
- ActionInterval* TransitionSlideInL::action()
- {
- Size s = Director::getInstance()->getWinSize();
- return MoveBy::create(_duration, Vec2(s.width-ADJUST_FACTOR,0));
- }
- ActionInterval* TransitionSlideInL::easeActionWithAction(ActionInterval* action)
- {
- return EaseOut::create(action, 2.0f);
- }
- TransitionSlideInL* TransitionSlideInL::create(float t, Scene* scene)
- {
- TransitionSlideInL* newScene = new (std::nothrow) TransitionSlideInL();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- //
- // SlideInR
- //
- TransitionSlideInR::TransitionSlideInR()
- {
- }
- TransitionSlideInR::~TransitionSlideInR()
- {
- }
- TransitionSlideInR* TransitionSlideInR::create(float t, Scene* scene)
- {
- TransitionSlideInR* newScene = new (std::nothrow) TransitionSlideInR();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionSlideInR::sceneOrder()
- {
- _isInSceneOnTop = true;
- }
- void TransitionSlideInR::initScenes()
- {
- Size s = Director::getInstance()->getWinSize();
- _inScene->setPosition(s.width-ADJUST_FACTOR,0);
- }
- ActionInterval* TransitionSlideInR:: action()
- {
- Size s = Director::getInstance()->getWinSize();
- return MoveBy::create(_duration, Vec2(-(s.width-ADJUST_FACTOR),0));
- }
- //
- // SlideInT
- //
- TransitionSlideInT::TransitionSlideInT()
- {
- }
- TransitionSlideInT::~TransitionSlideInT()
- {
- }
- TransitionSlideInT* TransitionSlideInT::create(float t, Scene* scene)
- {
- TransitionSlideInT* newScene = new (std::nothrow) TransitionSlideInT();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionSlideInT::sceneOrder()
- {
- _isInSceneOnTop = false;
- }
- void TransitionSlideInT::initScenes()
- {
- Size s = Director::getInstance()->getWinSize();
- _inScene->setPosition(0,s.height-ADJUST_FACTOR);
- }
- ActionInterval* TransitionSlideInT::action()
- {
- Size s = Director::getInstance()->getWinSize();
- return MoveBy::create(_duration, Vec2(0,-(s.height-ADJUST_FACTOR)));
- }
- //
- // SlideInB
- //
- TransitionSlideInB::TransitionSlideInB()
- {
- }
- TransitionSlideInB::~TransitionSlideInB()
- {
- }
- TransitionSlideInB* TransitionSlideInB::create(float t, Scene* scene)
- {
- TransitionSlideInB* newScene = new (std::nothrow) TransitionSlideInB();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionSlideInB::sceneOrder()
- {
- _isInSceneOnTop = true;
- }
- void TransitionSlideInB:: initScenes()
- {
- Size s = Director::getInstance()->getWinSize();
- _inScene->setPosition(0,-(s.height-ADJUST_FACTOR));
- }
- ActionInterval* TransitionSlideInB:: action()
- {
- Size s = Director::getInstance()->getWinSize();
- return MoveBy::create(_duration, Vec2(0,s.height-ADJUST_FACTOR));
- }
- //
- // ShrinkGrow Transition
- //
- TransitionShrinkGrow::TransitionShrinkGrow()
- {
- }
- TransitionShrinkGrow::~TransitionShrinkGrow()
- {
- }
- TransitionShrinkGrow* TransitionShrinkGrow::create(float t, Scene* scene)
- {
- TransitionShrinkGrow* newScene = new (std::nothrow) TransitionShrinkGrow();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionShrinkGrow::onEnter()
- {
- TransitionScene::onEnter();
- _inScene->setScale(0.001f);
- _outScene->setScale(1.0f);
- _inScene->setAnchorPoint(Vec2(2/3.0f,0.5f));
- _outScene->setAnchorPoint(Vec2(1/3.0f,0.5f));
- ActionInterval* scaleOut = ScaleTo::create(_duration, 0.01f);
- ActionInterval* scaleIn = ScaleTo::create(_duration, 1.0f);
- _inScene->runAction(this->easeActionWithAction(scaleIn));
- _outScene->runAction
- (
- Sequence::create
- (
- this->easeActionWithAction(scaleOut),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- )
- );
- }
- ActionInterval* TransitionShrinkGrow:: easeActionWithAction(ActionInterval* action)
- {
- return EaseOut::create(action, 2.0f);
- // return [EaseElasticOut actionWithAction:action period:0.3f];
- }
- //
- // FlipX Transition
- //
- TransitionFlipX::TransitionFlipX()
- {
- }
- TransitionFlipX::~TransitionFlipX()
- {
- }
- void TransitionFlipX::onEnter()
- {
- TransitionSceneOriented::onEnter();
- _inScene->setVisible(false);
- float inDeltaZ, inAngleZ;
- float outDeltaZ, outAngleZ;
- if( _orientation == TransitionScene::Orientation::RIGHT_OVER )
- {
- inDeltaZ = 90;
- inAngleZ = 270;
- outDeltaZ = 90;
- outAngleZ = 0;
- }
- else
- {
- inDeltaZ = -90;
- inAngleZ = 90;
- outDeltaZ = -90;
- outAngleZ = 0;
- }
- auto inA = Sequence::create
- (
- DelayTime::create(_duration/2),
- Show::create(),
- OrbitCamera::create(_duration/2, 1, 0, inAngleZ, inDeltaZ, 0, 0),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- );
- auto outA = Sequence::create
- (
- OrbitCamera::create(_duration/2, 1, 0, outAngleZ, outDeltaZ, 0, 0),
- Hide::create(),
- DelayTime::create(_duration/2),
- nullptr
- );
- _inScene->runAction(inA);
- _outScene->runAction(outA);
- }
- TransitionFlipX* TransitionFlipX::create(float t, Scene* s, Orientation o)
- {
- TransitionFlipX* newScene = new (std::nothrow) TransitionFlipX();
- newScene->initWithDuration(t, s, o);
- newScene->autorelease();
- return newScene;
- }
- TransitionFlipX* TransitionFlipX::create(float t, Scene* s)
- {
- return TransitionFlipX::create(t, s, TransitionScene::Orientation::RIGHT_OVER);
- }
- //
- // FlipY Transition
- //
- TransitionFlipY::TransitionFlipY()
- {
- }
- TransitionFlipY::~TransitionFlipY()
- {
- }
- void TransitionFlipY::onEnter()
- {
- TransitionSceneOriented::onEnter();
- _inScene->setVisible(false);
- float inDeltaZ, inAngleZ;
- float outDeltaZ, outAngleZ;
- if( _orientation == TransitionScene::Orientation::UP_OVER )
- {
- inDeltaZ = 90;
- inAngleZ = 270;
- outDeltaZ = 90;
- outAngleZ = 0;
- }
- else
- {
- inDeltaZ = -90;
- inAngleZ = 90;
- outDeltaZ = -90;
- outAngleZ = 0;
- }
- auto inA = Sequence::create
- (
- DelayTime::create(_duration/2),
- Show::create(),
- OrbitCamera::create(_duration/2, 1, 0, inAngleZ, inDeltaZ, 90, 0),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- );
- auto outA = Sequence::create
- (
- OrbitCamera::create(_duration/2, 1, 0, outAngleZ, outDeltaZ, 90, 0),
- Hide::create(),
- DelayTime::create(_duration/2),
- nullptr
- );
- _inScene->runAction(inA);
- _outScene->runAction(outA);
- }
- TransitionFlipY* TransitionFlipY::create(float t, Scene* s, Orientation o)
- {
- TransitionFlipY* newScene = new (std::nothrow) TransitionFlipY();
- newScene->initWithDuration(t, s, o);
- newScene->autorelease();
- return newScene;
- }
- TransitionFlipY* TransitionFlipY::create(float t, Scene* s)
- {
- return TransitionFlipY::create(t, s, TransitionScene::Orientation::UP_OVER);
- }
- //
- // FlipAngular Transition
- //
- TransitionFlipAngular::TransitionFlipAngular()
- {
- }
- TransitionFlipAngular::~TransitionFlipAngular()
- {
- }
- void TransitionFlipAngular::onEnter()
- {
- TransitionSceneOriented::onEnter();
- _inScene->setVisible(false);
- float inDeltaZ, inAngleZ;
- float outDeltaZ, outAngleZ;
- if( _orientation == TransitionScene::Orientation::RIGHT_OVER )
- {
- inDeltaZ = 90;
- inAngleZ = 270;
- outDeltaZ = 90;
- outAngleZ = 0;
- }
- else
- {
- inDeltaZ = -90;
- inAngleZ = 90;
- outDeltaZ = -90;
- outAngleZ = 0;
- }
- auto inA = Sequence::create
- (
- DelayTime::create(_duration/2),
- Show::create(),
- OrbitCamera::create(_duration/2, 1, 0, inAngleZ, inDeltaZ, -45, 0),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- );
- auto outA = Sequence::create
- (
- OrbitCamera::create(_duration/2, 1, 0, outAngleZ, outDeltaZ, 45, 0),
- Hide::create(),
- DelayTime::create(_duration/2),
- nullptr
- );
- _inScene->runAction(inA);
- _outScene->runAction(outA);
- }
- TransitionFlipAngular* TransitionFlipAngular::create(float t, Scene* s, Orientation o)
- {
- TransitionFlipAngular* newScene = new (std::nothrow) TransitionFlipAngular();
- newScene->initWithDuration(t, s, o);
- newScene->autorelease();
- return newScene;
- }
- TransitionFlipAngular* TransitionFlipAngular::create(float t, Scene* s)
- {
- return TransitionFlipAngular::create(t, s, TransitionScene::Orientation::RIGHT_OVER);
- }
- //
- // ZoomFlipX Transition
- //
- TransitionZoomFlipX::TransitionZoomFlipX()
- {
- }
- TransitionZoomFlipX::~TransitionZoomFlipX()
- {
- }
- void TransitionZoomFlipX::onEnter()
- {
- TransitionSceneOriented::onEnter();
- _inScene->setVisible(false);
- float inDeltaZ, inAngleZ;
- float outDeltaZ, outAngleZ;
- if( _orientation == TransitionScene::Orientation::RIGHT_OVER ) {
- inDeltaZ = 90;
- inAngleZ = 270;
- outDeltaZ = 90;
- outAngleZ = 0;
- }
- else
- {
- inDeltaZ = -90;
- inAngleZ = 90;
- outDeltaZ = -90;
- outAngleZ = 0;
- }
- auto inA = Sequence::create
- (
- DelayTime::create(_duration/2),
- Spawn::create
- (
- OrbitCamera::create(_duration/2, 1, 0, inAngleZ, inDeltaZ, 0, 0),
- ScaleTo::create(_duration/2, 1),
- Show::create(),
- nullptr
- ),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- );
- auto outA = Sequence::create
- (
- Spawn::create
- (
- OrbitCamera::create(_duration/2, 1, 0, outAngleZ, outDeltaZ, 0, 0),
- ScaleTo::create(_duration/2, 0.5f),
- nullptr
- ),
- Hide::create(),
- DelayTime::create(_duration/2),
- nullptr
- );
- _inScene->setScale(0.5f);
- _inScene->runAction(inA);
- _outScene->runAction(outA);
- }
- TransitionZoomFlipX* TransitionZoomFlipX::create(float t, Scene* s, Orientation o)
- {
- TransitionZoomFlipX* newScene = new (std::nothrow) TransitionZoomFlipX();
- newScene->initWithDuration(t, s, o);
- newScene->autorelease();
- return newScene;
- }
- TransitionZoomFlipX* TransitionZoomFlipX::create(float t, Scene* s)
- {
- return TransitionZoomFlipX::create(t, s, TransitionScene::Orientation::RIGHT_OVER);
- }
- //
- // ZoomFlipY Transition
- //
- TransitionZoomFlipY::TransitionZoomFlipY()
- {
- }
- TransitionZoomFlipY::~TransitionZoomFlipY()
- {
- }
- void TransitionZoomFlipY::onEnter()
- {
- TransitionSceneOriented::onEnter();
- _inScene->setVisible(false);
- float inDeltaZ, inAngleZ;
- float outDeltaZ, outAngleZ;
- if( _orientation== TransitionScene::Orientation::UP_OVER ) {
- inDeltaZ = 90;
- inAngleZ = 270;
- outDeltaZ = 90;
- outAngleZ = 0;
- } else {
- inDeltaZ = -90;
- inAngleZ = 90;
- outDeltaZ = -90;
- outAngleZ = 0;
- }
- auto inA = Sequence::create
- (
- DelayTime::create(_duration/2),
- Spawn::create
- (
- OrbitCamera::create(_duration/2, 1, 0, inAngleZ, inDeltaZ, 90, 0),
- ScaleTo::create(_duration/2, 1),
- Show::create(),
- nullptr
- ),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- );
- auto outA = Sequence::create
- (
- Spawn::create
- (
- OrbitCamera::create(_duration/2, 1, 0, outAngleZ, outDeltaZ, 90, 0),
- ScaleTo::create(_duration/2, 0.5f),
- nullptr
- ),
- Hide::create(),
- DelayTime::create(_duration/2),
- nullptr
- );
- _inScene->setScale(0.5f);
- _inScene->runAction(inA);
- _outScene->runAction(outA);
- }
- TransitionZoomFlipY* TransitionZoomFlipY::create(float t, Scene* s, Orientation o)
- {
- TransitionZoomFlipY* newScene = new (std::nothrow) TransitionZoomFlipY();
- newScene->initWithDuration(t, s, o);
- newScene->autorelease();
- return newScene;
- }
- TransitionZoomFlipY* TransitionZoomFlipY::create(float t, Scene* s)
- {
- return TransitionZoomFlipY::create(t, s, TransitionScene::Orientation::UP_OVER);
- }
- //
- // ZoomFlipAngular Transition
- //
- TransitionZoomFlipAngular::TransitionZoomFlipAngular()
- {
- }
- TransitionZoomFlipAngular::~TransitionZoomFlipAngular()
- {
- }
- void TransitionZoomFlipAngular::onEnter()
- {
- TransitionSceneOriented::onEnter();
- _inScene->setVisible(false);
- float inDeltaZ, inAngleZ;
- float outDeltaZ, outAngleZ;
- if( _orientation == TransitionScene::Orientation::RIGHT_OVER ) {
- inDeltaZ = 90;
- inAngleZ = 270;
- outDeltaZ = 90;
- outAngleZ = 0;
- }
- else
- {
- inDeltaZ = -90;
- inAngleZ = 90;
- outDeltaZ = -90;
- outAngleZ = 0;
- }
- auto inA = Sequence::create
- (
- DelayTime::create(_duration/2),
- Spawn::create
- (
- OrbitCamera::create(_duration/2, 1, 0, inAngleZ, inDeltaZ, -45, 0),
- ScaleTo::create(_duration/2, 1),
- Show::create(),
- nullptr
- ),
- Show::create(),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- );
- auto outA = Sequence::create
- (
- Spawn::create
- (
- OrbitCamera::create(_duration/2, 1, 0 , outAngleZ, outDeltaZ, 45, 0),
- ScaleTo::create(_duration/2, 0.5f),
- nullptr
- ),
- Hide::create(),
- DelayTime::create(_duration/2),
- nullptr
- );
- _inScene->setScale(0.5f);
- _inScene->runAction(inA);
- _outScene->runAction(outA);
- }
- TransitionZoomFlipAngular* TransitionZoomFlipAngular::create(float t, Scene* s, Orientation o)
- {
- TransitionZoomFlipAngular* newScene = new (std::nothrow) TransitionZoomFlipAngular();
- newScene->initWithDuration(t, s, o);
- newScene->autorelease();
- return newScene;
- }
- TransitionZoomFlipAngular* TransitionZoomFlipAngular::create(float t, Scene* s)
- {
- return TransitionZoomFlipAngular::create(t, s, TransitionScene::Orientation::RIGHT_OVER);
- }
- //
- // Fade Transition
- //
- TransitionFade::TransitionFade()
- {
- }
- TransitionFade::~TransitionFade()
- {
- }
- TransitionFade * TransitionFade::create(float duration, Scene *scene, const Color3B& color)
- {
- TransitionFade * transition = new (std::nothrow) TransitionFade();
- transition->initWithDuration(duration, scene, color);
- transition->autorelease();
- return transition;
- }
- TransitionFade* TransitionFade::create(float duration,Scene* scene)
- {
- return TransitionFade::create(duration, scene, Color3B::BLACK);
- }
- bool TransitionFade::initWithDuration(float duration, Scene *scene, const Color3B& color)
- {
- if (TransitionScene::initWithDuration(duration, scene))
- {
- _color.r = color.r;
- _color.g = color.g;
- _color.b = color.b;
- _color.a = 0;
- }
- return true;
- }
- bool TransitionFade::initWithDuration(float t, Scene *scene)
- {
- this->initWithDuration(t, scene, Color3B::BLACK);
- return true;
- }
- void TransitionFade :: onEnter()
- {
- TransitionScene::onEnter();
- LayerColor* l = LayerColor::create(_color);
- _inScene->setVisible(false);
- addChild(l, 2, kSceneFade);
- Node* f = getChildByTag(kSceneFade);
- auto a = Sequence::create
- (
- FadeIn::create(_duration/2),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::hideOutShowIn,this)),
- FadeOut::create(_duration/2),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- );
- f->runAction(a);
- }
- void TransitionFade::onExit()
- {
- TransitionScene::onExit();
- this->removeChildByTag(kSceneFade, false);
- }
- //
- // Cross Fade Transition
- //
- TransitionCrossFade::TransitionCrossFade()
- {
- }
- TransitionCrossFade::~TransitionCrossFade()
- {
- }
- TransitionCrossFade* TransitionCrossFade::create(float t, Scene* scene)
- {
- TransitionCrossFade* newScene = new (std::nothrow) TransitionCrossFade();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionCrossFade::draw(Renderer* /*renderer*/, const Mat4 &/*transform*/, uint32_t /*flags*/)
- {
- // override draw since both scenes (textures) are rendered in 1 scene
- }
- void TransitionCrossFade::onEnter()
- {
- TransitionScene::onEnter();
- // create a transparent color layer
- // in which we are going to add our rendertextures
- Color4B color(0,0,0,0);
- Size size = Director::getInstance()->getWinSize();
- LayerColor* layer = LayerColor::create(color);
- // create the first render texture for inScene
- RenderTexture* inTexture = RenderTexture::create((int)size.width, (int)size.height,Texture2D::PixelFormat::RGBA8888,GL_DEPTH24_STENCIL8);
- if (nullptr == inTexture)
- {
- return;
- }
- inTexture->getSprite()->setAnchorPoint( Vec2(0.5f,0.5f) );
- inTexture->setPosition(size.width/2, size.height/2);
- inTexture->setAnchorPoint( Vec2(0.5f,0.5f) );
- // render inScene to its texturebuffer
- inTexture->begin();
- _inScene->visit();
- inTexture->end();
- // create the second render texture for outScene
- RenderTexture* outTexture = RenderTexture::create((int)size.width, (int)size.height,Texture2D::PixelFormat::RGBA8888,GL_DEPTH24_STENCIL8);
- outTexture->getSprite()->setAnchorPoint( Vec2(0.5f,0.5f) );
- outTexture->setPosition(size.width/2, size.height/2);
- outTexture->setAnchorPoint( Vec2(0.5f,0.5f) );
- // render outScene to its texturebuffer
- outTexture->begin();
- _outScene->visit();
- outTexture->end();
- // create blend functions
- // set blendfunctions
- inTexture->getSprite()->setBlendFunc(BlendFunc::DISABLE);
- outTexture->getSprite()->setBlendFunc(BlendFunc::ALPHA_PREMULTIPLIED);
- // add render textures to the layer
- layer->addChild(inTexture);
- layer->addChild(outTexture);
- // initial opacity:
- inTexture->getSprite()->setOpacity(255);
- outTexture->getSprite()->setOpacity(255);
- // create the blend action
- Action* layerAction = Sequence::create
- (
- FadeTo::create(_duration, 0),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::hideOutShowIn,this)),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- nullptr
- );
- // run the blend action
- outTexture->getSprite()->runAction( layerAction );
- // add the layer (which contains our two rendertextures) to the scene
- addChild(layer, 2, kSceneFade);
- }
- // clean up on exit
- void TransitionCrossFade::onExit()
- {
- // remove our layer and release all containing objects
- this->removeChildByTag(kSceneFade, false);
- TransitionScene::onExit();
- }
- //
- // TurnOffTilesTransition
- //
- TransitionTurnOffTiles::TransitionTurnOffTiles()
- {
- _outSceneProxy = NodeGrid::create();
- _outSceneProxy->retain();
- }
- TransitionTurnOffTiles::~TransitionTurnOffTiles()
- {
- CC_SAFE_RELEASE(_outSceneProxy);
- }
- TransitionTurnOffTiles* TransitionTurnOffTiles::create(float t, Scene* scene)
- {
- TransitionTurnOffTiles* newScene = new (std::nothrow) TransitionTurnOffTiles();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- // override addScenes, and change the order
- void TransitionTurnOffTiles::sceneOrder()
- {
- _isInSceneOnTop = false;
- }
- void TransitionTurnOffTiles::onEnter()
- {
- TransitionScene::onEnter();
- _outSceneProxy->setTarget(_outScene);
- _outSceneProxy->onEnter();
- Size s = Director::getInstance()->getWinSize();
- float aspect = s.width / s.height;
- int x = (int)(12 * aspect);
- int y = 12;
- TurnOffTiles* toff = TurnOffTiles::create(_duration, Size(x,y));
- ActionInterval* action = easeActionWithAction(toff);
- _outSceneProxy->runAction
- (
- Sequence::create
- (
- action,
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- StopGrid::create(),
- nullptr
- )
- );
- }
- void TransitionTurnOffTiles::onExit()
- {
- _outSceneProxy->setTarget(nullptr);
- _outSceneProxy->onExit();
- TransitionScene::onExit();
- }
- void TransitionTurnOffTiles::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
- {
- Scene::draw(renderer, transform, flags);
-
- if( _isInSceneOnTop )
- {
- _outSceneProxy->visit(renderer, transform, flags);
- _inScene->visit(renderer, transform, flags);
- }
- else
- {
- _inScene->visit(renderer, transform, flags);
- _outSceneProxy->visit(renderer, transform, flags);
- }
- }
- ActionInterval* TransitionTurnOffTiles:: easeActionWithAction(ActionInterval* action)
- {
- return action;
- }
- //
- // SplitCols Transition
- //
- TransitionSplitCols::TransitionSplitCols()
- {
- _gridProxy = NodeGrid::create();
- _gridProxy->retain();
- }
- TransitionSplitCols::~TransitionSplitCols()
- {
- CC_SAFE_RELEASE(_gridProxy);
- }
- TransitionSplitCols* TransitionSplitCols::create(float t, Scene* scene)
- {
- TransitionSplitCols* newScene = new (std::nothrow) TransitionSplitCols();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionSplitCols::onEnter()
- {
- TransitionScene::onEnter();
- _gridProxy->setTarget(_outScene);
- _gridProxy->onEnter();
- ActionInterval* split = action();
- auto seq = Sequence::create
- (
- split,
- CallFunc::create(CC_CALLBACK_0(TransitionSplitCols::switchTargetToInscene,this)),
- split->reverse(),
- nullptr
- );
- _gridProxy->runAction
- (
- Sequence::create
- (
- easeActionWithAction(seq),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- StopGrid::create(),
- nullptr
- )
- );
- }
- void TransitionSplitCols::switchTargetToInscene()
- {
- _gridProxy->setTarget(_inScene);
- }
- void TransitionSplitCols::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
- {
- Scene::draw(renderer, transform, flags);
- _gridProxy->visit(renderer, transform, flags);
- }
- void TransitionSplitCols::onExit()
- {
- _gridProxy->setTarget(nullptr);
- _gridProxy->onExit();
- TransitionScene::onExit();
- }
- ActionInterval* TransitionSplitCols:: action()
- {
- return SplitCols::create(_duration/2.0f, 3);
- }
- ActionInterval* TransitionSplitCols::easeActionWithAction(ActionInterval * action)
- {
- return EaseInOut::create(action, 3.0f);
- }
- //
- // SplitRows Transition
- //
- TransitionSplitRows::TransitionSplitRows()
- {
- }
- TransitionSplitRows::~TransitionSplitRows()
- {
- }
- ActionInterval* TransitionSplitRows::action()
- {
- return SplitRows::create(_duration/2.0f, 3);
- }
- TransitionSplitRows* TransitionSplitRows::create(float t, Scene* scene)
- {
- TransitionSplitRows* newScene = new (std::nothrow) TransitionSplitRows();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- //
- // FadeTR Transition
- //
- TransitionFadeTR::TransitionFadeTR()
- {
- _outSceneProxy = NodeGrid::create();
- _outSceneProxy->retain();
- }
- TransitionFadeTR::~TransitionFadeTR()
- {
- CC_SAFE_RELEASE(_outSceneProxy);
- }
- TransitionFadeTR* TransitionFadeTR::create(float t, Scene* scene)
- {
- TransitionFadeTR* newScene = new (std::nothrow) TransitionFadeTR();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- void TransitionFadeTR::sceneOrder()
- {
- _isInSceneOnTop = false;
- }
- void TransitionFadeTR::onEnter()
- {
- TransitionScene::onEnter();
- _outSceneProxy->setTarget(_outScene);
- _outSceneProxy->onEnter();
- Size s = Director::getInstance()->getWinSize();
- float aspect = s.width / s.height;
- int x = (int)(12 * aspect);
- int y = 12;
- ActionInterval* action = actionWithSize(Size(x,y));
- _outSceneProxy->runAction
- (
- Sequence::create
- (
- easeActionWithAction(action),
- CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
- StopGrid::create(),
- nullptr
- )
- );
- }
- void TransitionFadeTR::onExit()
- {
- _outSceneProxy->setTarget(nullptr);
- _outSceneProxy->onExit();
- TransitionScene::onExit();
- }
- void TransitionFadeTR::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
- {
- Scene::draw(renderer, transform, flags);
-
- if( _isInSceneOnTop )
- {
- _outSceneProxy->visit(renderer, transform, flags);
- _inScene->visit(renderer, transform, flags);
- }
- else
- {
- _inScene->visit(renderer, transform, flags);
- _outSceneProxy->visit(renderer, transform, flags);
- }
- }
- ActionInterval* TransitionFadeTR::actionWithSize(const Size& size)
- {
- return FadeOutTRTiles::create(_duration, size);
- }
- ActionInterval* TransitionFadeTR:: easeActionWithAction(ActionInterval* action)
- {
- return action;
- }
- //
- // FadeBL Transition
- //
- TransitionFadeBL::TransitionFadeBL()
- {
- }
- TransitionFadeBL::~TransitionFadeBL()
- {
- }
- TransitionFadeBL* TransitionFadeBL::create(float t, Scene* scene)
- {
- TransitionFadeBL* newScene = new (std::nothrow) TransitionFadeBL();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- ActionInterval* TransitionFadeBL::actionWithSize(const Size& size)
- {
- return FadeOutBLTiles::create(_duration, size);
- }
- //
- // FadeUp Transition
- //
- TransitionFadeUp::TransitionFadeUp()
- {
- }
- TransitionFadeUp::~TransitionFadeUp()
- {
- }
- TransitionFadeUp* TransitionFadeUp::create(float t, Scene* scene)
- {
- TransitionFadeUp* newScene = new (std::nothrow) TransitionFadeUp();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- ActionInterval* TransitionFadeUp::actionWithSize(const Size& size)
- {
- return FadeOutUpTiles::create(_duration, size);
- }
- //
- // FadeDown Transition
- //
- TransitionFadeDown::TransitionFadeDown()
- {
- }
- TransitionFadeDown::~TransitionFadeDown()
- {
- }
- TransitionFadeDown* TransitionFadeDown::create(float t, Scene* scene)
- {
- TransitionFadeDown* newScene = new (std::nothrow) TransitionFadeDown();
- if(newScene && newScene->initWithDuration(t, scene))
- {
- newScene->autorelease();
- return newScene;
- }
- CC_SAFE_DELETE(newScene);
- return nullptr;
- }
- ActionInterval* TransitionFadeDown::actionWithSize(const Size& size)
- {
- return FadeOutDownTiles::create(_duration, size);
- }
- NS_CC_END
|