bool CUBuild::OkBuildSelection(string name){ CUnitTypeData* u =G->UnitDefLoader->GetUnitTypeDataByName(name); float emax=1000000000; string key = "Resource\\MaxEnergy\\"; key += u->GetName(); G->Get_mod_tdf()->GetDef(emax,"3000000",key);// +300k energy per tick by default/**/ if(G->Pl->GetEnergyIncome() > emax){ //G->L.print("Factor::CBuild emax " + name); return false; } //NLOG("CManufacturer::CBuild Resource\\MinEnergy\\"); float emin=1; key = "Resource\\MinEnergy\\"; key += u->GetName(); G->Get_mod_tdf()->GetDef(emin,"0",key);// +0k energy per tick by default/**/ if(G->Pl->GetEnergyIncome() < emin){ //G->L.print("Factor::CBuild emin " + name); return false; } // Now sort out stuff that can only be built one at a time if(u->GetSoloBuild()){ if(u->GetSoloBuildActive()){ // One is already being built! We're not supposed to build more than one at any one time. return false; } deque<CBPlan* >* b = G->Manufacturer->BPlans; if(b->empty() == false){ // for(deque<CBPlan* >::iterator i = b->begin(); i != b->end(); ++i){ string s = (*i)->utd->GetName(); if(s == u->GetName()){ return false; } } } } // Now sort out if it's one of those things that can only be built once if(u->GetSingleBuild()){ if(u->GetSingleBuildActive()){ return false; } deque<CBPlan* >* b = G->Manufacturer->BPlans; if(b->empty() == false){ // for(deque<CBPlan* >::iterator i = b->begin(); i != b->end(); ++i){ string s = (*i)->utd->GetName(); if(s == name){ return false; } } } } return true; }