void GCastle::ReceveAttack(gint32 iDamage) { if( mCastleStateFlag == eDestroy ) return; mCurrentHP -= iDamage; if( GetCurrentHP() <= 0 ) { mCastleStateFlag = eDestroy; SetCurrentState(); return; } else if( GetCurrentHP() < GetHP() / 2 ) { mCastleStateFlag = eBreak; SetCurrentState(); } GetCastleGege()->SetProgressPercent( (float)GetCurrentHP() / (float)GetHP() * 100.0f ); if( mIsDamage == false ) { mIsDamage = true; mpTopDamageEffect->SetVisible( true ); mpBottomDamageEffect->SetVisible( true ); GnTimeController::StartTimeControllers( mpTopDamageEffect ); GnTimeController::StartTimeControllers( mpBottomDamageEffect ); } }
void CIdleEnemy::Update(float fElapsedTime) { CBaseEnemy::Update(fElapsedTime); if(GetCurrentHP() <= 0) ChangeAIState(iDead); else { tVector2D Result; Result.fX = GetTargetPosition().fX - GetPosX(); Result.fY = GetTargetPosition().fY - GetPosY(); int Distance = int(sqrt(Result.fX*Result.fX + Result.fY*Result.fY)); if(Distance <= GetSightRange()) { ChangeAIState(iActive); } else ChangeAIState(Idle); } if( ReturnAIState() == iDead ) { } }
void GCastle::UpdateHP(float fTime) { if( mAutoRecoveryHPTimer.Update( fTime ) ) { SetCurrentHP( GetCurrentHP() + GetAutoRecoveryHP() ); mAutoRecoveryHPTimer.Reset(); } }
void CPatrolEnemy::Update(float fElapsedTime) { CBaseEnemy::Update(fElapsedTime); if(GetCurrentHP() <= 0) ChangeAIState(pDead); else { tVector2D Result; Result.fX = GetTargetPosition().fX - GetPosX(); Result.fY = GetTargetPosition().fY - GetPosY(); float Distance = sqrt(Result.fX*Result.fX + Result.fY*Result.fY); if(Distance <= GetSightRange()) { ChangeAIState(pActive); this->ReturnAIState(); } else ChangeAIState(Patrol); switch(ReturnAIState()) { case Patrol: { SetPosX((GetPosX() + GetBaseVelX() * fElapsedTime)); if(GetPosX() <= 0) { SetPosX(0); SetCurrentDist(0); SetSpeed(-1*GetSpeed()); } SetCurrentDist(GetCurrentDist() + (fabs(GetBaseVelX()) * fElapsedTime)); if(GetCurrentDist() >= GetMaxDist()) { SetCurrentDist(0); SetSpeed(-1*GetSpeed()); } SetBaseVelX(GetBaseVelX() + GetSpeed() * fElapsedTime); if(GetBaseVelX() > 50) SetBaseVelX(50); else if(GetBaseVelX() < -50) SetBaseVelX(-50); } break; case pActive: { SetSpeed(-1*GetSpeed()); SetBaseVelX(0); } break; case pDead: { } break; }; } }