mirror of
https://github.com/wu736139669/SmallGame_Cocos2dx.git
synced 2026-08-05 06:23:09 +00:00
716 lines
24 KiB
C++
716 lines
24 KiB
C++
|
|
#include "RandomUtil.h"
|
|
#include "SpriteFrameManage.h"
|
|
#include "AudioHelper.h"
|
|
#include "AudioDefine.h"
|
|
#include "TaikoDefine.h"
|
|
#include "TaikoCell.h"
|
|
#include "TaikoScene.h"
|
|
#include "ScaleMoveTaiko.h"
|
|
#include "EffectActionHelp.h"
|
|
#include "CCColorUtil.h"
|
|
#include "NumSprite.h"
|
|
#include "TaskDefine.h"
|
|
#include "TimeUtil.h"
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//细胞提示
|
|
bool CTaikoCellHint::init()
|
|
{
|
|
CCNode::init();
|
|
if(mpHintBg == NULL){
|
|
mpHintBg = CCSprite::create("CocoStudioResources/tai_ko/bg_hint.png");
|
|
//mpHintBg->setAnchorPoint(ccp(0.5f,0.f));
|
|
}
|
|
if(mpHint == NULL){
|
|
mpHint = CCSprite::create();
|
|
//mpHint->setAnchorPoint(ccp(0.5f,0.f));
|
|
}
|
|
|
|
addChild(mpHintBg,0);
|
|
addChild(mpHint,1);
|
|
return true;
|
|
}
|
|
void CTaikoCellHint::showEffect(int nType)
|
|
{
|
|
mpHint->setVisible(false);
|
|
switch (nType)
|
|
{
|
|
case eTaikoEffectBomb:
|
|
{
|
|
mpHint->setDisplayFrame(CCSpriteFrameManage::getInstance()->spriteFrameByName("common/bomb.png"));
|
|
//mpHint->setAnchorPoint(ccp(0.5f,0.f));
|
|
mpHint->setPositionX(10.f);
|
|
mpHint->setScale(0.6f);
|
|
CCActionInterval* pScaleBy = CCScaleBy::create(1.f, 1.1f);
|
|
CCActionInterval* pAction = CCSequence::create(pScaleBy, pScaleBy->reverse(), NULL);
|
|
mpHint->runAction(CCRepeatForever::create(pAction));
|
|
mpHint->setVisible(true);
|
|
}
|
|
break;
|
|
case eTaikoEffectScore: //奖励分数
|
|
{
|
|
CCTexture2D* p = CCTextureCache::sharedTextureCache()->addImage("GameMemoryLayer/20000.png");
|
|
//mpHint->setDisplayFrame(CCSpriteFrame::createWithTexture(p,));
|
|
mpHint->setTexture(p);
|
|
mpHint->setTextureRect(CCRectMake(0,0,p->getContentSize().width,p->getContentSize().height));
|
|
//mpHint->setAnchorPoint(ccp(0.5f,0.f));
|
|
mpHint->setPositionX(10.f);
|
|
mpHint->setScale(0.7f);
|
|
mpHint->setVisible(true);
|
|
}
|
|
break;
|
|
case eTaikoEffectClickInvalid: //不能按图形
|
|
{
|
|
|
|
}
|
|
break;
|
|
case eTaikoEffectShakeDrum: //震鼓奖励阶段
|
|
{
|
|
|
|
}
|
|
break;
|
|
case eTaikoEffectPrefect: //Perfect道具
|
|
{
|
|
/*mpHint->setDisplayFrame(CCSpriteFrameManage::getInstance()->spriteFrameByName("CocoStudioResources/tai_ko/hint_perfect.png"));*/
|
|
//mpHint->setTexture(CCTexAddImage("CocoStudioResources/tai_ko/hint_perfect.png"));
|
|
NumSprite::setSpriteTexture(mpHint,CCTexAddImage("CocoStudioResources/tai_ko/hint_perfect.png"));
|
|
mpHint->setPositionX(10.f);
|
|
mpHint->setScale(0.4f);
|
|
CCActionInterval* pScaleBy = CCScaleBy::create(1.f, 1.1f);
|
|
CCActionInterval* pAction = CCSequence::create(pScaleBy, pScaleBy->reverse(), NULL);
|
|
mpHint->runAction(CCRepeatForever::create(pAction));
|
|
mpHint->setVisible(true);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
void CTaikoCellHint::executeEffect(int nType)
|
|
{
|
|
switch (nType)
|
|
{
|
|
case eTaikoEffectBomb:
|
|
{
|
|
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
enum ETaikoLayer
|
|
{
|
|
eTaikoLayerBelow = 0,
|
|
eTaiKoLayerCell = 1,
|
|
eTaiKoLayerAbove = 2,
|
|
};
|
|
CTaikoCell::CTaikoCell():mpSprite(NULL),mnType(1),mpSpriteTail(NULL)
|
|
,mpEffectBelow(NULL),mpEffectAbove(NULL),mbExeDelEff(true),mfASpeed(1.f),mfSpeed(3.f),mbMiss(false)
|
|
,mpHint(NULL),mbUse(true),mOpState(ETaikoOpNone),mpSpriteBg(NULL),mbClicking(false),mpSpriteEff(NULL),mfSpeedFactor(1.f)
|
|
//mEffect(eRTItemEffectNone)
|
|
{
|
|
|
|
}
|
|
CTaikoCell::~CTaikoCell()
|
|
{
|
|
|
|
}
|
|
void CTaikoCell::reset()
|
|
{
|
|
mbUse = true;
|
|
mnType = 1;
|
|
mpEffectBelow->setVisible(false);
|
|
mpEffectAbove->setVisible(false);
|
|
mpSpriteTail->setVisible(false);
|
|
mpSpriteBg->setVisible(false);
|
|
mbExeDelEff = true;
|
|
mfASpeed = 1.f;
|
|
mfSpeed = 3.f;
|
|
mbMiss = false;
|
|
mpHint->setVisible(false);
|
|
mVecEffect.clear();
|
|
mVecRandInfo.clear();
|
|
mOpState = ETaikoOpNone;
|
|
}
|
|
bool CTaikoCell::init()
|
|
{
|
|
if(mpSpriteEff == NULL)
|
|
mpSpriteEff = CCSprite::create();
|
|
if (mpSprite == NULL)
|
|
mpSprite = CCSprite::create();
|
|
if(mpSpriteTail == NULL)
|
|
mpSpriteTail = CCSprite::create();
|
|
if(mpEffectAbove == NULL){
|
|
mpEffectAbove = CCSprite::create("CocoStudioResources/tai_ko/bg_hint.png");
|
|
mpEffectAbove->setVisible(false);
|
|
mpEffectAbove->setAnchorPoint(ccp(0.5f,0.f));
|
|
}
|
|
if(mpEffectBelow == NULL){
|
|
mpEffectBelow = CCSprite::create();
|
|
mpEffectBelow->setVisible(false);
|
|
mpEffectBelow->setAnchorPoint(ccp(0.5f,0.f));
|
|
}
|
|
if (mpSpriteBg == NULL)
|
|
{
|
|
mpSpriteBg = CCSprite::create();
|
|
mpSpriteBg->setVisible(false);
|
|
}
|
|
if (mpHint == NULL)
|
|
{
|
|
mpHint = CTaikoCellHint::create();
|
|
//mpHint->setAnchorPoint(ccp(0.5f,0.f));
|
|
mpHint->setVisible(false);
|
|
}
|
|
addChild(mpSpriteTail,eTaiKoLayerCell);
|
|
addChild(mpSpriteBg,eTaiKoLayerCell);
|
|
addChild(mpSprite,eTaiKoLayerCell);
|
|
addChild(mpSpriteEff,eTaiKoLayerCell);
|
|
|
|
addChild(mpEffectBelow,eTaikoLayerBelow);
|
|
addChild(mpEffectAbove,eTaiKoLayerAbove);
|
|
addChild(mpHint,eTaikoLayerBelow);
|
|
return true;
|
|
}
|
|
void CTaikoCell::onEnter()
|
|
{
|
|
CCNode::onEnter();
|
|
}
|
|
void CTaikoCell::onExit()
|
|
{
|
|
CCNode::onExit();
|
|
}
|
|
|
|
void CTaikoCell::randCell()
|
|
{
|
|
// int nTypeNum = 2;
|
|
// if (CRightTouchData::getInstance()->getScore() > RT_DIFF_SCORE_1)
|
|
// nTypeNum = 3;
|
|
// if (CRightTouchData::getInstance()->getScore() > RT_DIFF_SCORE_2)
|
|
// nTypeNum = 4;
|
|
|
|
//测试数据
|
|
static int ncounter = 0;
|
|
ncounter++;
|
|
// if(ncounter == 1)
|
|
// addEffect(eRTItemEffectRow);
|
|
// if(ncounter == 2)
|
|
// {
|
|
// addEffect(eRTItemEffectCol);
|
|
// addEffect(eRTItemEffectCol);
|
|
// }
|
|
//
|
|
// if(ncounter == 5)
|
|
// {
|
|
// //addEffect(eRTItemEffectCol);
|
|
// addEffect(eTaikoEffectBomb);
|
|
// }
|
|
// if(ncounter == 7)
|
|
// {
|
|
// addEffect(eRTItemEffectColour);
|
|
// }
|
|
// if(ncounter == 10)
|
|
// addEffect(eRTItemEffectBomb);
|
|
// if (ncounter == 8)
|
|
// {
|
|
// addEffect(eRTItemEffectScore);
|
|
// }
|
|
// if (ncounter == 9)
|
|
// {
|
|
// addEffect(eRTItemEffectScore);
|
|
// }
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
STaikoCellRandInfo info ;
|
|
info.eType = eTaikoNone;
|
|
info.fProbability = 0.f;
|
|
//memset(&info,0,sizeof(info));
|
|
//使用的
|
|
float fUsePro = 0;
|
|
//未用的
|
|
float fUnuse = RAND_GAME_BASE_VAL_10000;
|
|
if (((CTaikoScene*)getParent())->useItem(eTaikoIntensifyGenLongCell))
|
|
{
|
|
CTaikoIntensifyGenLongCell* p = (CTaikoIntensifyGenLongCell*)CTKData.getEffect(eTaikoIntensifyGenLongCell);
|
|
info.eType = eTaikoType_1_Long;
|
|
fUsePro = (fUnuse >= p->mfEffectVal/2) ? (fUsePro + p->mfEffectVal/2) : fUnuse;
|
|
info.fProbability = fUsePro;
|
|
mVecRandInfo.push_back(info);
|
|
fUnuse = fUnuse > 0 ? RAND_GAME_BASE_VAL_10000 - fUsePro : 0;
|
|
|
|
info.eType = eTaikoType_2_Long;
|
|
fUsePro = (fUnuse >= p->mfEffectVal/2) ? (fUsePro + p->mfEffectVal/2) : fUnuse;
|
|
info.fProbability = fUsePro;
|
|
mVecRandInfo.push_back(info);
|
|
fUnuse = fUnuse > 0 ? RAND_GAME_BASE_VAL_10000 - fUsePro : 0;
|
|
}
|
|
info.eType = eTaikoType_Invalid;
|
|
fUsePro = (fUnuse >= 0.05f * RAND_GAME_BASE_VAL_10000) ? (fUsePro + 0.05f * RAND_GAME_BASE_VAL_10000) : fUnuse;
|
|
info.fProbability = fUsePro;
|
|
mVecRandInfo.push_back(info);
|
|
fUnuse = fUnuse > 0 ? RAND_GAME_BASE_VAL_10000 - fUsePro :0;
|
|
|
|
info.eType = eTaikoType_1;
|
|
fUsePro = fUnuse >= fUnuse/2.f ? fUsePro + fUnuse/2.f : fUnuse;
|
|
info.fProbability = fUsePro;
|
|
mVecRandInfo.push_back(info);
|
|
fUnuse = fUnuse > 0 ? RAND_GAME_BASE_VAL_10000 - fUsePro : 0;
|
|
|
|
info.eType = eTaikoType_2;
|
|
fUsePro += fUnuse ;
|
|
info.fProbability = fUsePro;
|
|
mVecRandInfo.push_back(info);
|
|
|
|
ETaikoType eType ;
|
|
int nPro = CRandomUtil::RandomRange(1,RAND_GAME_BASE_VAL_10000);
|
|
for (int i = 0; i < mVecRandInfo.size(); ++i){
|
|
if(nPro <= mVecRandInfo[i].fProbability) {
|
|
eType = mVecRandInfo[i].eType;
|
|
break;
|
|
}
|
|
}
|
|
CTaikoGameEffectShakeDrum* pS = (CTaikoGameEffectShakeDrum*)CTKData.getEffect(eTaikoGameEffectShakeDrum);
|
|
if (pS->mbGening){
|
|
eType = eTaikoType_BigDrum;
|
|
CTaskManProceDt(eDayTaskTypeTK_53,1);
|
|
//重置55类型任务
|
|
CTaskManProceDt(eDayTaskTypeTK_55,0);
|
|
|
|
long lTime = CTimeUtil::GetCocos2dxTimer() - CTKData.getLastShakeDrumTime();
|
|
CTaskManProce(eDayTaskTypeTK_59,lTime/1000);
|
|
CTKData.setLastShakeDrumTime(CTimeUtil::GetCocos2dxTimer());
|
|
}
|
|
setType(eType);
|
|
updataCell();
|
|
if (eType == eTaikoType_Invalid)
|
|
{
|
|
CTKData.setInvaildCellGenTimes(CTKData.getInvaildCellGenTimes() + 1);
|
|
}
|
|
if (eType != eTaikoType_BigDrum)
|
|
{
|
|
randCellEffectGen();
|
|
showEffect();
|
|
}
|
|
//setPosition(ccp(GetVSe.width /2, GetVSe.height - 340));
|
|
}
|
|
void CTaikoCell::randCellEffectGen()
|
|
{
|
|
//int nTemp = CRandomUtil::RandomRange(0,eRTItemEffectScore);//不生成炸弹
|
|
//附在在道具上优先出现炸弹
|
|
if(CTKData.getGenBomb()){
|
|
addEffect(eTaikoEffectBomb);
|
|
CTKData.setGenBomb(false);
|
|
}
|
|
//分数奖励0
|
|
else if (((CTaikoScene*)getParent())->useItem(eTaikoGameEffectScore)){
|
|
addEffect(eTaikoEffectScore);
|
|
}
|
|
//出现prefect道具
|
|
else if (((CTaikoScene*)getParent())->useItem(eTaikoGameEffectPrefect)){
|
|
addEffect(eTaikoEffectPrefect);
|
|
}else if (((CTaikoScene*)getParent())->useItem(eTaikoIntensifyAddScore))
|
|
{
|
|
if (mnType != eTaikoType_1_Long && mnType != eTaikoType_2_Long)
|
|
addEffect(eTaikoEffectIntensifyAddScore);
|
|
}
|
|
//prefect道具触发成功
|
|
CTaikoGameEffectPrefect* p = (CTaikoGameEffectPrefect*)CTKData.getEffect(eTaikoGameEffectPrefect);
|
|
if(p){
|
|
if (p->mnUseTimes <= p->mnUseLimit){
|
|
if (p->mbPerfectState){
|
|
p->mnUseTimes += 1;
|
|
mOpState = ETaikoOpPerfect;
|
|
}
|
|
}else{
|
|
p->mnUseTimes = 0;
|
|
p->mbPerfectState = false;
|
|
}
|
|
}
|
|
}
|
|
void CTaikoCell::moveTo(CCPoint& ptTarget)
|
|
{
|
|
//setScaleX(0.35f);
|
|
//setScaleY(0.2f);
|
|
stopAllActions();
|
|
setScale(0.1f/*1.f*/);
|
|
// setScale(0.f);
|
|
CCActionInterval* pActMove = NULL;
|
|
if (mnType == eTaikoType_1_Long || mnType == eTaikoType_2_Long)
|
|
{
|
|
|
|
}else
|
|
{
|
|
|
|
}
|
|
|
|
mfDisplacement = CTKData.toDisplacement(mfSpeed,((CTaikoScene*)getParent())->getStartPos(),ccp(((CTaikoScene*)getParent())->getRcTarget().getMidX(), ((CTaikoScene*)getParent())->getRcTarget().getMinY()));
|
|
float fWholeSpeed = CTKData.toSpeed(mfDisplacement,((CTaikoScene*)getParent())->getStartPos(),ptTarget);
|
|
pActMove = CCMoveTo::create(fWholeSpeed,ccp(ptTarget.x,ptTarget.y));
|
|
//CCActionInterval* pAct = CCSpawn::create(pActMove /*,CCScaleTo::create(mfSpeed - 1.f,1.f,1.f)*/,NULL);
|
|
//CCAction* pSpd = CCSpeed::create(pAct,mfASpeed);
|
|
CCActionInterval* pActScale = CScaleMoveTaiko::create(pActMove,((CTaikoScene*)getParent())->getStartPos()
|
|
,ccp(((CTaikoScene*)getParent())->getRcTarget().getMidX(), ((CTaikoScene*)getParent())->getRcTarget().getMinY()));
|
|
CCAction* pSpd = CCSpeed::create(pActScale,mfASpeed);
|
|
|
|
pSpd->setTag(eTaikoCellActSpeed);
|
|
runAction(pSpd);
|
|
}
|
|
void CTaikoCell::stopHead(float fOffectY)
|
|
{
|
|
// mpSprite->pauseSchedulerAndActions();
|
|
// mpSpriteBg->pauseSchedulerAndActions();
|
|
//mpSprite->stopAllActions();
|
|
//mpSpriteBg->stopAllActions();
|
|
// CCLOG("getContentSize===%f",fOffectY);
|
|
|
|
//mpSprite->setVisible(false);
|
|
//mpSpriteBg->setVisible(false);
|
|
mpSprite->setPositionY(fOffectY);
|
|
//mpSprite->setScale(1.f);
|
|
mpSpriteBg->setPositionY(fOffectY - (mpSpriteBg->getContentSize().height/2 - mpSprite->getContentSize().height/2));
|
|
mpSpriteEff->setPositionY(fOffectY );
|
|
//mpSpriteBg->setScale(1.f);
|
|
//CCLOG("stopHead===%f",mpSprite->getPositionY());
|
|
}
|
|
void CTaikoCell::setType(int nType)
|
|
{
|
|
mnType = nType;
|
|
}
|
|
void CTaikoCell::updataCell()
|
|
{
|
|
mpSpriteTail->setVisible(false);
|
|
mpSpriteTail->setScale(1.f);
|
|
mpSpriteBg->setVisible(false);
|
|
mpSprite->setPosition(ccp(0,0));
|
|
mpSpriteBg->setPosition(ccp(0, 0));
|
|
mpSpriteEff->setPosition(ccp(0, 0));
|
|
mpSpriteEff->stopAllActions();
|
|
mpSpriteEff->setVisible(false);
|
|
mpSprite->setAnchorPoint(ccp(0.5f,0.f));
|
|
mpSpriteEff->setAnchorPoint(ccp(0.5f,0.f));
|
|
mpSpriteBg->setAnchorPoint(ccp(0.5f,0.f));
|
|
mpSprite->setVisible(true);
|
|
mbClicking = false;
|
|
CCString str;
|
|
str.initWithFormat("CocoStudioResources/tai_ko/cell_%d.png",mnType);
|
|
if (mnType == eTaikoType_1_Long){
|
|
str.initWithFormat("CocoStudioResources/tai_ko/cell_1.png");
|
|
//mpSprite->setDisplayFrame(CCSpriteFrameManage::getInstance()->spriteFrameByName(str.getCString()));
|
|
//mpSprite->setTexture(CCTexAddImage(str.getCString()));
|
|
//mpSprite->setTextureRect(CCRectMake(0,0,CCTexAddImage(str.getCString())->getContentSize().width,CCTexAddImage(str.getCString())->getContentSize().height));
|
|
NumSprite::setSpriteTexture(mpSprite,CCTexAddImage(str.getCString()));
|
|
mpSpriteBg->setVisible(true);
|
|
str.initWithFormat("CocoStudioResources/tai_ko/cell_bg_1.png");
|
|
/*mpSpriteBg->setDisplayFrame(CCSpriteFrameManage::getInstance()->spriteFrameByName(str.getCString()));*/
|
|
//mpSpriteBg->setTexture(CCTexAddImage(str.getCString()));
|
|
|
|
NumSprite::setSpriteTexture(mpSpriteBg,CCTexAddImage(str.getCString()));
|
|
mpSpriteBg->setPositionY(mpSprite->getContentSize().height/2 - mpSpriteBg->getContentSize().height/2);
|
|
str.initWithFormat("CocoStudioResources/tai_ko/cell_long_1.png");
|
|
/*mpSpriteTail->setDisplayFrame(CCSpriteFrameManage::getInstance()->spriteFrameByName(str.getCString()));*/
|
|
|
|
//mpSpriteTail->setTexture(CCTexAddImage(str.getCString()));
|
|
NumSprite::setSpriteTexture(mpSpriteTail,CCTexAddImage(str.getCString()));
|
|
mpSpriteTail->setVisible(true);
|
|
mpSpriteTail->setAnchorPoint(ccp(0.5f,1.f));
|
|
//mpSpriteTail->setAnchorPoint(ccp(0.5f,1.f));
|
|
mpSpriteTail->setPositionY(mpSpriteTail->getContentSize().height + mpSprite->getContentSize().height/*/2*/);
|
|
|
|
//setContentSize(mpSprite->getContentSize() + mpSpriteTail->getContentSize());
|
|
}
|
|
else if (mnType == eTaikoType_2_Long)
|
|
{
|
|
str.initWithFormat("CocoStudioResources/tai_ko/cell_2.png");
|
|
/*mpSprite->setDisplayFrame(CCSpriteFrameManage::getInstance()->spriteFrameByName(str.getCString()));*/
|
|
//mpSprite->setTexture(CCTexAddImage(str.getCString()));
|
|
NumSprite::setSpriteTexture(mpSprite,CCTexAddImage(str.getCString()));
|
|
|
|
str.initWithFormat("CocoStudioResources/tai_ko/cell_bg_2.png");
|
|
/*mpSpriteBg->setDisplayFrame(CCSpriteFrameManage::getInstance()->spriteFrameByName(str.getCString()));*/
|
|
//mpSpriteBg->setTexture(CCTexAddImage(str.getCString()));
|
|
NumSprite::setSpriteTexture(mpSpriteBg,CCTexAddImage(str.getCString()));
|
|
mpSpriteBg->setVisible(true);
|
|
mpSpriteBg->setPositionY(mpSprite->getContentSize().height/2 - mpSpriteBg->getContentSize().height/2);
|
|
|
|
str.initWithFormat("CocoStudioResources/tai_ko/cell_long_2.png");
|
|
//mpSpriteTail->setTexture(CCTexAddImage(str.getCString()));
|
|
NumSprite::setSpriteTexture(mpSpriteTail,CCTexAddImage(str.getCString()));
|
|
mpSpriteTail->setVisible(true);
|
|
mpSpriteTail->setAnchorPoint(ccp(0.5f,1.f));
|
|
mpSpriteTail->setPositionY(mpSpriteTail->getContentSize().height + mpSprite->getContentSize().height/*/2*/);
|
|
|
|
//setContentSize(mpSprite->getContentSize() + mpSpriteTail->getContentSize());
|
|
}else
|
|
{
|
|
//mpSprite->setTexture(CCTexAddImage(str.getCString()));
|
|
NumSprite::setSpriteTexture(mpSprite,CCTexAddImage(str.getCString()));
|
|
}
|
|
mrcCollisionArea = mpSprite->getTextureRect();
|
|
mrcCollisionAreaTail = mpSpriteTail->getTextureRect();
|
|
mrcCollisionAreaLong = CCRectMake(0,0,mrcCollisionArea.size.width,mrcCollisionArea.size.height + mpSpriteTail->getContentSize().height);
|
|
mpSprite->setVisible(true);
|
|
mVecHitSplitInfo.clear();
|
|
STaikoHitSplitInfo s1 = {0,false, 2.f/3.f * mrcCollisionAreaTail.size.height};
|
|
mVecHitSplitInfo.push_back(s1);
|
|
STaikoHitSplitInfo s2 = {0,false, 1.f/3.f * mrcCollisionAreaTail.size.height};
|
|
mVecHitSplitInfo.push_back(s2);
|
|
STaikoHitSplitInfo s3 = {0,false, 0.f/3.f * mrcCollisionAreaTail.size.height};
|
|
mVecHitSplitInfo.push_back(s3);
|
|
//CCSprite* pSp = CCSprite::createWithSpriteFrame(CCSpriteFrameManage::getInstance()->spriteFrameByName(str.getCString()));
|
|
}
|
|
|
|
|
|
void CTaikoCell::executeASpeed()
|
|
{
|
|
CCSpeed* p = dynamic_cast<CCSpeed*>(getActionByTag(eTaikoCellActSpeed));
|
|
if(p) p->setSpeed(mfASpeed*mfSpeedFactor);
|
|
}
|
|
void CTaikoCell::executeDel(bool bAni )
|
|
{
|
|
stopAllActions();
|
|
mpHint->setVisible(false);
|
|
mpSpriteEff->setVisible(false);
|
|
if (bAni)
|
|
{
|
|
mbUse = false;
|
|
mpSprite->setVisible(false);
|
|
if (getType() == eTaikoType_2_Long || getType() == eTaikoType_1_Long)
|
|
{
|
|
mpSpriteEff->setVisible(false);
|
|
mpSpriteBg->setVisible(false);
|
|
mpSpriteTail->setVisible(false);
|
|
}
|
|
CCAnimation* pAni = CCAnimation::create();
|
|
CCString str;
|
|
|
|
for (int i = 1; i <= 5; ++i){
|
|
str.initWithFormat("effect/bomb/%d.png",i);
|
|
pAni->addSpriteFrameWithFileName(str.getCString());
|
|
}
|
|
pAni->setDelayPerUnit(0.5/5.f);
|
|
pAni->setLoops(1);
|
|
CCFiniteTimeAction* pAction = CCSequence::create(
|
|
CCShow::create(),
|
|
CCAnimate::create(pAni),
|
|
CCHide::create(),
|
|
CCCallFunc::create(this,callfunc_selector(CTaikoCell::executeDelCallback)),
|
|
NULL);
|
|
mpEffectAbove->runAction(pAction);
|
|
mpEffectAbove->setVisible(true);
|
|
|
|
|
|
}else
|
|
{
|
|
setVisible(false);
|
|
CCLOG("CTaikoCell::setVisible(false)");
|
|
}
|
|
|
|
|
|
((CTaikoScene*)getParent())->delCell(this);
|
|
}
|
|
void CTaikoCell::executeDelCallback()
|
|
{
|
|
mbUse = true;
|
|
|
|
}
|
|
CCRect CTaikoCell::getCollisionArea()
|
|
{
|
|
//CCRect rc = mpSprite->getTextureRect();
|
|
CCPoint startInNodeSpace = CCPointZero;
|
|
CCPoint startInWorldSpace = this->convertToWorldSpace(startInNodeSpace);
|
|
//CCPoint targetInNodeSpace = this->getParent()->convertToNodeSpace(startInNodeSpace);
|
|
CCRect rcTemp(startInWorldSpace.x - mrcCollisionArea.size.width/2, startInWorldSpace.y /*- mrcCollisionArea.size.height/2*/, mrcCollisionArea.size.width,mrcCollisionArea.size.height);
|
|
if (getType() == eTaikoType_1_Long||getType() == eTaikoType_2_Long)
|
|
{
|
|
rcTemp = CCRectMake(startInWorldSpace.x - mrcCollisionArea.size.width/2, startInWorldSpace.y /*- mrcCollisionArea.size.height/2*/, mrcCollisionAreaLong.size.width,mrcCollisionAreaLong.size.height);
|
|
}
|
|
return rcTemp;
|
|
}
|
|
CCRect CTaikoCell::getCollisionAreaHead()
|
|
{
|
|
CCPoint startInWorldSpace = this->convertToWorldSpace(CCPointZero);
|
|
return CCRectMake(startInWorldSpace.x - mrcCollisionArea.size.width/2, startInWorldSpace.y/* - mrcCollisionArea.size.height/2*/, mrcCollisionArea.size.width,mrcCollisionArea.size.height);
|
|
}
|
|
void CTaikoCell::updataTextureArea(CCPoint ptSplit)
|
|
{
|
|
//CCPoint ptTemp = ptSplit;
|
|
//CCPoint ptTemp = this->convertToWorldSpace(ccp(mpSpriteTail->getPositionX() - mrcCollisionAreaTail.size.width/2,mpSpriteTail->getPositionY()));
|
|
//CCRect rcAreaTail = CCRectMake(ptTemp.x,ptTemp.y,mrcCollisionAreaTail.size.width,mrcCollisionAreaTail.size.height);
|
|
float fOffset = getCollisionArea().getMaxY() - ptSplit.y;
|
|
CCRect rcTailTex = mpSpriteTail->getTextureRect();
|
|
//if (fOffset >= 0.f){
|
|
rcTailTex.size.height = fOffset;
|
|
if (rcTailTex.size.height<=0){
|
|
mpSprite->setVisible(false);
|
|
mpSpriteTail->setVisible(false);
|
|
}
|
|
mpSpriteTail->setTextureRect(rcTailTex);
|
|
CCLOG("CTaikoCell::updataTextureArea() height = %f",rcTailTex.size.height);
|
|
//}
|
|
}
|
|
bool CTaikoCell::isClickLongCell()
|
|
{
|
|
for (int i = 0; i < mVecHitSplitInfo.size(); ++i)
|
|
{
|
|
if (mVecHitSplitInfo[i].bUse)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
void CTaikoCell::toGray()
|
|
{
|
|
CCSprite* p = CCColorUtil::graylightWithCCSprite(mpSprite,false);
|
|
mpSprite->setDisplayFrame(p->displayFrame());
|
|
if (mnType == eTaikoType_1_Long||mnType == eTaikoType_2_Long)
|
|
{
|
|
//CCPoint ptAnchor = mpSpriteBg->getPosition();
|
|
p = CCColorUtil::graylightWithCCSprite(mpSpriteBg,false);
|
|
mpSpriteBg->setDisplayFrame(p->displayFrame());
|
|
p = CCColorUtil::graylightWithCCSprite(mpSpriteTail,false);
|
|
mpSpriteTail->setDisplayFrame(p->displayFrame());
|
|
}
|
|
|
|
}
|
|
CTaikoCell::VEC_HITSPLITINFO& CTaikoCell::getVecHitSplitInfo()
|
|
{
|
|
return mVecHitSplitInfo;
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//特效相关
|
|
void CTaikoCell::addEffect(ETaikoEffect effect,bool bFront)
|
|
{
|
|
CTaikoCellEffect e;
|
|
e.mType = effect;
|
|
// switch(effect)
|
|
// {
|
|
// case eRTItemEffectScore:
|
|
// e.mnMask.setMask(eRTEffectMaskMulCellDel);
|
|
//
|
|
// break;
|
|
// }
|
|
if (effect == eTaikoEffectBomb || bFront)
|
|
mVecEffect.insert(mVecEffect.begin(),e);
|
|
else
|
|
mVecEffect.push_back(e);
|
|
}
|
|
ETaikoEffect CTaikoCell::getEffect()
|
|
{
|
|
if(mVecEffect.empty())
|
|
return eTaikoEffectNone;
|
|
return mVecEffect[0].mType;
|
|
}
|
|
CTaikoCellEffect* CTaikoCell::getFrontEffect()
|
|
{
|
|
if(mVecEffect.empty())
|
|
return NULL;
|
|
return &mVecEffect[0];
|
|
}
|
|
void CTaikoCell::delEffect()
|
|
{
|
|
ETaikoEffect effect = getEffect();
|
|
for (int i = 0; i < mVecEffect.size(); ++i)
|
|
{
|
|
if(mVecEffect[i].mType == effect && mVecEffect[i].mbInvalid)
|
|
mVecEffect.erase(mVecEffect.begin() + i);
|
|
}
|
|
}
|
|
void CTaikoCell::showEffect()
|
|
{
|
|
ETaikoEffect effect = getEffect();
|
|
mpEffectBelow->setVisible(false);
|
|
mpEffectAbove->setVisible(false);
|
|
mpSpriteEff->setVisible(false);
|
|
mpEffectAbove->setScale(1.0f);
|
|
mpEffectAbove->setRotation(0);
|
|
mpEffectAbove->stopAllActions();
|
|
mpHint->setVisible(false);
|
|
mpHint->setPositionY(mpSprite->getContentSize().height/2);
|
|
if (effect == eTaikoEffectBomb){
|
|
mpHint->setPositionX(mpSprite->getContentSize().width/2 + mpSprite->getContentSize().width/2);
|
|
mpHint->showEffect(eTaikoEffectBomb);
|
|
mpHint->setVisible(true);
|
|
}else if (effect == eTaikoEffectPrefect)
|
|
{
|
|
mpHint->setPositionX(mpSprite->getContentSize().width/2 + mpSprite->getContentSize().width/2);
|
|
mpHint->showEffect(effect);
|
|
mpHint->setVisible(true);
|
|
}else if (effect == eTaikoEffectScore)
|
|
{
|
|
mpHint->setPositionX(mpSprite->getContentSize().width/2 + mpSprite->getContentSize().width/2);
|
|
mpHint->showEffect(effect);
|
|
mpHint->setVisible(true);
|
|
}else if (effect == eTaikoEffectIntensifyAddScore)
|
|
{
|
|
CCAnimation* pAni = CCAnimation::create();
|
|
CCString str;
|
|
for (int i = 1; i <= 5; ++i){
|
|
str.initWithFormat("tai_ko/bule_eff/%d.png",i);
|
|
if(mnType == eTaikoType_2_Long || mnType == eTaikoType_2)
|
|
str.initWithFormat("tai_ko/red_eff/%d.png",i);
|
|
pAni->addSpriteFrameWithFileName(str.getCString());
|
|
}
|
|
pAni->setDelayPerUnit(0.1f);
|
|
pAni->setLoops(1);
|
|
mpSpriteEff->setVisible(true);
|
|
mpSpriteEff->runAction(CCRepeatForever::create(CCAnimate::create(pAni)));
|
|
}
|
|
// else if (effect == eRTItemEffectColour)
|
|
// {
|
|
// mpEffectAbove->setDisplayFrame(CCSpriteFrameManage::getInstance()->spriteFrameByName("rt_colour.png"));
|
|
// mpEffectAbove->setVisible(true);
|
|
// mpEffectAbove->setScale(1.f);
|
|
// CCActionInterval* pScaleBy = CCScaleBy::create(1.f, 1.1f);
|
|
// CCActionInterval* pAction = CCSequence::create(pScaleBy, pScaleBy->reverse(), NULL);
|
|
// mpEffectAbove->runAction(CCRepeatForever::create(pAction));
|
|
// }
|
|
}
|
|
void CTaikoCell::executeEffect()
|
|
{
|
|
ETaikoEffect effect = getEffect();
|
|
CTaikoCellEffect* pRealEffect = getFrontEffect();
|
|
mpHint->executeEffect(effect);
|
|
switch(effect){
|
|
case eTaikoEffectBomb:{
|
|
if (!pRealEffect->mbInvalid)
|
|
{
|
|
((CTaikoScene*)getParent())->time_addSecond(5.0);
|
|
CEffectActionHelper::play(eHelp5Second,getParent(),getPosition());
|
|
pRealEffect->mbInvalid = true;
|
|
CTaskManProceDt(eDayTaskTypeShare_8,1);
|
|
CTKData.setUseBomb(true);
|
|
}
|
|
}
|
|
break;
|
|
case eTaikoEffectPrefect:{
|
|
CTaikoGameEffectPrefect* p = (CTaikoGameEffectPrefect*)CTKData.getEffect(eTaikoGameEffectPrefect);
|
|
if(p)
|
|
p->mbPerfectState = true;
|
|
}
|
|
break;
|
|
case eTaikoEffectScore:{
|
|
// CCSprite* p = CCSprite::create("GameMemoryLayer/20000.png");
|
|
// p->setScale(0.7f);
|
|
// p->setPositionY(p->getPositionY()-22);
|
|
// CCFiniteTimeAction* pAction = CCSequence::create(
|
|
// CCShow::create(),
|
|
// CCFadeOut::create(0.5f),
|
|
// CCHide::create(),
|
|
// CCRemoveSelf::create(),
|
|
// NULL);
|
|
// p->runAction(pAction);
|
|
// addChild(p,20);
|
|
if (!pRealEffect->mbInvalid)
|
|
{
|
|
CEffectActionHelper::play(eHelp20000,getParent(),getPosition());
|
|
pRealEffect->mbInvalid = true;
|
|
CTaskManProceDt(eDayTaskTypeTK_61,1);
|
|
|
|
}
|
|
|
|
}
|
|
break;
|
|
}
|
|
mpHint->setVisible(false);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|