Ejemplo n.º 1
0
void COrderRouter::Update(){
    //
    if(EVERY_((5 FRAMES))){
        CleanUpOrders();
    }
    if(EVERY_((3 FRAMES) /*+ team*/)){
        IssueOrders();
    }
}
Ejemplo n.º 2
0
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();
		}
	}
}
Ejemplo n.º 4
0
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;
			}
		}
	}
Ejemplo n.º 6
0
	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;
		}

	}