X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fengineer%2Fengineer.cpp;h=ec5610396f45f3c7530be5bd5f143fbbfafdfc3c;hb=25b79ab38c2be2e5c89b8240504f641fd9c4899c;hp=3ac7c7682a605cc06942c23cfee7607db157259c;hpb=1d735b80482317fd930eb47ca255ab9f1f120a7d;p=r2c2.git diff --git a/source/engineer/engineer.cpp b/source/engineer/engineer.cpp index 3ac7c76..ec56103 100644 --- a/source/engineer/engineer.cpp +++ b/source/engineer/engineer.cpp @@ -119,14 +119,19 @@ Train *Engineer::add_train(unsigned addr) train_panels.push_back(tpanel); tpanel->set_visible(true); - placing_train=train; - placing_block=0; - main_panel->set_status_text("Select location"); + place_train(*train); return train; } } +void Engineer::place_train(Train &train) +{ + placing_train=&train; + placing_block=0; + main_panel->set_status_text("Select location"); +} + int Engineer::main() { dpy=new Graphics::Display; @@ -284,7 +289,7 @@ void Engineer::button_press(int x, int y, unsigned btn, unsigned) { if(placing_train) { - if(btn==1 && placing_block) + if(btn==1 && placing_block && !placing_block->get_train()) { set_block_color(*placing_block, GL::Color(1, 1, 1)); @@ -335,7 +340,7 @@ void Engineer::pointer_motion(int x, int y) if(&block!=placing_block) { if(placing_block) - set_block_color(*placing_block, GL::Color(1, 1, 1)); + reset_block_color(*placing_block); placing_block=█ placing_entry=0; set_block_color(*placing_block, GL::Color(0.5, 1, 0.7)); @@ -399,37 +404,37 @@ void Engineer::set_block_color(const Block &block, const GL::Color &color) layout_3d.get_track(**i).set_color(color); } -void Engineer::sensor_event(bool state, Sensor *sensor) -{ - const list <racks=layout_3d.get_tracks(); - for(list::const_iterator i=ltracks.begin(); i!=ltracks.end(); ++i) - if((*i)->get_track().get_sensor_id()==sensor->get_address()) - { - Block &block=trfc_mgr->get_block_by_track((*i)->get_track()); - if(state) - (*i)->set_color(GL::Color(1, 0.5, 0.3)); - else if(block.get_train()) - set_block_color(block, GL::Color(1, 1, 0.3)); - else - (*i)->set_color(GL::Color(1, 1, 1)); - } -} - -void Engineer::block_reserved(const Block &block, const Train *train) +void Engineer::reset_block_color(const Block &block) { if(unsigned sid=block.get_sensor_id()) { Sensor &sensor=control.get_sensor(sid); if(sensor.get_state()) + { + set_block_color(block, GL::Color(1, 0.5, 0.3)); return; + } } - if(train) + if(block.get_train()) set_block_color(block, GL::Color(1, 1, 0.3)); else set_block_color(block, GL::Color(1, 1, 1)); } +void Engineer::sensor_event(bool, Sensor *sensor) +{ + const list &blocks=trfc_mgr->get_blocks(); + for(list::const_iterator i=blocks.begin(); i!=blocks.end(); ++i) + if((*i)->get_sensor_id()==sensor->get_address()) + reset_block_color(**i); +} + +void Engineer::block_reserved(const Block &block, const Train *) +{ + reset_block_color(block); +} + void Engineer::project_3d() { glMatrixMode(GL_PROJECTION);