+ ais.push_back(&ai);
+ ai.signal_event.connect(sigc::bind<0>(signal_ai_event, sigc::ref(ai)));
+}
+
+void Train::remove_ai(TrainAI &ai)
+{
+ list<TrainAI *>::iterator i = find(ais.begin(), ais.end(), &ai);
+ if(i!=ais.end())
+ ais.erase(i);
+}
+
+TrainAI *Train::get_tagged_ai(const string &tag) const
+{
+ for(list<TrainAI *>::const_iterator i=ais.begin(); i!=ais.end(); ++i)
+ if((*i)->get_tag()==tag)
+ return *i;
+
+ return 0;
+}
+
+void Train::ai_message(const TrainAI::Message &msg)
+{
+ for(list<TrainAI *>::iterator i=ais.begin(); i!=ais.end(); ++i)
+ (*i)->message(msg);