void COrderRouter::Update(){ // if(EVERY_((5 FRAMES))){ CleanUpOrders(); } if(EVERY_((3 FRAMES) /*+ team*/)){ IssueOrders(); } }
void CActions::Update(){ NLOG("CActions::Update"); if(EVERY_((15 FRAMES))){ if(points.empty()==false){ for(vector<float3>::iterator i = points.begin(); i!=points.end(); ++i){ if(G->InLOS(*i)==true){ points.erase(i); break; } } } } if(G->GetCurrentFrame()== (20 SECONDS)){ if(G->M->m->NumSpotsFound > 0){ vector<float3>* spots = G->M->getHotSpots(); if(spots!=0){ if(spots->empty() == false){ for(vector<float3>::iterator i = spots->begin(); i != spots->end(); ++i){ float3 q = *i; q.y=G->cb->GetElevation(q.x,q.z); AddPoint(q); } } } } } }
void CMetalMakerBehaviour::RecieveMessage(CMessage &message){ if(message.GetType() == string("update")){ if(EVERY_((1 SECONDS))){ float energy=G->cb->GetEnergy(); float estore=G->cb->GetEnergyStorage(); if(energy<estore*0.3f){ if(turnedOn){ TCommand tc(((CUnit*)unit.get())->GetID(),"assigner:: turnoff"); tc.ID(CMD_ONOFF); tc.Push(0); G->OrderRouter->GiveOrder(tc); turnedOn=false; } } else if(energy>estore*0.6f){ if(!turnedOn){ TCommand tc(((CUnit*)unit.get())->GetID(),"assigner:: turnon"); tc.ID(CMD_ONOFF); tc.Push(1); G->OrderRouter->GiveOrder(tc); turnedOn=true; } } } }else if(message.GetType() == string("unitdestroyed")){ if(message.GetParameter(0)== ((CUnit*)unit.get())->GetID()){ End(); } } }
void Assigner::Update(){ int frameNum=G->cb->GetCurrentFrame(); // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| // Every second check our metal makers. (nearly the // same code as that in the metal maker AI) if(EVERY_(2 SECONDS)){ float energy=G->cb->GetEnergy(); float estore=G->cb->GetEnergyStorage(); float dif=energy-lastEnergy; lastEnergy=energy; if(energy<estore*0.35f){ float needed=-dif+5; //how much energy we need to save to turn positive for(map<int,UnitInfo>::iterator ui=myUnits.begin();ui!=myUnits.end();++ui){ //find makers to turn off if(needed<0) break; if(ui->second.turnedOn){ needed-=ui->second.energyUse; TCommand tc; tc.created = G->cb->GetCurrentFrame(); tc.Priority = tc_low; tc.unit = ui->first; tc.c.id=CMD_ONOFF; tc.c.params.push_back(0); G->GiveOrder(tc); ui->second.turnedOn=false; } } } else if(energy>estore*0.7f){ //G->L.print("negative maker assigner"); float needed=dif+5; //how much energy we need to start using to turn negative for(map<int,UnitInfo>::iterator ui=myUnits.begin();ui!=myUnits.end();++ui){ //find makers to turn on if(needed<0) break; if(!ui->second.turnedOn){ needed-=ui->second.energyUse; TCommand tc; tc.created = G->cb->GetCurrentFrame(); tc.Priority = tc_low; tc.unit = ui->first; tc.c.id=CMD_ONOFF; tc.c.params.push_back(1); G->GiveOrder(tc); ui->second.turnedOn=true; } } } } }
void CAttackBehaviour::RecieveMessage(CMessage &message){ if(message.GetType() == string("update")){ if(engaged){ return; } if(EVERY_(120 FRAMES)){ float3 pos = G->GetUnitPos(uid); if(G->Map->CheckFloat3(pos)==false){ return; } engaged = G->Actions->AttackNear(uid, 3.5f); } }else if(message.GetType() == string("unitdestroyed")){ if(message.GetParameter(0)== uid){ End(); } }else if(message.GetType() == string("unitidle")){ if(message.GetParameter(0)== uid){ engaged=false; } } }
void CUnit::RecieveMessage(CMessage &message){ NLOG("CUnit::RecieveMessage"); if(!IsValid()){ return; } if(message.GetType() == string("update")){ if(under_construction){ return; } if(EVERY_((GetAge()%32+20))){ if(currentTask.get() != 0){ if(!currentTask->IsValid()){ // taskManager->TaskFinished(); currentTask = taskManager->GetNextTask(); if(currentTask.get() != 0){ currentTask->Init(); G->RegisterMessageHandler(currentTask); }else{ currentTask = boost::shared_ptr<IModule>(); } } }else{ // currentTask = taskManager->GetNextTask(); if(currentTask.get() != 0){ currentTask->Init(); G->RegisterMessageHandler(currentTask); } } } }else if(message.GetType() == string("unitfinished")){ if(message.GetParameter(0) == this->uid){ under_construction = false; LoadBehaviours(); } }else if(message.GetType() == string("unitdestroyed")){ if(message.GetParameter(0) == uid){ if(!utd->IsMobile()){ G->BuildingPlacer->UnBlock(G->GetUnitPos(uid),utd); } G->RemoveHandler(currentTask); taskManager->RemoveAllTasks(); //G->RemoveHandler(taskManager); if(!behaviours.empty()){ behaviours.erase(behaviours.begin(),behaviours.end()); behaviours.clear(); } this->End(); return; } } if(under_construction){ return; } }