void AIStatus::IMDraw() { if(this->enabled == true) { GameScene* sc = (GameScene*) this->_pGs; //im cost numbers for(std::map<int, InfluenceMapNode>::iterator node = sc->getInfluenceMap()->getMap()->begin(); node != sc->getInfluenceMap()->getMap()->end(); ++node) { if(((InfluenceMapNode)node->second).cost > -1) { std::stringstream ss1; ss1 << ((InfluenceMapNode)node->second).cost; //+ ((InfluenceMapNode)node->second).pTower->GetStrength() ; Label * lbl = Label::create(ss1.str(), "Arial", 12, CCSizeMake(sc->getTiledMap()->getTileSize().width, sc->getTiledMap()->getTileSize().height), kCCTextAlignmentCenter); lbl->setPosition(sc->getMapInfo()->ConvertIdToPoint(node->first)); Rect r = lbl->getBoundingBox(); Sprite * spr = Sprite::create("sprite_Blue_10x10.png", r); spr->setPosition(sc->getMapInfo()->ConvertIdToPoint(node->first)); spr->setOpacityModifyRGB(true); spr->setOpacity( 80 + (((InfluenceMapNode)node->second).cost / 10) ); sc->getMapLayer()->addChild(spr); sc->getMapLayer()->addChild(lbl); //add it to the local pointers holder std::pair< Label*, Sprite* > p; p.first = lbl; p.second = spr; this->imNodes.insert(p); } } } }
Radar::Radar(cocos2d::Layer & pGS, Point position) { this->_pGs = &pGS; this->radarBg1 = Sprite::create("radarBG1.png"); this->radarBg1->setPosition(position); GameScene* gs = (GameScene*) _pGs; gs->addChild(radarBg1); //populate the vector with the size of the mapinfo for ( int i = 0; i < (gs->getMapInfo()->GetTilesPerLine() * gs->getMapInfo()->GetTilesPerColumn()); i++ ) { this->map.push_back(RadarMapNode::Nothing); } }
void AIStatus::DrawRoads() { GameScene* sc = (GameScene*) this->_pGs; if(this->enabled == true) { //draw all roads ValueVector idd = sc->getMapInfo()->GetMapInfoTypeVec(MapInfoType::Road); for (auto& index: idd) { Label * lbl = Label::create("R", "Arial", 12, CCSizeMake(sc->getTiledMap()->getTileSize().width, sc->getTiledMap()->getTileSize().height), kCCTextAlignmentCenter); lbl->setPosition(sc->getMapInfo()->ConvertIdToPoint(index.asInt())); sc->getMapLayer()->addChild(lbl); std::pair < Label*, Sprite* > p; p.first = lbl; this->envNodes.insert(p); } } }
void GeneticAlgorithmProfile1::SimulationForward(ThreadData* td, AdditionalTowers& at) { GameScene* gs = ((GameScene*)td->_sc); std::cout << "\n@@@@@@@@@@@@@@@@@@@@@@@"; std::cout << "\nADDITIONAL TOWERS DBG"; td->bkCurrency = gs->playerHandler->GetCurrency(); std::cout << "\nplayerMoney : " << gs->playerHandler->GetCurrency(); //AI -> forward for ( int i = 0; i < 20; i++ ) { //FIRST CASE : enough money for placing tower and upgrading it to an element if(gs->playerHandler->GetCurrency() >= (50 + 500)) { Tower* n1 = new Tower(*gs, Settings::towerTexture, ((GameScene*)td->_sc)->playerHandler->tw); n1->setPosition(gs->getMapInfo()->GetRandomPointMidByType(MapInfoType::SimTowerPlace)); n1->SetHitPositions(gs->getMapInfo()); n1->SetStartingStats(Settings::towerAttackRange, Settings::towerAttackPoints, Settings::towerInbetweenAttacksPeriod, Settings::towerCost); at.additionalTowers.push_back(n1); gs->playerHandler->RemoveCoins(Settings::towerCost); if(gs->playerHandler->GetCurrency() >= 500) //element can be upgraded { int numOfFire, numOfWater, numOfEarth, numOfShock = 0; for(int a = 0; a < at.additionalTowers.size(); a++ ) { if(at.additionalTowers[a]->GetElement() == ElementalAffinity::Fire) { numOfFire++; } else if(at.additionalTowers[a]->GetElement() == ElementalAffinity::Water) { numOfWater++; } else if(at.additionalTowers[a]->GetElement() == ElementalAffinity::Earth) { numOfEarth++; } else if(at.additionalTowers[a]->GetElement() == ElementalAffinity::Shock) { numOfShock++; } } for ( std::list<Tower*>::iterator tower = gs->towerslist.begin(); tower != gs->towerslist.end(); ++tower ) { Tower* t = *tower; if(t->GetElement() == ElementalAffinity::Fire) { numOfFire++; } else if(t->GetElement() == ElementalAffinity::Water) { numOfWater++; } else if(t->GetElement() == ElementalAffinity::Earth) { numOfEarth++; } else if(t->GetElement() == ElementalAffinity::Shock) { numOfShock++; } } if(numOfEarth < numOfFire && numOfEarth < numOfWater && numOfEarth < numOfShock) { if(n1->UpgradeToEarth(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetEarthUpgradeCost()); //now upgrade atk spd while ( gs->playerHandler->GetCurrency() >= n1->toweRules->GetAttackUpgradeCost(*n1) || gs->playerHandler->GetCurrency() >= n1->toweRules->GetSpeedUpgradeCost(*n1) ) { if(n1->UpgradeAttackPower(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetAttackUpgradeCost(*n1)); } if(n1->UpgradeAttackSpeed(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetSpeedUpgradeCost(*n1)); } } } } else if(numOfFire < numOfEarth && numOfFire < numOfWater && numOfFire < numOfShock) { if(n1->UpgradeToFire(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetEarthUpgradeCost()); //now upgrade atk spd while ( gs->playerHandler->GetCurrency() >= n1->toweRules->GetAttackUpgradeCost(*n1) || gs->playerHandler->GetCurrency() >= n1->toweRules->GetSpeedUpgradeCost(*n1) ) { if(n1->UpgradeAttackPower(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetAttackUpgradeCost(*n1)); } if(n1->UpgradeAttackSpeed(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetSpeedUpgradeCost(*n1)); } } } } else if(numOfWater < numOfFire && numOfWater < numOfEarth && numOfWater < numOfShock) { if(n1->UpgradeToWater(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetEarthUpgradeCost()); //now upgrade atk spd while ( gs->playerHandler->GetCurrency() >= n1->toweRules->GetAttackUpgradeCost(*n1) || gs->playerHandler->GetCurrency() >= n1->toweRules->GetSpeedUpgradeCost(*n1) ) { if(n1->UpgradeAttackPower(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetAttackUpgradeCost(*n1)); } if(n1->UpgradeAttackSpeed(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetSpeedUpgradeCost(*n1)); } } } } else if(numOfShock < numOfFire && numOfShock < numOfWater && numOfShock < numOfEarth) { if(n1->UpgradeToShock(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetEarthUpgradeCost()); //now upgrade atk spd while ( gs->playerHandler->GetCurrency() >= n1->toweRules->GetAttackUpgradeCost(*n1) || gs->playerHandler->GetCurrency() >= n1->toweRules->GetSpeedUpgradeCost(*n1) ) { if(n1->UpgradeAttackPower(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetAttackUpgradeCost(*n1)); } if(n1->UpgradeAttackSpeed(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetSpeedUpgradeCost(*n1)); } } } } } } ///////////////////////////////////////// //SECOND CASE : upgrade an existing tower, priortize element upgrades if(gs->playerHandler->GetCurrency() >= 500) { int numOfFire, numOfWater, numOfEarth, numOfShock = 0; for(int a = 0; a < at.additionalTowers.size(); a++ ) { if(at.additionalTowers[a]->GetElement() == ElementalAffinity::Fire) { numOfFire++; } else if(at.additionalTowers[a]->GetElement() == ElementalAffinity::Water) { numOfWater++; } else if(at.additionalTowers[a]->GetElement() == ElementalAffinity::Earth) { numOfEarth++; } else if(at.additionalTowers[a]->GetElement() == ElementalAffinity::Shock) { numOfShock++; } } for ( std::list<Tower*>::iterator tower = gs->towerslist.begin(); tower != gs->towerslist.end(); ++tower ) { Tower* t = *tower; if(t->GetElement() == ElementalAffinity::Fire) { numOfFire++; } else if(t->GetElement() == ElementalAffinity::Water) { numOfWater++; } else if(t->GetElement() == ElementalAffinity::Earth) { numOfEarth++; } else if(t->GetElement() == ElementalAffinity::Shock) { numOfShock++; } } for ( std::list<Tower*>::iterator tower = gs->towerslist.begin(); tower != gs->towerslist.end(); ++tower ) { Tower* n1 = *tower; if(numOfEarth < numOfFire && numOfEarth < numOfWater && numOfEarth < numOfShock) { if(n1->UpgradeToEarth(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetEarthUpgradeCost()); //now upgrade atk spd while ( gs->playerHandler->GetCurrency() >= n1->toweRules->GetAttackUpgradeCost(*n1) || gs->playerHandler->GetCurrency() >= n1->toweRules->GetSpeedUpgradeCost(*n1) ) { if(n1->UpgradeAttackPower(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetAttackUpgradeCost(*n1)); } if(n1->UpgradeAttackSpeed(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetSpeedUpgradeCost(*n1)); } } } } else if(numOfFire < numOfEarth && numOfFire < numOfWater && numOfFire < numOfShock) { if(n1->UpgradeToFire(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetEarthUpgradeCost()); //now upgrade atk spd while ( gs->playerHandler->GetCurrency() >= n1->toweRules->GetAttackUpgradeCost(*n1) || gs->playerHandler->GetCurrency() >= n1->toweRules->GetSpeedUpgradeCost(*n1) ) { if(n1->UpgradeAttackPower(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetAttackUpgradeCost(*n1)); } if(n1->UpgradeAttackSpeed(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetSpeedUpgradeCost(*n1)); } } } } else if(numOfWater < numOfFire && numOfWater < numOfEarth && numOfWater < numOfShock) { if(n1->UpgradeToWater(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetEarthUpgradeCost()); //now upgrade atk spd while ( gs->playerHandler->GetCurrency() >= n1->toweRules->GetAttackUpgradeCost(*n1) || gs->playerHandler->GetCurrency() >= n1->toweRules->GetSpeedUpgradeCost(*n1) ) { if(n1->UpgradeAttackPower(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetAttackUpgradeCost(*n1)); } if(n1->UpgradeAttackSpeed(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetSpeedUpgradeCost(*n1)); } } } } else if(numOfShock < numOfFire && numOfShock < numOfWater && numOfShock < numOfEarth) { if(n1->UpgradeToShock(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetEarthUpgradeCost()); //now upgrade atk spd while ( gs->playerHandler->GetCurrency() >= n1->toweRules->GetAttackUpgradeCost(*n1) || gs->playerHandler->GetCurrency() >= n1->toweRules->GetSpeedUpgradeCost(*n1) ) { if(n1->UpgradeAttackPower(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetAttackUpgradeCost(*n1)); } if(n1->UpgradeAttackSpeed(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetSpeedUpgradeCost(*n1)); } } } } } } // THIRD CASE : additional upgrades , attack power and speed for ( std::list<Tower*>::iterator tower = gs->towerslist.begin(); tower != gs->towerslist.end(); ++tower ) { Tower* n1 = *tower; if(n1->GetElement() > 0) //not worth it with out element { while ( gs->playerHandler->GetCurrency() >= n1->toweRules->GetAttackUpgradeCost(*n1) || gs->playerHandler->GetCurrency() >= n1->toweRules->GetSpeedUpgradeCost(*n1) ) { if(n1->UpgradeAttackPower(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetAttackUpgradeCost(*n1)); } if(n1->UpgradeAttackSpeed(gs->playerHandler)) { gs->playerHandler->RemoveCoins(n1->toweRules->GetSpeedUpgradeCost(*n1)); } } } } } gs->playerHandler->SetCurrency(td->bkCurrency); std::cout << "\n@@@@@@@@@@@@@@@@@@@@@@@"; }