-void Engineer::reset_block_color(const Block &block)
-{
- bool active = block.get_state()>Block::INACTIVE;
-
- 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));
-}
-
-Track *Engineer::pick_track(const Vector &p)
-{
- const GL::Vector3 &start = camera.get_position();
- GL::Vector4 ray = camera.unproject(GL::Vector4(p.x, p.y, 0, 0));
-
- return layout.pick_track(Vector(start.x, start.y, start.z), Vector(ray.x, ray.y, ray.z));
+ // 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)));