#include "ActionsProgressTest.h" #include "../testResource.h" static int sceneIdx = -1; #define MAX_LAYER 7 CCLayer* nextAction(); CCLayer* backAction(); CCLayer* restartAction(); CCLayer* createLayer(int nIndex) { switch(nIndex) { case 0: return new SpriteProgressToRadial(); case 1: return new SpriteProgressToHorizontal(); case 2: return new SpriteProgressToVertical(); case 3: return new SpriteProgressToRadialMidpointChanged(); case 4: return new SpriteProgressBarVarious(); case 5: return new SpriteProgressBarTintAndFade(); case 6: return new SpriteProgressWithSpriteFrame(); } return NULL; } CCLayer* nextAction() { sceneIdx++; sceneIdx = sceneIdx % MAX_LAYER; CCLayer* pLayer = createLayer(sceneIdx); pLayer->autorelease(); return pLayer; } CCLayer* backAction() { sceneIdx--; int total = MAX_LAYER; if( sceneIdx < 0 ) sceneIdx += total; CCLayer* pLayer = createLayer(sceneIdx); pLayer->autorelease(); return pLayer; } CCLayer* restartAction() { CCLayer* pLayer = createLayer(sceneIdx); pLayer->autorelease(); return pLayer; } void ProgressActionsTestScene::runThisTest() { addChild(nextAction()); CCDirector::sharedDirector()->replaceScene(this); } //------------------------------------------------------------------ // // SpriteDemo // //------------------------------------------------------------------ SpriteDemo::SpriteDemo(void) { } SpriteDemo::~SpriteDemo(void) { } std::string SpriteDemo::title() { return "ActionsProgressTest"; } std::string SpriteDemo::subtitle() { return ""; } void SpriteDemo::onEnter() { CCLayer::onEnter(); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCLabelTTF* label = CCLabelTTF::create(title().c_str(), "Arial", 18); addChild(label, 1); label->setPosition( ccp(s.width/2, s.height-50) ); std::string strSubtitle = subtitle(); if( ! strSubtitle.empty() ) { CCLabelTTF* l = CCLabelTTF::create(strSubtitle.c_str(), "Thonburi", 22); addChild(l, 1); l->setPosition( ccp(s.width/2, s.height-80) ); } CCMenuItemImage *item1 = CCMenuItemImage::create(s_pPathB1, s_pPathB2, this, menu_selector(SpriteDemo::backCallback) ); CCMenuItemImage *item2 = CCMenuItemImage::create(s_pPathR1, s_pPathR2, this, menu_selector(SpriteDemo::restartCallback) ); CCMenuItemImage *item3 = CCMenuItemImage::create(s_pPathF1, s_pPathF2, this, menu_selector(SpriteDemo::nextCallback) ); CCMenu *menu = CCMenu::create(item1, item2, item3, NULL); menu->setPosition(CCPointZero); item1->setPosition(ccp(VisibleRect::center().x - item2->getContentSize().width*2, VisibleRect::bottom().y+item2->getContentSize().height/2)); item2->setPosition(ccp(VisibleRect::center().x, VisibleRect::bottom().y+item2->getContentSize().height/2)); item3->setPosition(ccp(VisibleRect::center().x + item2->getContentSize().width*2, VisibleRect::bottom().y+item2->getContentSize().height/2)); addChild(menu, 1); CCLayerColor *background = CCLayerColor::create(ccc4(255,0,0,255)); addChild(background, -10); } void SpriteDemo::restartCallback(CCObject* pSender) { CCScene* s = new ProgressActionsTestScene(); s->addChild(restartAction()); CCDirector::sharedDirector()->replaceScene(s); s->release(); } void SpriteDemo::nextCallback(CCObject* pSender) { CCScene* s = new ProgressActionsTestScene(); s->addChild( nextAction() ); CCDirector::sharedDirector()->replaceScene(s); s->release(); } void SpriteDemo::backCallback(CCObject* pSender) { CCScene* s = new ProgressActionsTestScene(); s->addChild( backAction() ); CCDirector::sharedDirector()->replaceScene(s); s->release(); } //------------------------------------------------------------------ // // SpriteProgressToRadial // //------------------------------------------------------------------ void SpriteProgressToRadial::onEnter() { SpriteDemo::onEnter(); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCProgressTo *to1 = CCProgressTo::create(2, 100); CCProgressTo *to2 = CCProgressTo::create(2, 100); CCProgressTimer *left = CCProgressTimer::create(CCSprite::create(s_pPathSister1)); left->setType( kCCProgressTimerTypeRadial ); addChild(left); left->setPosition(ccp(100, s.height/2)); left->runAction( CCRepeatForever::create(to1)); CCProgressTimer *right = CCProgressTimer::create(CCSprite::create(s_pPathBlock)); right->setType(kCCProgressTimerTypeRadial); // Makes the ridial CCW right->setReverseProgress(true); addChild(right); right->setPosition(ccp(s.width-100, s.height/2)); right->runAction( CCRepeatForever::create(to2)); } std::string SpriteProgressToRadial::subtitle() { return "ProgressTo Radial"; } //------------------------------------------------------------------ // // SpriteProgressToHorizontal // //------------------------------------------------------------------ void SpriteProgressToHorizontal::onEnter() { SpriteDemo::onEnter(); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCProgressTo *to1 = CCProgressTo::create(2, 100); CCProgressTo *to2 = CCProgressTo::create(2, 100); CCProgressTimer *left = CCProgressTimer::create(CCSprite::create(s_pPathSister1)); left->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the left since the midpoint is 0 for the x left->setMidpoint(ccp(0,0)); // Setup for a horizontal bar since the bar change rate is 0 for y meaning no vertical change left->setBarChangeRate(ccp(1, 0)); addChild(left); left->setPosition(ccp(100, s.height/2)); left->runAction( CCRepeatForever::create(to1)); CCProgressTimer *right = CCProgressTimer::create(CCSprite::create(s_pPathSister2)); right->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the left since the midpoint is 1 for the x right->setMidpoint(ccp(1, 0)); // Setup for a horizontal bar since the bar change rate is 0 for y meaning no vertical change right->setBarChangeRate(ccp(1, 0)); addChild(right); right->setPosition(ccp(s.width-100, s.height/2)); right->runAction( CCRepeatForever::create(to2)); } std::string SpriteProgressToHorizontal::subtitle() { return "ProgressTo Horizontal"; } //------------------------------------------------------------------ // // SpriteProgressToVertical // //------------------------------------------------------------------ void SpriteProgressToVertical::onEnter() { SpriteDemo::onEnter(); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCProgressTo *to1 = CCProgressTo::create(2, 100); CCProgressTo *to2 = CCProgressTo::create(2, 100); CCProgressTimer *left = CCProgressTimer::create(CCSprite::create(s_pPathSister1)); left->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the bottom since the midpoint is 0 for the y left->setMidpoint(ccp(0,0)); // Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change left->setBarChangeRate(ccp(0, 1)); addChild(left); left->setPosition(ccp(100, s.height/2)); left->runAction( CCRepeatForever::create(to1)); CCProgressTimer *right = CCProgressTimer::create(CCSprite::create(s_pPathSister2)); right->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the bottom since the midpoint is 0 for the y right->setMidpoint(ccp(0, 1)); // Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change right->setBarChangeRate(ccp(0, 1)); addChild(right); right->setPosition(ccp(s.width-100, s.height/2)); right->runAction( CCRepeatForever::create(to2)); } std::string SpriteProgressToVertical::subtitle() { return "ProgressTo Vertical"; } //------------------------------------------------------------------ // // SpriteProgressToRadialMidpointChanged // //------------------------------------------------------------------ void SpriteProgressToRadialMidpointChanged::onEnter() { SpriteDemo::onEnter(); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCProgressTo *action = CCProgressTo::create(2, 100); /** * Our image on the left should be a radial progress indicator, clockwise */ CCProgressTimer *left = CCProgressTimer::create(CCSprite::create(s_pPathBlock)); left->setType(kCCProgressTimerTypeRadial); addChild(left); left->setMidpoint(ccp(0.25f, 0.75f)); left->setPosition(ccp(100, s.height/2)); left->runAction(CCRepeatForever::create((CCActionInterval *)action->copy()->autorelease())); /** * Our image on the left should be a radial progress indicator, counter clockwise */ CCProgressTimer *right = CCProgressTimer::create(CCSprite::create(s_pPathBlock)); right->setType(kCCProgressTimerTypeRadial); right->setMidpoint(ccp(0.75f, 0.25f)); /** * Note the reverse property (default=NO) is only added to the right image. That's how * we get a counter clockwise progress. */ addChild(right); right->setPosition(ccp(s.width-100, s.height/2)); right->runAction(CCRepeatForever::create((CCActionInterval *)action->copy()->autorelease())); } std::string SpriteProgressToRadialMidpointChanged::subtitle() { return "Radial w/ Different Midpoints"; } //------------------------------------------------------------------ // // SpriteProgressBarVarious // //------------------------------------------------------------------ void SpriteProgressBarVarious::onEnter() { SpriteDemo::onEnter(); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCProgressTo *to = CCProgressTo::create(2, 100); CCProgressTimer *left = CCProgressTimer::create(CCSprite::create(s_pPathSister1)); left->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the bottom since the midpoint is 0 for the y left->setMidpoint(ccp(0.5f, 0.5f)); // Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change left->setBarChangeRate(ccp(1, 0)); addChild(left); left->setPosition(ccp(100, s.height/2)); left->runAction(CCRepeatForever::create((CCActionInterval *)to->copy()->autorelease())); CCProgressTimer *middle = CCProgressTimer::create(CCSprite::create(s_pPathSister2)); middle->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the bottom since the midpoint is 0 for the y middle->setMidpoint(ccp(0.5f, 0.5f)); // Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change middle->setBarChangeRate(ccp(1,1)); addChild(middle); middle->setPosition(ccp(s.width/2, s.height/2)); middle->runAction(CCRepeatForever::create((CCActionInterval *)to->copy()->autorelease())); CCProgressTimer *right = CCProgressTimer::create(CCSprite::create(s_pPathSister2)); right->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the bottom since the midpoint is 0 for the y right->setMidpoint(ccp(0.5f, 0.5f)); // Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change right->setBarChangeRate(ccp(0, 1)); addChild(right); right->setPosition(ccp(s.width-100, s.height/2)); right->runAction(CCRepeatForever::create((CCActionInterval *)to->copy()->autorelease())); } std::string SpriteProgressBarVarious::subtitle() { return "ProgressTo Bar Mid"; } //------------------------------------------------------------------ // // SpriteProgressBarTintAndFade // //------------------------------------------------------------------ void SpriteProgressBarTintAndFade::onEnter() { SpriteDemo::onEnter(); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCProgressTo *to = CCProgressTo::create(6, 100); CCAction *tint = CCSequence::create(CCTintTo::create(1, 255, 0, 0), CCTintTo::create(1, 0, 255, 0), CCTintTo::create(1, 0, 0, 255), NULL); CCAction *fade = CCSequence::create(CCFadeTo::create(1.0f, 0), CCFadeTo::create(1.0f, 255), NULL); CCProgressTimer *left = CCProgressTimer::create(CCSprite::create(s_pPathSister1)); left->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the bottom since the midpoint is 0 for the y left->setMidpoint(ccp(0.5f, 0.5f)); // Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change left->setBarChangeRate(ccp(1, 0)); addChild(left); left->setPosition(ccp(100, s.height/2)); left->runAction(CCRepeatForever::create((CCActionInterval *)to->copy()->autorelease())); left->runAction(CCRepeatForever::create((CCActionInterval *)tint->copy()->autorelease())); left->addChild(CCLabelTTF::create("Tint", "Marker Felt", 20.0f)); CCProgressTimer *middle = CCProgressTimer::create(CCSprite::create(s_pPathSister2)); middle->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the bottom since the midpoint is 0 for the y middle->setMidpoint(ccp(0.5f, 0.5f)); // Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change middle->setBarChangeRate(ccp(1, 1)); addChild(middle); middle->setPosition(ccp(s.width/2, s.height/2)); middle->runAction(CCRepeatForever::create((CCActionInterval *)to->copy()->autorelease())); middle->runAction(CCRepeatForever::create((CCActionInterval *)fade->copy()->autorelease())); middle->addChild(CCLabelTTF::create("Fade", "Marker Felt", 20.0f)); CCProgressTimer *right = CCProgressTimer::create(CCSprite::create(s_pPathSister2)); right->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the bottom since the midpoint is 0 for the y right->setMidpoint(ccp(0.5f, 0.5f)); // Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change right->setBarChangeRate(ccp(0, 1)); addChild(right); right->setPosition(ccp(s.width-100, s.height/2)); right->runAction(CCRepeatForever::create((CCActionInterval *)to->copy()->autorelease())); right->runAction(CCRepeatForever::create((CCActionInterval *)tint->copy()->autorelease())); right->runAction(CCRepeatForever::create((CCActionInterval *)fade->copy()->autorelease())); right->addChild(CCLabelTTF::create("Tint and Fade", "Marker Felt", 20.0f)); } std::string SpriteProgressBarTintAndFade::subtitle() { return "ProgressTo Bar Mid"; } //------------------------------------------------------------------ // // SpriteProgressWithSpriteFrame // //------------------------------------------------------------------ void SpriteProgressWithSpriteFrame::onEnter() { SpriteDemo::onEnter(); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCProgressTo *to = CCProgressTo::create(6, 100); CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("zwoptex/grossini.plist"); CCProgressTimer *left = CCProgressTimer::create(CCSprite::createWithSpriteFrameName("grossini_dance_01.png")); left->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the bottom since the midpoint is 0 for the y left->setMidpoint(ccp(0.5f, 0.5f)); // Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change left->setBarChangeRate(ccp(1, 0)); addChild(left); left->setPosition(ccp(100, s.height/2)); left->runAction(CCRepeatForever::create((CCActionInterval *)to->copy()->autorelease())); CCProgressTimer *middle = CCProgressTimer::create(CCSprite::createWithSpriteFrameName("grossini_dance_02.png")); middle->setType(kCCProgressTimerTypeBar); // Setup for a bar starting from the bottom since the midpoint is 0 for the y middle->setMidpoint(ccp(0.5f, 0.5f)); // Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change middle->setBarChangeRate(ccp(1, 1)); addChild(middle); middle->setPosition(ccp(s.width/2, s.height/2)); middle->runAction(CCRepeatForever::create((CCActionInterval *)to->copy()->autorelease())); CCProgressTimer *right = CCProgressTimer::create(CCSprite::createWithSpriteFrameName("grossini_dance_03.png")); right->setType(kCCProgressTimerTypeRadial); // Setup for a bar starting from the bottom since the midpoint is 0 for the y right->setMidpoint(ccp(0.5f, 0.5f)); // Setup for a vertical bar since the bar change rate is 0 for x meaning no horizontal change right->setBarChangeRate(ccp(0, 1)); addChild(right); right->setPosition(ccp(s.width-100, s.height/2)); right->runAction(CCRepeatForever::create((CCActionInterval *)to->copy()->autorelease())); } std::string SpriteProgressWithSpriteFrame::subtitle() { return "Progress With Sprite Frame"; }