// Comportement de l'usager lambda (comportement par defaut)
ifag.stuck{
ag.decision=Wait// attendre
}else{
ag.decision=Move// avancer
}
}
//sinon comportement par défaut (comportement de l'usager lambda)
}elseifag.position==ag.destination&&(ag.isOn[ag.position]=="W"||ag.isOn[ag.position]=="S"){// si l'agent est arrivé à sa destination et qu'il est sur une sortie
//fmt.Println(ag.id, "disappear")
ag.decision=Disappear
}elseifag.stuck{// si l'agent est bloqué
ag.decision=Wait
}else{
ag.decision=Move
}
}
}
func(c*Controleur)Act(ag*Agent){
ifag.decision==Move{
switchag.decision{
caseMove:
if!c.isExpired{
ag.destination=c.randomDestination(ag)
}else{
ag.destination=ag.findNearestExit()
}
ag.MoveAgent()
}elseifag.decision==Wait{
caseWait:
n:=rand.Intn(2)// temps d'attente aléatoire
time.Sleep(time.Duration(n)*time.Second)
}else{// Expel ou Wait
caseDisappear:
RemoveAgent(&ag.env.station,ag)
default://Expel ou Wait
agt_face_id:=AgentID(c.faceCase)//id de l'agent qui se trouve devant le controleur
//fmt.Print("L'agent ", agt_face_id, " a été expulsé\n")
ag.env.agentsChan[agt_face_id]<-*NewRequest(ag.env.agentsChan[ag.id],ag.decision)// envoie la decision du controleur à l'agent qui se trouve devant lui
}elseifag.position==ag.destination&&(ag.isOn[ag.position]=="W"||ag.isOn[ag.position]=="S"){// si l'agent est arrivé à sa destination et qu'il est sur une sortie