Пример #1
0
//普通攻击
std::string HeroKnight::commonAttack()
{
    m_vVelocity*=0.1;
    
    Vec2 diff=Vec2::ZERO;
    
    auto m_Armature=getArmature();
    std::string strAnimateName= m_Armature->getAnimation()->getCurrentMovementID();
    
    std::string strPlayName="";
    if (getAnimateState(getActionFileMode()->ActionAttackName1)==BaseActionObject::AnimateState::Runing) {
        float currPercent= m_Armature->getAnimation()->getCurrentPercent();
        if (currPercent < 0.96) return getActionFileMode()->ActionAttackName1;
        strPlayName=getActionFileMode()->ActionAttackName2;
    }else if(getAnimateState(getActionFileMode()->ActionAttackName2)==BaseActionObject::AnimateState::Runing){
        float currPercent= m_Armature->getAnimation()->getCurrentPercent();
        if (currPercent < 0.94) return getActionFileMode()->ActionAttackName2;
        strPlayName=getActionFileMode()->ActionAttackName3;
    }else if(getAnimateState(getActionFileMode()->ActionAttackName3)==BaseActionObject::AnimateState::Runing){
        float currPercent= m_Armature->getAnimation()->getCurrentPercent();
        if (currPercent < 0.65) return getActionFileMode()->ActionAttackName3;
        strPlayName=getActionFileMode()->ActionAttackName4;
    }else if(getAnimateState(getActionFileMode()->ActionAttackName4)==BaseActionObject::AnimateState::Runing){
        float currPercent= m_Armature->getAnimation()->getCurrentPercent();
        if (currPercent < 0.99) return getActionFileMode()->ActionAttackName4;
        strPlayName=getActionFileMode()->ActionAttackName1;
    }else{
        strPlayName=getActionFileMode()->ActionAttackName1;
    }
    //log("strPlayName:%s",strPlayName.c_str());
    playAnimate(strPlayName);
    m_BodyState=GameEnum::BodyState::Attack;
    return strPlayName;
}
Пример #2
0
//普通攻击
std::string HeroBow::commonAttack()
{
    m_vVelocity*=0.1;
    
    Vec2 diff=Vec2::ZERO;
    
    auto m_Armature=getArmature();
    std::string strAnimateName= m_Armature->getAnimation()->getCurrentMovementID();
    
    std::string strPlayName="";
    if (getAnimateState(getActionFileMode()->ActionAttackName1)==BaseActionObject::AnimateState::Runing) {
        float currPercent= m_Armature->getAnimation()->getCurrentPercent();
        if (currPercent < 0.6) return getActionFileMode()->ActionAttackName1;
        strPlayName=getActionFileMode()->ActionAttackName2;
        vShootPos.y=kDownShootPosY;
    }else if(getAnimateState(getActionFileMode()->ActionAttackName2)==BaseActionObject::AnimateState::Runing){
        float currPercent= m_Armature->getAnimation()->getCurrentPercent();
        if (currPercent < 0.6) return getActionFileMode()->ActionAttackName2;
        strPlayName=getActionFileMode()->ActionAttackName3;
        vShootPos.y=kShootPosY;
    }else if(getAnimateState(getActionFileMode()->ActionAttackName3)==BaseActionObject::AnimateState::Runing){
        float currPercent= m_Armature->getAnimation()->getCurrentPercent();
        if (currPercent < 0.6) return getActionFileMode()->ActionAttackName3;
        strPlayName=getActionFileMode()->ActionAttackName4;
        vShootPos.y=kFinishShootPosY;
    }else if(getAnimateState(getActionFileMode()->ActionAttackName4)==BaseActionObject::AnimateState::Runing){
        float currPercent= m_Armature->getAnimation()->getCurrentPercent();
        if (currPercent < 0.99) return getActionFileMode()->ActionAttackName4;
        strPlayName=getActionFileMode()->ActionAttackName1;
        vShootPos.y=kShootPosY;
    }else{
        strPlayName=getActionFileMode()->ActionAttackName1;
        vShootPos.y=kShootPosY;
    }
    playAnimate(strPlayName);
    m_BodyState=GameEnum::BodyState::Attack;
    return strPlayName;
}
Пример #3
0
void Entiles::ShowDamage()
{
	Chara* mpc = ((EChesses*) this)->m_pChara;

	mpc->Trig(TR_BEDAMA);

	//((EChessComp*) getComponent("controller"))->ELock();
	// <伤害的格挡判定
	while(miAvgFlag == 0 && !mbCanNotShield){
		bool tbGd = false;
		CCLog(">[Entiles] ShowDamage() | Hit and Judge. GD.");
		if(((EChessComp*) getComponent("controller"))->HaveAI())
		{
			CCLog(">[Entiles] ShowDamage() | AI Component.");
			tbGd = true; // <AI控制
		}else{
			CCLog(">[Entiles] ShowDamage() | PC Component.");
			tbGd = EventCenter::sharedEventCenter()->mbDefendLock;
		}

		if(!tbGd) break;
		if(!mpc->CanAct()) break;
		

		int tiGdVal = mpc->getvalue("b_gedang");

		BattleField::sharedBattleField()->ClearTrigFlag();
		mpc->Trig(TR_GEDANG);
		if(!BattleField::sharedBattleField()->mbTrigged){
			CCLog(">[Entiles] ShowDamage() | GD:%d", tiGdVal);
			if(tiGdVal<=0) break;
			mpc->setvalue("b_gedang" , max(0, tiGdVal - 1));
		}
	
		CCLog(">[Entiles] ShowDamage() | Show the GD.");
		int tiGd = 0 - mpc->getFixValue("def");
		miFianDamage += tiGd;
		

		playAnimate("gedang",1);
		
		AnimateNoLastO();

		break;
	}

	// <显示伤害
	miFianDamage = max(0, miFianDamage);
	CCLog(">[Entiles] ShowDamage() | %d", miFianDamage);
	stringstream tsShow;
	
	if(miAvgFlag == 0 || mbCanNotAvg){
		CCLog(">[Entiles] ShowDamage() | >>> SHOW");
		tsShow << "-"; 
		tsShow << miFianDamage;
		
		/*CCActionInterval*  action1 = CCTintBy::create(0.12, -255, -255, -255);
		CCActionInterval*  action2Back = action1->reverse();*/
		//runAction(CCSequence::createWithTwoActions(CCRever);

		CCActionInstant* action1 = CCCallFunc::create(this, callfunc_selector(Entiles::DamIn));
		CCActionInstant* action2Back = CCCallFunc::create(this, callfunc_selector(Entiles::DamOut));

		CCActionInterval* a1 = CCTintBy::create(0.,122,122,122);
		CCActionInterval* a2 = a1->reverse();

		/*((EChessComp*) getComponent("controller"))->ELock();*/
		m_animator->runAction(CCSequence::create(/*CCCallFunc::create(((EChessComp*) getComponent("controller")),callfunc_selector(EChessComp::ELock)), */
			//CCDelayTime::create(0.07),
			 action1, CCFadeTo::create(0.01,160),CCDelayTime::create(0.12), CCFadeTo::create(0.01,255),action2Back, 
			/*CCBlink::create(0.12,1),*/
			/*CCCallFunc::create(((EChessComp*) getComponent("controller")),callfunc_selector(EChessComp::EUnLock)),*/ NULL));

		mpc->sethp(mpc->gethp()-miFianDamage);
	
		mpc->checkVals();
		if(mpc->m_bIsDead){
			EGroup::sharedEGroup()->meLast = mpc;
			((EChesses*) this)->meRS->m_pChara->Trig(TR_DEATH);
		}
		((EChesses*) this)->meRS->m_pChara->Trig(TR_DAMAGE);
		((EChesses*) this)->m_pChara->miBeDamage = miFianDamage;	// <输入累计的伤害而不是最后一次
	}else{
		CCLog(">[Entiles] ShowDamage() | >>> MISS");
		tsShow << "MISS";
		((EChesses*) this)->m_pChara->miBeDamage  = 0;
	}

	ShowTextS(tsShow.str().c_str());

	miFianDamage = 0;
	miDamage = 0;

	CCLog(">[Entiles] ShowDamage() | All Over");
}