- if(block.get_train())
- {
- GL::Color color;
- map<Train *, GL::Color>::iterator i = train_colors.find(block.get_train());
- if(i!=train_colors.end())
- color = i->second;
-
- if(active)
- set_block_color(block, color*0.6);
- else
- set_block_color(block, color*0.5+0.5);
- }
- else if(active)
- set_block_color(block, GL::Color(0.6));
- else
- set_block_color(block, GL::Color(1));
-}
-
-void Engineer::sensor_event(unsigned addr, bool)
-{
- const set<Block *> &blocks = layout.get_blocks();
- for(set<Block *>::const_iterator i=blocks.begin(); i!=blocks.end(); ++i)
- if((*i)->get_sensor_id()==addr)
- reset_block_color(**i);
-}
-
-void Engineer::block_reserved(const Block &block, const Train *)
-{
- reset_block_color(block);
+ // XXX Do this better; make this function a template?
+ if(Vehicle *veh = layout.pick<Vehicle>(Ray(start, Vector(ray))))
+ return veh;
+ return layout.pick<Track>(Ray(start, Vector(ray)));