axmol/tests/cpp-tests/Classes/EffectsTest/EffectsTest.cpp

441 lines
10 KiB
C++

#include "EffectsTest.h"
#include "../testResource.h"
enum {
kTagTextLayer = 1,
kTagBackground = 1,
kTagLabel = 2,
};
static int actionIdx=0;
static std::string effectsList[] =
{
"Shaky3D",
"Waves3D",
"FlipX3D",
"FlipY3D",
"Lens3D",
"Ripple3D",
"Liquid",
"Waves",
"Twirl",
"ShakyTiles3D",
"ShatteredTiles3D",
"ShuffleTiles",
"FadeOutTRTiles",
"FadeOutBLTiles",
"FadeOutUpTiles",
"FadeOutDownTiles",
"TurnOffTiles",
"WavesTiles3D",
"JumpTiles3D",
"SplitRows",
"SplitCols",
"PageTurn3D",
};
class Shaky3DDemo : public Shaky3D
{
public:
static ActionInterval* create(float t)
{
return Shaky3D::create(t, Size(15,10), 5, false);
}
};
class Waves3DDemo : public Waves3D
{
public:
static ActionInterval* create(float t)
{
return Waves3D::create(t, Size(15,10), 5, 40);
}
};
class FlipX3DDemo : public FlipX3D
{
public:
static ActionInterval* create(float t)
{
auto flipx = FlipX3D::create(t);
auto flipx_back = flipx->reverse();
auto delay = DelayTime::create(2);
return Sequence::create(flipx, delay, flipx_back, nullptr);
}
};
class FlipY3DDemo : public FlipY3D
{
public:
static ActionInterval* create(float t)
{
auto flipy = FlipY3D::create(t);
auto flipy_back = flipy->reverse();
auto delay = DelayTime::create(2);
return Sequence::create(flipy, delay, flipy_back, nullptr);
}
};
class Lens3DDemo : public Lens3D
{
public:
static ActionInterval* create(float t)
{
auto size = Director::getInstance()->getWinSize();
return Lens3D::create(t, Size(15,10), Vec2(size.width/2,size.height/2), 240);
}
};
class Ripple3DDemo : public Ripple3D
{
public:
static ActionInterval* create(float t)
{
auto size = Director::getInstance()->getWinSize();
return Ripple3D::create(t, Size(32,24), Vec2(size.width/2,size.height/2), 240, 4, 160);
}
};
class LiquidDemo : public Liquid
{
public:
static ActionInterval* create(float t)
{
return Liquid::create(t, Size(16,12), 4, 20);
}
};
class WavesDemo : public Waves
{
public:
static ActionInterval* create(float t)
{
return Waves::create(t, Size(16,12), 4, 20, true, true);
}
};
class TwirlDemo : public Twirl
{
public:
static ActionInterval* create(float t)
{
auto size = Director::getInstance()->getWinSize();
return Twirl::create(t, Size(12,8), Vec2(size.width/2, size.height/2), 1, 2.5f);
}
};
class ShakyTiles3DDemo : public ShakyTiles3D
{
public:
static ActionInterval* create(float t)
{
return ShakyTiles3D::create(t, Size(16,12), 5, false) ;
}
};
class ShatteredTiles3DDemo : public ShatteredTiles3D
{
public:
static ActionInterval* create(float t)
{
return ShatteredTiles3D::create(t, Size(16,12), 5, false);
}
};
class ShuffleTilesDemo : public ShuffleTiles
{
public:
static ActionInterval* create(float t)
{
auto shuffle = ShuffleTiles::create(t, Size(16,12), 25);
auto shuffle_back = shuffle->reverse();
auto delay = DelayTime::create(2);
return Sequence::create(shuffle, delay, shuffle_back, nullptr);
}
};
class FadeOutTRTilesDemo : public FadeOutTRTiles
{
public:
static ActionInterval* create(float t)
{
auto fadeout = FadeOutTRTiles::create(t, Size(16,12));
auto back = fadeout->reverse();
auto delay = DelayTime::create(0.5f);
return Sequence::create(fadeout, delay, back, nullptr);
}
};
class FadeOutBLTilesDemo : public FadeOutBLTiles
{
public:
static ActionInterval* create(float t)
{
auto fadeout = FadeOutBLTiles::create(t, Size(16,12));
auto back = fadeout->reverse();
auto delay = DelayTime::create(0.5f);
return Sequence::create(fadeout, delay, back, nullptr);
}
};
class FadeOutUpTilesDemo : public FadeOutUpTiles
{
public:
static ActionInterval* create(float t)
{
auto fadeout = FadeOutUpTiles::create(t, Size(16,12));
auto back = fadeout->reverse();
auto delay = DelayTime::create(0.5f);
return Sequence::create(fadeout, delay, back, nullptr);
}
};
class FadeOutDownTilesDemo : public FadeOutDownTiles
{
public:
static ActionInterval* create(float t)
{
auto fadeout = FadeOutDownTiles::create(t, Size(16,12));
auto back = fadeout->reverse();
auto delay = DelayTime::create(0.5f);
return Sequence::create(fadeout, delay, back, nullptr);
}
};
class TurnOffTilesDemo : public TurnOffTiles
{
public:
static ActionInterval* create(float t)
{
auto fadeout = TurnOffTiles::create(t, Size(48,32), 25);
auto back = fadeout->reverse();
auto delay = DelayTime::create(0.5f);
return Sequence::create(fadeout, delay, back, nullptr);
}
};
class WavesTiles3DDemo : public WavesTiles3D
{
public:
static ActionInterval* create(float t)
{
return WavesTiles3D::create(t, Size(15,10), 4, 120);
}
};
class JumpTiles3DDemo : public JumpTiles3D
{
public:
static ActionInterval* create(float t)
{
return JumpTiles3D::create(t, Size(15,10), 2, 30);
}
};
class SplitRowsDemo : public SplitRows
{
public:
static ActionInterval* create(float t)
{
return SplitRows::create(t, 9);
}
};
class SplitColsDemo : public SplitCols
{
public:
static ActionInterval* create(float t)
{
return SplitCols::create(t, 9);
}
};
class PageTurn3DDemo : public PageTurn3D
{
public:
static ActionInterval* create(float t)
{
Director::getInstance()->setDepthTest(true);
return PageTurn3D::create(t, Size(15,10));
}
};
//------------------------------------------------------------------
//
// TextLayer
//
//------------------------------------------------------------------
#define MAX_LAYER 22
ActionInterval* createEffect(int nIndex, float t)
{
Director::getInstance()->setDepthTest(false);
switch(nIndex)
{
case 0: return Shaky3DDemo::create(t);
case 1: return Waves3DDemo::create(t);
case 2: return FlipX3DDemo::create(t);
case 3: return FlipY3DDemo::create(t);
case 4: return Lens3DDemo::create(t);
case 5: return Ripple3DDemo::create(t);
case 6: return LiquidDemo::create(t);
case 7: return WavesDemo::create(t);
case 8: return TwirlDemo::create(t);
case 9: return ShakyTiles3DDemo::create(t);
case 10: return ShatteredTiles3DDemo::create(t);
case 11: return ShuffleTilesDemo::create(t);
case 12: return FadeOutTRTilesDemo::create(t);
case 13: return FadeOutBLTilesDemo::create(t);
case 14: return FadeOutUpTilesDemo::create(t);
case 15: return FadeOutDownTilesDemo::create(t);
case 16: return TurnOffTilesDemo::create(t);
case 17: return WavesTiles3DDemo::create(t);
case 18: return JumpTiles3DDemo::create(t);
case 19: return SplitRowsDemo::create(t);
case 20: return SplitColsDemo::create(t);
case 21: return PageTurn3DDemo::create(t);
}
return nullptr;
}
ActionInterval* getAction()
{
auto pEffect = createEffect(actionIdx, 3);
return pEffect;
}
void EffectTestScene::runThisTest()
{
addChild(TextLayer::create());
Director::getInstance()->replaceScene(this);
}
#define SID_RESTART 1
TextLayer::TextLayer(void)
: BaseTest()
{
LayerColor *background = LayerColor::create( Color4B(32,128,32,255) );
this->addChild(background,-20);
_gridNodeTarget = NodeGrid::create();
auto effect = getAction();
_gridNodeTarget->runAction(effect);
addChild(_gridNodeTarget, 0, kTagBackground);
auto bg = Sprite::create(s_back3);
_gridNodeTarget->addChild(bg, 0);
// bg->setAnchorPoint( Vec2::ZERO );
bg->setPosition(VisibleRect::center());
auto grossini = Sprite::create(s_pathSister2);
_gridNodeTarget->addChild(grossini, 1);
grossini->setPosition(VisibleRect::left().x+VisibleRect::getVisibleRect().size.width/3,VisibleRect::center().y);
auto sc = ScaleBy::create(2, 5);
auto sc_back = sc->reverse();
grossini->runAction( RepeatForever::create(Sequence::create(sc, sc_back, nullptr) ) );
auto tamara = Sprite::create(s_pathSister1);
_gridNodeTarget->addChild(tamara, 1);
tamara->setPosition(VisibleRect::left().x+2*VisibleRect::getVisibleRect().size.width/3,VisibleRect::center().y);
auto sc2 = ScaleBy::create(2, 5);
auto sc2_back = sc2->reverse();
tamara->runAction( RepeatForever::create(Sequence::create(sc2, sc2_back, nullptr)) );
auto label = Label::createWithTTF((effectsList[actionIdx]).c_str(), "fonts/Marker Felt.ttf", 32);
label->setPosition(VisibleRect::center().x,VisibleRect::top().y-80);
addChild(label);
label->setTag( kTagLabel );
schedule( schedule_selector(TextLayer::checkAnim) );
}
void TextLayer::checkAnim(float dt)
{
//auto s2 = getChildByTag(kTagBackground);
if ( _gridNodeTarget->getNumberOfRunningActions() == 0 && _gridNodeTarget->getGrid() != nullptr)
_gridNodeTarget->setGrid(nullptr);;
}
TextLayer::~TextLayer(void)
{
}
// TextLayer* TextLayer::node()
// {
// return TextLayer::create();
// }
TextLayer* TextLayer::create()
{
auto layer = new (std::nothrow) TextLayer();
layer->autorelease();
return layer;
}
void TextLayer::onEnter()
{
BaseTest::onEnter();
}
void TextLayer::newScene()
{
auto s = new (std::nothrow) EffectTestScene();
auto child = TextLayer::create();
s->addChild(child);
Director::getInstance()->replaceScene(s);
s->release();
}
void TextLayer::restartCallback(Ref* sender)
{
newScene();
}
void TextLayer::nextCallback(Ref* sender)
{
// update the action index
actionIdx++;
actionIdx = actionIdx % MAX_LAYER;
newScene();
}
void TextLayer::backCallback(Ref* sender)
{
// update the action index
actionIdx--;
int total = MAX_LAYER;
if( actionIdx < 0 )
actionIdx += total;
newScene();
}