Skip to content

Instantly share code, notes, and snippets.

@tks2shimizu
Created March 22, 2013 05:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tks2shimizu/b27c1d656dd6ad0670d1 to your computer and use it in GitHub Desktop.
Save tks2shimizu/b27c1d656dd6ad0670d1 to your computer and use it in GitHub Desktop.
NyanRun (6)
//
// GameLayer.cpp
// nyanrun
//
// Created by Tomoaki Shimizu on 2013/02/05.
// Copyright TKS2 2013. All rights reserved.
//
#include "GameLayer.h"
#include "GameLayerLoader.h"
GameLayer::GameLayer()
: mBg1(NULL)
, mBg2(NULL)
, mBg3(NULL)
, mAnimationManager(NULL)
, mLeftButton(NULL)
, mRightButton(NULL)
, mTimeLabel(NULL)
, mDistanceLabel(NULL)
{
}
GameLayer::~GameLayer()
{
CC_SAFE_RELEASE(mBg1);
CC_SAFE_RELEASE(mBg2);
CC_SAFE_RELEASE(mBg3);
CC_SAFE_RELEASE_NULL(mAnimationManager);
CC_SAFE_RELEASE(mLeftButton);
CC_SAFE_RELEASE(mRightButton);
CC_SAFE_RELEASE(mTimeLabel);
CC_SAFE_RELEASE(mDistanceLabel);
}
SEL_MenuHandler GameLayer::onResolveCCBCCMenuItemSelector(CCObject* pTarget, const char* pSelectorName)
{
CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "tappedLeftFoot", GameLayer::tappedLeftButton);
CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "tappedRightFoot", GameLayer::tappedRightButton);
CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, "tappedReset", GameLayer::tappedResetButton);
return NULL;
}
void GameLayer::tappedLeftButton(CCObject* pSender, CCControlEvent pCCControlEvent)
{
tappedButton(FOOT_LEFTFOOT);
}
void GameLayer::tappedRightButton(CCObject* pSender, CCControlEvent pCCControlEvent)
{
tappedButton(FOOT_RIGHTFOOT);
}
void GameLayer::tappedButton(EFoot currentFoot)
{
if (mCount == 0)
schedule(schedule_selector(GameLayer::timer));
if (mBeforeFoot == currentFoot)
{
mAnimationManager->runAnimationsForSequenceNamedTweenDuration("Tumble", 0);
mBeforeFoot = FOOT_UNKNOWN;
mLeftButton->setEnabled(false);
mRightButton->setEnabled(false);
scheduleOnce(schedule_selector(GameLayer::changeTappable), 1.0);
}
else
{
mCount++;
mDistanceLabel->setString(CCString::createWithFormat("%.1fm", mCount * 0.5)->getCString());
if (mCount >= GOAL_COUNT)
{
unschedule(schedule_selector(GameLayer::timer));
mAnimationManager->runAnimationsForSequenceNamedTweenDuration("Goal", 0);
mLeftButton->setEnabled(false);
mRightButton->setEnabled(false);
return;
}
mBeforeFoot = currentFoot;
switch (currentFoot)
{
case FOOT_LEFTFOOT:
mAnimationManager->runAnimationsForSequenceNamedTweenDuration("Leftfoot", 0);
break;
case FOOT_RIGHTFOOT:
mAnimationManager->runAnimationsForSequenceNamedTweenDuration("Rightfoot", 0);
break;
default:
return;
}
float moveTime = 1.0 / 3;
float moveDistanceForBG3 = (this->mBg3->getContentSize().width - CCDirector::sharedDirector()->getWinSize().width) / GOAL_COUNT;
CCMoveBy* move1 = CCMoveBy::create(moveTime, ccp(-moveDistanceForBG3 / 4, 0));
this->mBg1->runAction(move1);
CCMoveBy* move2 = CCMoveBy::create(moveTime, ccp(-moveDistanceForBG3 / 2, 0));
this->mBg2->runAction(move2);
CCMoveBy* move3 = CCMoveBy::create(moveTime, ccp(-moveDistanceForBG3, 0));
this->mBg3->runAction(move3);
float moveDistanceForCat = CCDirector::sharedDirector()->getWinSize().width / 2 / GOAL_COUNT;
CCNode* cat = this->getChildByTag(1);
CCMoveBy* move = CCMoveBy::create(moveTime, ccp(moveDistanceForCat, 0));
cat->runAction(move);
}
}
SEL_CCControlHandler GameLayer::onResolveCCBCCControlSelector(CCObject* pTarget, const char* pSelectorName)
{
return NULL;
}
bool GameLayer::onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode)
{
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mBg1", CCSprite*, this->mBg1);
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mBg2", CCSprite*, this->mBg2);
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mBg3", CCSprite*, this->mBg3);
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mLeftButton", CCMenuItemImage*, this->mLeftButton);
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mRightButton", CCMenuItemImage*, this->mRightButton);
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mTime", CCLabelTTF*, this->mTimeLabel);
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mDistance", CCLabelTTF*, this->mDistanceLabel);
return false;
}
void GameLayer::setAnimationManager(CCBAnimationManager *pAnimationManager)
{
CC_SAFE_RELEASE_NULL(mAnimationManager);
mAnimationManager = pAnimationManager;
CC_SAFE_RETAIN(mAnimationManager);
}
void GameLayer::changeTappable()
{
mLeftButton->setEnabled(true);
mRightButton->setEnabled(true);
mAnimationManager->runAnimationsForSequenceNamedTweenDuration("Normal", 0);
}
void GameLayer::timer(float delta)
{
mTime += delta;
mTimeLabel->setString(CCString::createWithFormat("%.2fs", mTime)->getCString());
}
void GameLayer::tappedResetButton(CCObject* pSender, CCControlEvent pCCControlEvent)
{
CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
ccNodeLoaderLibrary->registerCCNodeLoader("GameLayer", GameLayerLoader::loader());
CCBReader * ccbReader = new CCBReader(ccNodeLoaderLibrary);
CCNode* node = ccbReader->readNodeGraphFromFile("GameLayer.ccbi");
((GameLayer*)node)->setAnimationManager(ccbReader->getAnimationManager());
CCScene * scene = CCScene::create();
if(node != NULL)
scene->addChild(node);
ccbReader->release();
CCDirector::sharedDirector()->replaceScene(scene);
}
//
// GameLayer.h
// nyanrun
//
// Created by Tomoaki Shimizu on 2013/02/05.
// Copyright TKS2 2013. All rights reserved.
//
#ifndef __GAME_LAYER__
#define __GAME_LAYER__
#include "cocos2d.h"
#include "cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;
#define GOAL_COUNT 100
class GameLayer : public CCLayer
, public CCBSelectorResolver
, public CCBMemberVariableAssigner
{
protected:
enum EFoot
{
FOOT_UNKNOWN = 0,
FOOT_LEFTFOOT = 1,
FOOT_RIGHTFOOT = 2,
};
int mCount;
float mTime;
EFoot mBeforeFoot;
CCSprite* mBg1;
CCSprite* mBg2;
CCSprite* mBg3;
CCBAnimationManager* mAnimationManager;
CCMenuItemImage* mLeftButton;
CCMenuItemImage* mRightButton;
CCLabelTTF* mTimeLabel;
CCLabelTTF* mDistanceLabel;
virtual SEL_MenuHandler onResolveCCBCCMenuItemSelector(CCObject* pTarget, const char* pSelectorName);
virtual SEL_CCControlHandler onResolveCCBCCControlSelector(CCObject* pTarget, const char* pSelectorName);
virtual bool onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode);
void tappedLeftButton(CCObject* pSender, CCControlEvent pCCControlEvent);
void tappedRightButton(CCObject* pSender, CCControlEvent pCCControlEvent);
void tappedButton(EFoot currentFoot);
void changeTappable();
void tappedResetButton(CCObject* pSender, CCControlEvent pCCControlEvent);
void timer(float delta);
public:
GameLayer();
virtual ~GameLayer();
CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(GameLayer, create);
void setAnimationManager(CCBAnimationManager *pAnimationManager);
};
#endif /* __GAME_LAYER__ */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment