mirror of https://github.com/axmolengine/axmol.git
232 lines
7.2 KiB
C++
232 lines
7.2 KiB
C++
#include "controller.h"
|
|
#include "testResource.h"
|
|
#include "tests.h"
|
|
|
|
#define LINE_SPACE 40
|
|
|
|
static CCPoint s_tCurPos = CCPointZero;
|
|
|
|
static TestScene* CreateTestScene(int nIdx)
|
|
{
|
|
CCDirector::sharedDirector()->purgeCachedData();
|
|
|
|
TestScene* pScene = NULL;
|
|
|
|
switch (nIdx)
|
|
{
|
|
case TEST_ACTIONS:
|
|
pScene = new ActionsTestScene(); break;
|
|
case TEST_TRANSITIONS:
|
|
pScene = new TransitionsTestScene(); break;
|
|
case TEST_PROGRESS_ACTIONS:
|
|
pScene = new ProgressActionsTestScene(); break;
|
|
case TEST_EFFECTS:
|
|
pScene = new EffectTestScene(); break;
|
|
case TEST_CLICK_AND_MOVE:
|
|
pScene = new ClickAndMoveTestScene(); break;
|
|
case TEST_ROTATE_WORLD:
|
|
pScene = new RotateWorldTestScene(); break;
|
|
case TEST_PARTICLE:
|
|
pScene = new ParticleTestScene(); break;
|
|
case TEST_EASE_ACTIONS:
|
|
pScene = new ActionsEaseTestScene(); break;
|
|
case TEST_MOTION_STREAK:
|
|
pScene = new MotionStreakTestScene(); break;
|
|
case TEST_DRAW_PRIMITIVES:
|
|
pScene = new DrawPrimitivesTestScene(); break;
|
|
case TEST_COCOSNODE:
|
|
pScene = new CocosNodeTestScene(); break;
|
|
case TEST_TOUCHES:
|
|
pScene = new PongScene(); break;
|
|
case TEST_MENU:
|
|
pScene = new MenuTestScene(); break;
|
|
case TEST_ACTION_MANAGER:
|
|
pScene = new ActionManagerTestScene(); break;
|
|
case TEST_LAYER:
|
|
pScene = new LayerTestScene(); break;
|
|
case TEST_SCENE:
|
|
pScene = new SceneTestScene(); break;
|
|
case TEST_PARALLAX:
|
|
pScene = new ParallaxTestScene(); break;
|
|
case TEST_TILE_MAP:
|
|
pScene = new TileMapTestScene(); break;
|
|
case TEST_INTERVAL:
|
|
pScene = new IntervalTestScene(); break;
|
|
case TEST_LABEL:
|
|
pScene = new AtlasTestScene(); break;
|
|
case TEST_TEXT_INPUT:
|
|
pScene = new TextInputTestScene(); break;
|
|
case TEST_SPRITE:
|
|
pScene = new SpriteTestScene(); break;
|
|
case TEST_SCHEDULER:
|
|
pScene = new SchedulerTestScene(); break;
|
|
case TEST_RENDERTEXTURE:
|
|
pScene = new RenderTextureScene(); break;
|
|
case TEST_TEXTURE2D:
|
|
pScene = new TextureTestScene(); break;
|
|
#if (CC_TARGET_PLATFORM != CC_PLATFORM_MARMALADE)
|
|
case TEST_CHIPMUNK:
|
|
pScene = new ChipmunkAccelTouchTestScene(); break;
|
|
#endif
|
|
case TEST_BOX2D:
|
|
pScene = new Box2DTestScene(); break;
|
|
case TEST_BOX2DBED:
|
|
pScene = new Box2dTestBedScene(); break;
|
|
case TEST_EFFECT_ADVANCE:
|
|
pScene = new EffectAdvanceScene(); break;
|
|
case TEST_ACCELEROMRTER:
|
|
pScene = new AccelerometerTestScene(); break;
|
|
#if (CC_TARGET_PLATFORM != CC_PLATFORM_BADA)
|
|
case TEST_KEYPAD:
|
|
pScene = new KeypadTestScene(); break;
|
|
#endif
|
|
case TEST_COCOSDENSHION:
|
|
pScene = new CocosDenshionTestScene(); break;
|
|
case TEST_PERFORMANCE:
|
|
pScene = new PerformanceTestScene(); break;
|
|
case TEST_ZWOPTEX:
|
|
pScene = new ZwoptexTestScene(); break;
|
|
// bada don't support libcurl
|
|
#if (CC_TARGET_PLATFORM != CC_PLATFORM_BADA && CC_TARGET_PLATFORM != CC_PLATFORM_NACL && CC_TARGET_PLATFORM != CC_PLATFORM_MARMALADE && CC_TARGET_PLATFORM != CC_PLATFORM_EMSCRIPTEN)
|
|
case TEST_CURL:
|
|
pScene = new CurlTestScene(); break;
|
|
#endif
|
|
case TEST_USERDEFAULT:
|
|
pScene = new UserDefaultTestScene(); break;
|
|
case TEST_BUGS:
|
|
pScene = new BugsTestScene(); break;
|
|
case TEST_FONTS:
|
|
pScene = new FontTestScene(); break;
|
|
case TEST_CURRENT_LANGUAGE:
|
|
pScene = new CurrentLanguageTestScene(); break;
|
|
#if (CC_TARGET_PLATFORM != CC_PLATFORM_MARMALADE)
|
|
case TEST_TEXTURECACHE: pScene = new TextureCacheTestScene(); break;
|
|
#endif
|
|
case TEST_EXTENSIONS:
|
|
pScene = new ExtensionsTestScene();
|
|
break;
|
|
case TEST_SHADER:
|
|
pScene = new ShaderTestScene();
|
|
break;
|
|
case TEST_MUTITOUCH:
|
|
pScene = new MutiTouchTestScene();
|
|
break;
|
|
#if (CC_TARGET_PLATFORM != CC_PLATFORM_MARMALADE)
|
|
case TEST_CLIPPINGNODE:
|
|
pScene = new ClippingNodeTestScene();
|
|
break;
|
|
#endif
|
|
case TEST_FILEUTILS:
|
|
pScene = new FileUtilsTestScene();
|
|
break;
|
|
case TEST_SPINE:
|
|
pScene = new SpineTestScene();
|
|
break;
|
|
case TEST_TEXTUREPACKER_ENCRYPTION:
|
|
pScene = new TextureAtlasEncryptionTestScene();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return pScene;
|
|
}
|
|
|
|
TestController::TestController()
|
|
: m_tBeginPos(CCPointZero)
|
|
{
|
|
// add close menu
|
|
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(s_pPathClose, s_pPathClose, this, menu_selector(TestController::closeCallback) );
|
|
CCMenu* pMenu =CCMenu::create(pCloseItem, NULL);
|
|
|
|
pMenu->setPosition( CCPointZero );
|
|
pCloseItem->setPosition(ccp( VisibleRect::right().x - 30, VisibleRect::top().y - 30));
|
|
|
|
// add menu items for tests
|
|
m_pItemMenu = CCMenu::create();
|
|
for (int i = 0; i < TESTS_COUNT; ++i)
|
|
{
|
|
// #if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
|
|
// CCLabelBMFont* label = CCLabelBMFont::create(g_aTestNames[i].c_str(), "fonts/arial16.fnt");
|
|
// #else
|
|
CCLabelTTF* label = CCLabelTTF::create(g_aTestNames[i].c_str(), "Arial", 24);
|
|
// #endif
|
|
CCMenuItemLabel* pMenuItem = CCMenuItemLabel::create(label, this, menu_selector(TestController::menuCallback));
|
|
|
|
m_pItemMenu->addChild(pMenuItem, i + 10000);
|
|
pMenuItem->setPosition( ccp( VisibleRect::center().x, (VisibleRect::top().y - (i + 1) * LINE_SPACE) ));
|
|
}
|
|
|
|
m_pItemMenu->setContentSize(CCSizeMake(VisibleRect::getVisibleRect().size.width, (TESTS_COUNT + 1) * (LINE_SPACE)));
|
|
m_pItemMenu->setPosition(s_tCurPos);
|
|
addChild(m_pItemMenu);
|
|
|
|
setTouchEnabled(true);
|
|
|
|
addChild(pMenu, 1);
|
|
|
|
}
|
|
|
|
TestController::~TestController()
|
|
{
|
|
}
|
|
|
|
void TestController::menuCallback(CCObject * pSender)
|
|
{
|
|
// get the userdata, it's the index of the menu item clicked
|
|
CCMenuItem* pMenuItem = (CCMenuItem *)(pSender);
|
|
int nIdx = pMenuItem->getZOrder() - 10000;
|
|
|
|
// create the test scene and run it
|
|
TestScene* pScene = CreateTestScene(nIdx);
|
|
if (pScene)
|
|
{
|
|
pScene->runThisTest();
|
|
pScene->release();
|
|
}
|
|
}
|
|
|
|
void TestController::closeCallback(CCObject * pSender)
|
|
{
|
|
CCDirector::sharedDirector()->end();
|
|
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
|
|
exit(0);
|
|
#endif
|
|
}
|
|
|
|
void TestController::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)
|
|
{
|
|
CCSetIterator it = pTouches->begin();
|
|
CCTouch* touch = (CCTouch*)(*it);
|
|
|
|
m_tBeginPos = touch->getLocation();
|
|
}
|
|
|
|
void TestController::ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent)
|
|
{
|
|
CCSetIterator it = pTouches->begin();
|
|
CCTouch* touch = (CCTouch*)(*it);
|
|
|
|
CCPoint touchLocation = touch->getLocation();
|
|
float nMoveY = touchLocation.y - m_tBeginPos.y;
|
|
|
|
CCPoint curPos = m_pItemMenu->getPosition();
|
|
CCPoint nextPos = ccp(curPos.x, curPos.y + nMoveY);
|
|
|
|
if (nextPos.y < 0.0f)
|
|
{
|
|
m_pItemMenu->setPosition(CCPointZero);
|
|
return;
|
|
}
|
|
|
|
if (nextPos.y > ((TESTS_COUNT + 1)* LINE_SPACE - VisibleRect::getVisibleRect().size.height))
|
|
{
|
|
m_pItemMenu->setPosition(ccp(0, ((TESTS_COUNT + 1)* LINE_SPACE - VisibleRect::getVisibleRect().size.height)));
|
|
return;
|
|
}
|
|
|
|
m_pItemMenu->setPosition(nextPos);
|
|
m_tBeginPos = touchLocation;
|
|
s_tCurPos = nextPos;
|
|
}
|