std::vector<Vehicle *> vehicles;
BlockList blocks;
BlockList::iterator cur_blocks_end;
- BlockList::iterator clear_blocks_end;
Block *pending_block;
Block *stop_at_block;
bool reserving;
void add_ai(TrainAI &);
void remove_ai(TrainAI &);
- TrainAI *get_tagged_ai(const std::string &) const;
void ai_message(const TrainAI::Message &);
+ template<typename T>
+ T *get_ai_of_type() const
+ {
+ for(std::list<TrainAI *>::const_iterator i=ais.begin(); i!=ais.end(); ++i)
+ if(T *ai = dynamic_cast<T *>(*i))
+ return ai;
+ return 0;
+ }
+
void place(Block &, unsigned);
void unplace();
bool is_placed() const { return !blocks.empty(); }
public:
void reserve_more();
private:
- void check_turnout_paths(bool);
float get_reserved_distance_until(const Block *, bool) const;
void release_blocks();
void release_blocks(BlockList::iterator, BlockList::iterator);