void cRAI::EnemyEnterLOS(int enemy) { if( RAIDEBUGGING ) *l<<"\nEnemyEnterLOS("<<enemy<<")"; if( cb->GetUnitHealth(enemy) <= 0 ) // ! Work Around: Spring-Version(v0.72b1-0.76b1) { DebugEnemyEnterLOSError++; *l<<"\nWARNING: EnemyEnterLOS("<<enemy<<"): enemy is either dead or not in LOS"; return; } DebugEnemyEnterLOS++; if( Enemies.find(enemy) == Enemies.end() ) Enemies.insert(iePair(enemy,EnemyInfo())); EnemyInfo *E = &Enemies.find(enemy)->second; E->inLOS=true; E->ud=cb->GetUnitDef(enemy); E->udr=&UDH->UDR.find(E->ud->id)->second; if( E->ud->speed == 0 ) { E->position = cb->GetUnitPos(enemy); E->posLocked = true; } else if( E->posLocked ) { // just in case the id is being reused E->posLocked = false; } UM->EnemyEnterLOS(enemy,E); B->BP->EResourceEnterLOS(enemy,E); if( RAIDEBUGGING ) *l<<"#"; }
Enemy::Enemy(EnemyInfo::EnemyData::enemy_type type, EnemyInfo::EnemyData::enemy_rank rank) : Entity() { this->type = EntityData::entity_type::ENEMY; direction = Entity::Direction::LEFT; movementCounter = 0; movementBoundaries = b2Vec2(0, 100); cEnemyInfo = EnemyInfo(100, 20, 6.0f, type, rank); }
void cRAI::EnemyEnterRadar(int enemy) { if( RAIDEBUGGING ) *l<<"\nEnemyEnterRadar("<<enemy<<")"; if( cb->GetUnitPos(enemy).x <= 0 && cb->GetUnitPos(enemy).y <= 0 && cb->GetUnitPos(enemy).z <= 0 ) // ! Work Around: Spring-Version(v0.72b1-0.76b1) { DebugEnemyEnterRadarError++; *l<<"\nWARNING: EnemyEnterRadar("<<enemy<<"): enemy position is invalid"; return; } DebugEnemyEnterRadar++; if( Enemies.find(enemy) == Enemies.end() ) Enemies.insert(iePair(enemy,EnemyInfo())); EnemyInfo *E = &Enemies.find(enemy)->second; E->inRadar=true; UM->EnemyEnterRadar(enemy,E); if( RAIDEBUGGING ) *l<<"#"; }
void EnemyInfoController::pushEnemyData(CCDictionary* dict) { string uuid = dict->valueForKey("uuid")->getCString(); EnemyInfo info = EnemyInfo(dict); if (info.allianceId == GlobalData::shared()->playerInfo.allianceInfo.uid) { if (info.defType== Trebuchet) { return; } } bool _tmpB = true; std::vector<EnemyInfo>::iterator it = m_enemyInfos.begin(); for (int i=0; i<m_enemyInfos.size(); i++) { if (m_enemyInfos[i].uuid == info.uuid) { if (dict->objectForKey("et")) { m_enemyInfos[i].stampTime = dict->valueForKey("et")->doubleValue()/1000; m_enemyInfos[i].arrivalTime = m_enemyInfos[i].stampTime; if (m_enemyInfos[i].arrivalTime>0) { m_enemyInfos[i].arrivalTime = GlobalData::shared()->changeTime(m_enemyInfos[i].arrivalTime); } }else { m_enemyInfos.erase(it); m_enemyInfos.push_back(info); } // m_enemyInfos[i].stampTime = info.stampTime; // m_enemyInfos[i].arrivalTime = info.arrivalTime; _tmpB = false; break; } it++; } if (_tmpB && info.name!="") { m_enemyInfos.push_back(info); } CCSafeNotificationCenter::sharedNotificationCenter()->postNotification(ENEMY_INFO_LIST_CHANGE); }
void EnemyInfoController::initEnemyData(CCDictionary* dict) { auto arr = dynamic_cast<CCArray*>(dict->objectForKey("enemy")); if(arr==NULL) { return; } CCDictionary* item = NULL; m_enemyInfos.clear(); for (int i=0; i<arr->count(); i++) { item = _dict(arr->objectAtIndex(i)); EnemyInfo info = EnemyInfo(item); m_enemyInfos.push_back(info); } m_ignorInfos.clear(); std::string ignoreStr = GlobalData::shared()->playerInfo.uid + "WTIgnoreList"; std::string ignoreList = CCUserDefault::sharedUserDefault()->getStringForKey(ignoreStr.c_str(), ""); vector<std::string> vector1; CCCommonUtils::splitString(ignoreList, "|", vector1); int num = vector1.size(); for (int i = 0; i < num; i++) { for (int j = 0; j < m_enemyInfos.size(); j++) { if (m_enemyInfos[j].uuid == vector1[i]) { m_ignorInfos.push_back(m_enemyInfos[j]); break; } } } ignoreList = ""; for (int i = 0; i<m_ignorInfos.size(); i++) { ignoreList.append(m_ignorInfos[i].uuid); if (i != m_ignorInfos.size() - 1) { ignoreList.append("|"); } } m_ignorInfos.clear(); CCUserDefault::sharedUserDefault()->setStringForKey(ignoreStr.c_str(), ignoreList.c_str()); CCUserDefault::sharedUserDefault()->flush(); }