mirror of https://github.com/axmolengine/axmol.git
603 lines
14 KiB
C++
603 lines
14 KiB
C++
#include "SchedulerTest.h"
|
|
#include "../testResource.h"
|
|
|
|
enum {
|
|
kTagAnimationDance = 1,
|
|
};
|
|
|
|
#define MAX_TESTS 8
|
|
static int sceneIdx = -1;
|
|
|
|
CCLayer* createSchedulerTest(int nIndex)
|
|
{
|
|
CCLayer* pLayer = NULL;
|
|
|
|
switch (nIndex)
|
|
{
|
|
case 0:
|
|
pLayer = new SchedulerAutoremove(); break;
|
|
case 1:
|
|
pLayer = new SchedulerPauseResume(); break;
|
|
case 2:
|
|
pLayer = new SchedulerUnscheduleAll(); break;
|
|
case 3:
|
|
pLayer = new SchedulerUnscheduleAllHard(); break;
|
|
case 4:
|
|
pLayer = new SchedulerSchedulesAndRemove(); break;
|
|
case 5:
|
|
pLayer = new SchedulerUpdate(); break;
|
|
case 6:
|
|
pLayer = new SchedulerUpdateAndCustom(); break;
|
|
case 7:
|
|
pLayer = new SchedulerUpdateFromCustom(); break;
|
|
default:
|
|
break;
|
|
}
|
|
pLayer->autorelease();
|
|
|
|
return pLayer;
|
|
}
|
|
|
|
CCLayer* nextSchedulerTest()
|
|
{
|
|
|
|
sceneIdx++;
|
|
sceneIdx = sceneIdx % MAX_TESTS;
|
|
|
|
return createSchedulerTest(sceneIdx);
|
|
}
|
|
|
|
CCLayer* backSchedulerTest()
|
|
{
|
|
sceneIdx--;
|
|
if( sceneIdx < 0 )
|
|
sceneIdx += MAX_TESTS;
|
|
|
|
return createSchedulerTest(sceneIdx);
|
|
}
|
|
|
|
CCLayer* restartSchedulerTest()
|
|
{
|
|
return createSchedulerTest(sceneIdx);
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// SchedulerTestLayer
|
|
//
|
|
//------------------------------------------------------------------
|
|
void SchedulerTestLayer::onEnter()
|
|
{
|
|
CCLayer::onEnter();
|
|
|
|
CGSize s = CCDirector::getSharedDirector()->getWinSize();
|
|
|
|
CCLabel* label = CCLabel::labelWithString(title().c_str(), "Arial", 32);
|
|
addChild(label);
|
|
label->setPosition(ccp(s.width/2, s.height-50));
|
|
|
|
std::string subTitle = subtitle();
|
|
if(! subTitle.empty())
|
|
{
|
|
CCLabel* l = CCLabel::labelWithString(subTitle.c_str(), "Thonburi", 16);
|
|
addChild(l, 1);
|
|
l->setPosition(ccp(s.width/2, s.height-80));
|
|
}
|
|
|
|
CCMenuItemImage *item1 = CCMenuItemImage::itemFromNormalImage("Images/b1.png", "Images/b2.png", this, menu_selector(SchedulerTestLayer::backCallback));
|
|
CCMenuItemImage *item2 = CCMenuItemImage::itemFromNormalImage("Images/r1.png","Images/r2.png", this, menu_selector(SchedulerTestLayer::restartCallback) );
|
|
CCMenuItemImage *item3 = CCMenuItemImage::itemFromNormalImage("Images/f1.png", "Images/f2.png", this, menu_selector(SchedulerTestLayer::nextCallback) );
|
|
|
|
CCMenu *menu = CCMenu::menuWithItems(item1, item2, item3, NULL);
|
|
menu->setPosition(CGPointZero);
|
|
item1->setPosition(ccp( s.width/2 - 100,30));
|
|
item2->setPosition(ccp( s.width/2, 30));
|
|
item3->setPosition(ccp( s.width/2 + 100,30));
|
|
|
|
addChild(menu, 1);
|
|
}
|
|
|
|
void SchedulerTestLayer::backCallback(NSObject* pSender)
|
|
{
|
|
CCScene* pScene = new SchedulerTestScene();
|
|
CCLayer* pLayer = backSchedulerTest();
|
|
|
|
pScene->addChild(pLayer);
|
|
CCDirector::getSharedDirector()->replaceScene(pScene);
|
|
pScene->release();
|
|
}
|
|
|
|
void SchedulerTestLayer::nextCallback(NSObject* pSender)
|
|
{
|
|
CCScene* pScene = new SchedulerTestScene();
|
|
CCLayer* pLayer = nextSchedulerTest();
|
|
|
|
pScene->addChild(pLayer);
|
|
CCDirector::getSharedDirector()->replaceScene(pScene);
|
|
pScene->release();
|
|
}
|
|
|
|
void SchedulerTestLayer::restartCallback(NSObject* pSender)
|
|
{
|
|
CCScene* pScene = new SchedulerTestScene();
|
|
CCLayer* pLayer = restartSchedulerTest();
|
|
|
|
pScene->addChild(pLayer);
|
|
CCDirector::getSharedDirector()->replaceScene(pScene);
|
|
pScene->release();
|
|
}
|
|
|
|
std::string SchedulerTestLayer::title()
|
|
{
|
|
return "No title";
|
|
}
|
|
|
|
std::string SchedulerTestLayer::subtitle()
|
|
{
|
|
return "";
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// SchedulerAutoremove
|
|
//
|
|
//------------------------------------------------------------------
|
|
void SchedulerAutoremove::onEnter()
|
|
{
|
|
SchedulerTestLayer::onEnter();
|
|
|
|
schedule(schedule_selector(SchedulerAutoremove::autoremove), 0.5f);
|
|
schedule(schedule_selector(SchedulerAutoremove::tick), 0.5f);
|
|
accum = 0;
|
|
}
|
|
|
|
void SchedulerAutoremove::autoremove(ccTime dt)
|
|
{
|
|
accum += dt;
|
|
////NSLog(@"Time: %f", accum);
|
|
|
|
if( accum > 3 )
|
|
{
|
|
unschedule(schedule_selector(SchedulerAutoremove::autoremove));
|
|
////NSLog(@"scheduler removed");
|
|
}
|
|
}
|
|
|
|
void SchedulerAutoremove::tick(ccTime dt)
|
|
{
|
|
////NSLog(@"This scheduler should not be removed");
|
|
}
|
|
|
|
std::string SchedulerAutoremove::title()
|
|
{
|
|
return "Self-remove an scheduler";
|
|
}
|
|
|
|
std::string SchedulerAutoremove::subtitle()
|
|
{
|
|
return "1 scheduler will be autoremoved in 3 seconds. See console";
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// SchedulerPauseResume
|
|
//
|
|
//------------------------------------------------------------------
|
|
void SchedulerPauseResume::onEnter()
|
|
{
|
|
SchedulerTestLayer::onEnter();
|
|
|
|
schedule(schedule_selector(SchedulerPauseResume::tick1), 0.5f);
|
|
schedule(schedule_selector(SchedulerPauseResume::tick2), 0.5f);
|
|
schedule(schedule_selector(SchedulerPauseResume::pause), 0.5f);
|
|
}
|
|
|
|
void SchedulerPauseResume::tick1(ccTime dt)
|
|
{
|
|
////NSLog(@"tick1");
|
|
}
|
|
|
|
void SchedulerPauseResume::tick2(ccTime dt)
|
|
{
|
|
////NSLog(@"tick1");
|
|
}
|
|
|
|
void SchedulerPauseResume::pause(ccTime dt)
|
|
{
|
|
CCScheduler::getSharedScheduler()->pauseTarget(this);
|
|
}
|
|
|
|
std::string SchedulerPauseResume::title()
|
|
{
|
|
return "Pause / Resume";
|
|
}
|
|
|
|
std::string SchedulerPauseResume::subtitle()
|
|
{
|
|
return "Scheduler should be paused after 3 seconds. See console";
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// SchedulerUnscheduleAll
|
|
//
|
|
//------------------------------------------------------------------
|
|
void SchedulerUnscheduleAll::onEnter()
|
|
{
|
|
SchedulerTestLayer::onEnter();
|
|
|
|
schedule(schedule_selector(SchedulerUnscheduleAll::tick1), 0.5f);
|
|
schedule(schedule_selector(SchedulerUnscheduleAll::tick2), 1.0f);
|
|
schedule(schedule_selector(SchedulerUnscheduleAll::tick3), 1.5f);
|
|
schedule(schedule_selector(SchedulerUnscheduleAll::tick4), 1.5f);
|
|
schedule(schedule_selector(SchedulerUnscheduleAll::unscheduleAll), 4);
|
|
}
|
|
|
|
void SchedulerUnscheduleAll::tick1(ccTime dt)
|
|
{
|
|
////NSLog(@"tick1");
|
|
}
|
|
|
|
void SchedulerUnscheduleAll::tick2(ccTime dt)
|
|
{
|
|
////NSLog(@"tick2");
|
|
}
|
|
|
|
void SchedulerUnscheduleAll::tick3(ccTime dt)
|
|
{
|
|
////NSLog(@"tick3");
|
|
}
|
|
|
|
void SchedulerUnscheduleAll::tick4(ccTime dt)
|
|
{
|
|
////NSLog(@"tick4");
|
|
}
|
|
|
|
void SchedulerUnscheduleAll::unscheduleAll(ccTime dt)
|
|
{
|
|
unscheduleAllSelectors();
|
|
}
|
|
|
|
std::string SchedulerUnscheduleAll::title()
|
|
{
|
|
return "Unschedule All selectors";
|
|
}
|
|
|
|
std::string SchedulerUnscheduleAll::subtitle()
|
|
{
|
|
return "All scheduled selectors will be unscheduled in 4 seconds. See console";
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// SchedulerUnscheduleAllHard
|
|
//
|
|
//------------------------------------------------------------------
|
|
void SchedulerUnscheduleAllHard::onEnter()
|
|
{
|
|
SchedulerTestLayer::onEnter();
|
|
|
|
schedule(schedule_selector(SchedulerUnscheduleAllHard::tick1), 0.5f);
|
|
schedule(schedule_selector(SchedulerUnscheduleAllHard::tick2), 1.0f);
|
|
schedule(schedule_selector(SchedulerUnscheduleAllHard::tick3), 1.5f);
|
|
schedule(schedule_selector(SchedulerUnscheduleAllHard::tick4), 1.5f);
|
|
schedule(schedule_selector(SchedulerUnscheduleAllHard::unscheduleAll), 4);
|
|
}
|
|
|
|
void SchedulerUnscheduleAllHard::tick1(ccTime dt)
|
|
{
|
|
////NSLog(@"tick1");
|
|
}
|
|
|
|
void SchedulerUnscheduleAllHard::tick2(ccTime dt)
|
|
{
|
|
////NSLog(@"tick2");
|
|
}
|
|
|
|
void SchedulerUnscheduleAllHard::tick3(ccTime dt)
|
|
{
|
|
////NSLog(@"tick3");
|
|
}
|
|
|
|
void SchedulerUnscheduleAllHard::tick4(ccTime dt)
|
|
{
|
|
////NSLog(@"tick4");
|
|
}
|
|
|
|
void SchedulerUnscheduleAllHard::unscheduleAll(ccTime dt)
|
|
{
|
|
CCScheduler::getSharedScheduler()->unscheduleAllSelectors();
|
|
}
|
|
|
|
std::string SchedulerUnscheduleAllHard::title()
|
|
{
|
|
return "Unschedule All selectors #2";
|
|
}
|
|
|
|
std::string SchedulerUnscheduleAllHard::subtitle()
|
|
{
|
|
return "Unschedules all selectors after 4s. Uses CCScheduler. See console";
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// SchedulerSchedulesAndRemove
|
|
//
|
|
//------------------------------------------------------------------
|
|
void SchedulerSchedulesAndRemove::onEnter()
|
|
{
|
|
SchedulerTestLayer::onEnter();
|
|
|
|
schedule(schedule_selector(SchedulerSchedulesAndRemove::tick1), 0.5f);
|
|
schedule(schedule_selector(SchedulerSchedulesAndRemove::tick2), 1.0f);
|
|
schedule(schedule_selector(SchedulerSchedulesAndRemove::scheduleAndUnschedule), 4.0f);
|
|
}
|
|
|
|
void SchedulerSchedulesAndRemove::tick1(ccTime dt)
|
|
{
|
|
////NSLog(@"tick1");
|
|
}
|
|
|
|
void SchedulerSchedulesAndRemove::tick2(ccTime dt)
|
|
{
|
|
////NSLog(@"tick2");
|
|
}
|
|
|
|
void SchedulerSchedulesAndRemove::tick3(ccTime dt)
|
|
{
|
|
////NSLog(@"tick3");
|
|
}
|
|
|
|
void SchedulerSchedulesAndRemove::tick4(ccTime dt)
|
|
{
|
|
////NSLog(@"tick4");
|
|
}
|
|
|
|
std::string SchedulerSchedulesAndRemove::title()
|
|
{
|
|
return "Schedule from Schedule";
|
|
}
|
|
|
|
std::string SchedulerSchedulesAndRemove::subtitle()
|
|
{
|
|
return "Will unschedule and schedule selectors in 4s. See console";
|
|
}
|
|
|
|
void SchedulerSchedulesAndRemove::scheduleAndUnschedule(ccTime dt)
|
|
{
|
|
unschedule(schedule_selector(SchedulerSchedulesAndRemove::tick1));
|
|
unschedule(schedule_selector(SchedulerSchedulesAndRemove::tick2));
|
|
unschedule(schedule_selector(SchedulerSchedulesAndRemove::scheduleAndUnschedule));
|
|
|
|
schedule(schedule_selector(SchedulerSchedulesAndRemove::tick3), 1.0f);
|
|
schedule(schedule_selector(SchedulerSchedulesAndRemove::tick4), 1.0f);
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// TestNode
|
|
//
|
|
//------------------------------------------------------------------
|
|
void TestNode::initWithString(NSString* pStr, int priority)
|
|
{
|
|
m_pstring = pStr;
|
|
m_pstring->retain();
|
|
scheduleUpdateWithPriority(priority);
|
|
}
|
|
|
|
TestNode::~TestNode()
|
|
{
|
|
m_pstring->release();
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// SchedulerUpdate
|
|
//
|
|
//------------------------------------------------------------------
|
|
void SchedulerUpdate::onEnter()
|
|
{
|
|
SchedulerTestLayer::onEnter();
|
|
|
|
TestNode* d = new TestNode();
|
|
NSString* pStr = new NSString("---");
|
|
d->initWithString(pStr, 50);
|
|
pStr->release();
|
|
addChild(d);
|
|
d->release();
|
|
|
|
TestNode* b = new TestNode();
|
|
pStr = new NSString("3rd");
|
|
b->initWithString(pStr, 0);
|
|
pStr->release();
|
|
addChild(b);
|
|
b->release();
|
|
|
|
TestNode* a = new TestNode();
|
|
pStr = new NSString("1st");
|
|
a->initWithString(pStr, -10);
|
|
pStr->release();
|
|
addChild(a);
|
|
a->release();
|
|
|
|
TestNode* c = new TestNode();
|
|
pStr = new NSString("4th");
|
|
c->initWithString(pStr, 10);
|
|
pStr->release();
|
|
addChild(c);
|
|
c->release();
|
|
|
|
TestNode* e = new TestNode();
|
|
pStr = new NSString("5th");
|
|
e->initWithString(pStr, 20);
|
|
pStr->release();
|
|
addChild(e);
|
|
e->release();
|
|
|
|
TestNode* f = new TestNode();
|
|
pStr = new NSString("2nd");
|
|
f->initWithString(pStr, -5);
|
|
pStr->release();
|
|
addChild(f);
|
|
f->release();
|
|
|
|
schedule(schedule_selector(SchedulerUpdate::removeUpdates), 4.0f);
|
|
}
|
|
|
|
void SchedulerUpdate::removeUpdates(ccTime dt)
|
|
{
|
|
NSMutableArray<CCNode*> * children = getChildren();
|
|
NSMutableArray<CCNode*>::NSMutableArrayIterator it;
|
|
|
|
CCNode* pNode;
|
|
for (it = children->begin(); it != children->end(); it++)
|
|
{
|
|
pNode = (CCNode*)(*it);
|
|
|
|
if (! pNode)
|
|
{
|
|
break;
|
|
}
|
|
pNode->unscheduleAllSelectors();
|
|
}
|
|
}
|
|
|
|
std::string SchedulerUpdate::title()
|
|
{
|
|
return "Schedule update with priority";
|
|
}
|
|
|
|
std::string SchedulerUpdate::subtitle()
|
|
{
|
|
return "3 scheduled updates. Priority should work. Stops in 4s. See console";
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// SchedulerUpdateAndCustom
|
|
//
|
|
//------------------------------------------------------------------
|
|
void SchedulerUpdateAndCustom::onEnter()
|
|
{
|
|
SchedulerTestLayer::onEnter();
|
|
|
|
scheduleUpdate();
|
|
schedule(schedule_selector(SchedulerUpdateAndCustom::tick));
|
|
schedule(schedule_selector(SchedulerUpdateAndCustom::stopSelectors), 0.4f);
|
|
}
|
|
|
|
void SchedulerUpdateAndCustom::update(ccTime dt)
|
|
{
|
|
////NSLog(@"update called:%f", dt);
|
|
}
|
|
|
|
void SchedulerUpdateAndCustom::tick(ccTime dt)
|
|
{
|
|
////NSLog(@"custom selector called:%f",dt);
|
|
}
|
|
|
|
void SchedulerUpdateAndCustom::stopSelectors(ccTime dt)
|
|
{
|
|
unscheduleAllSelectors();
|
|
}
|
|
|
|
std::string SchedulerUpdateAndCustom::title()
|
|
{
|
|
return "Schedule Update + custom selector";
|
|
}
|
|
|
|
std::string SchedulerUpdateAndCustom::subtitle()
|
|
{
|
|
return "Update + custom selector at the same time. Stops in 4s. See console";
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// SchedulerUpdateFromCustom
|
|
//
|
|
//------------------------------------------------------------------
|
|
void SchedulerUpdateFromCustom::onEnter()
|
|
{
|
|
SchedulerTestLayer::onEnter();
|
|
|
|
schedule(schedule_selector(SchedulerUpdateFromCustom::schedUpdate), 2.0f);
|
|
}
|
|
|
|
void SchedulerUpdateFromCustom::update(ccTime dt)
|
|
{
|
|
////NSLog(@"update called:%f", dt);
|
|
}
|
|
|
|
void SchedulerUpdateFromCustom::schedUpdate(ccTime dt)
|
|
{
|
|
unschedule(schedule_selector(SchedulerUpdateFromCustom::schedUpdate));
|
|
scheduleUpdate();
|
|
schedule(schedule_selector(SchedulerUpdateFromCustom::stopUpdate), 2.0f);
|
|
}
|
|
|
|
void SchedulerUpdateFromCustom::stopUpdate(ccTime dt)
|
|
{
|
|
unscheduleUpdate();
|
|
unschedule(schedule_selector(SchedulerUpdateFromCustom::stopUpdate));
|
|
}
|
|
|
|
std::string SchedulerUpdateFromCustom::title()
|
|
{
|
|
return "Schedule Update in 2 sec";
|
|
}
|
|
|
|
std::string SchedulerUpdateFromCustom::subtitle()
|
|
{
|
|
return "Update schedules in 2 secs. Stops 2 sec later. See console";
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// RescheduleSelector
|
|
//
|
|
//------------------------------------------------------------------
|
|
void RescheduleSelector::onEnter()
|
|
{
|
|
SchedulerTestLayer::onEnter();
|
|
|
|
m_fInterval = 1.0f;
|
|
m_nTicks = 0;
|
|
schedule(schedule_selector(RescheduleSelector::schedUpdate), m_fInterval);
|
|
}
|
|
|
|
std::string RescheduleSelector::title()
|
|
{
|
|
return "Reschedule Selector";
|
|
}
|
|
|
|
std::string RescheduleSelector::subtitle()
|
|
{
|
|
return "Interval is 1 second, then 2, then 3...";
|
|
}
|
|
|
|
void RescheduleSelector::schedUpdate(ccTime dt)
|
|
{
|
|
m_nTicks++;
|
|
|
|
//CCLOG(@"schedUpdate: %.2f", dt);
|
|
if ( m_nTicks > 3 )
|
|
{
|
|
m_fInterval += 1.0f;
|
|
schedule(schedule_selector(RescheduleSelector::schedUpdate), m_fInterval);
|
|
m_nTicks = 0;
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
//
|
|
// SchedulerTestScene
|
|
//
|
|
//------------------------------------------------------------------
|
|
void SchedulerTestScene::runThisTest()
|
|
{
|
|
CCLayer* pLayer = nextSchedulerTest();
|
|
addChild(pLayer);
|
|
|
|
CCDirector::getSharedDirector()->replaceScene(this);
|
|
}
|