⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smonitor_dev.c

📁 robocup rcssmonitor-11.1.1.zip
💻 C
📖 第 1 页 / 共 5 页
字号:
bool SMonitorDevice::process_options(const char * fname) {  ValueParser vp(fname,"SMonitorDevice");  return process_options(vp);}bool SMonitorDevice::process_options(int argc, char const* const* argv) {  ValueParser vp(argc,argv,"m_");  return process_options(vp);}void SMonitorDevice:: help_char_command(std::ostream & o) const {  o << "\n"    << "server commands:\n"    << "b = drop ball at current mouse pointer position\n"    << "c = connect to server\n"    << "l = free kick for left team\n"    << "r = free kick for right team\n"    << "s = start a match\n"    << "\n"    << "monitor commands:\n"    << "m = toggle move/view mode\n"    << "p = print current positions on cout\n"    << "P = print current formation (for left or right)\n"    << "v = toggle displaying future ball position and velocity"//      << "T = toggle tracking of the ball\n"    << "\n"    << "coach commands:\n"    << "t = toggle current team (starts with left team)\n"    << "i = position player (of the current team) with number i at mouse pointer position\n"    << "    i can take following values: 1,2,3,4,5,6,7,8,9\n"    << "                                 A or 0 which means 10\n"    << "		                 B which means 11\n";}void SMonitorDevice::help_options(std::ostream & o) const {  o << "\nsoccer monitor options:"    << "\n"    << "\n(all colors are define by their rrggbb values)";  generic_description_of_options(o,1);}void SMonitorDevice::generate_file_options(std::ostream & o) const {  o << "\n[SMonitorDevice]"    << "\n"    << "\n### all options can be used on the command line if prefixed with '-m_'"    << "\n### for example '-m_host localhost' will specify the host of the soccer server"    << "\n"    << "\n#color options: all colors are define by their rrggbb values"    << "\n";  generic_description_of_options(o,0);}bool SMonitorDevice::process_char_command(BuilderBase * build, MenuBase * menu, const InputEvent & event) {  bool redraw= false;//  static char buf[100];//  ostrstream dum_str(buf,100);  switch (event.key) {  case 'c':    if ( options.just_edit ) {      std::cout << "\nthis key is not set in edit mode";      break;    }    server.init_serv_addr(options.server_host,options.server_port);    send_dispinit();    server_state.reset();    break;  case 'l':    if ( options.just_edit ) {      std::cout << "\nthis key is not set in edit mode";      break;    }    send_dispfoul_left(event.pos);    break;#if 1  case 'm':    options.active_in_mode= id_invalid;    if ( options.mode == Options::MODE_STANDARD) {      options.mode= Options::MODE_MOVE;    }    else if ( options.mode == Options::MODE_MOVE) {      build->set_cmd_set_frame_visible(frame_shadow,0);      options.mode= Options::MODE_SHOW_VIEW_AREA;    }    else if ( options.mode== Options::MODE_SHOW_VIEW_AREA) {      build->set_cmd_set_frame_visible(frame_varea,0);      options.mode= Options::MODE_STANDARD;    }    menu->set_button_label(BUTTON_MODE,options.get_mode_string());    return true;    break;#endif  case 'p':    std::cout << "\n";    server_pos.print_inline(std::cout);    std::cout << std::flush;    break;  case 'P':    std::cout << "\n";    server_pos.print_formation(std::cout,coach_state.left_team, coach_state.left_team);    std::cout << std::flush;    break;  case 'T':    //options.toggle_track_ball();    break;  case 'r':    if ( options.just_edit ) {      std::cout << "\nthis key is not set in edit mode";      break;    }    send_dispfoul_right(event.pos);    break;  case 's':    if ( options.just_edit ) {      std::cout << "\nthis key is not set in edit mode";      break;    }    //server.init_serv_addr(options.server_host,options.server_port);    send_dispstart();    break;  case 'v':    options.toggle_show_ball_vel();    if ( options.show_ball_vel ) {      vis_ball.set_show_vel( server_pos.ball.vel );    }    else {      vis_ball.unset_show_vel();    }    return true;    break;  case '>':    break; // just a debugging feature    if (options.lt_show_spare_space_to_offside_line)      options.lt_show_spare_space_to_offside_line= false;    else {      options.lt_show_spare_space_to_offside_line= true;      options.rt_show_spare_space_to_offside_line= false;    }    break;  case '<':    break; //just a debugging feature    if (options.rt_show_spare_space_to_offside_line)      options.rt_show_spare_space_to_offside_line= false;    else {      options.rt_show_spare_space_to_offside_line= true;      options.lt_show_spare_space_to_offside_line= false;    }    break;  }  int o_id= id_invalid;  if ( 'b' == event.key ) o_id= id_ball;  else if ( 'A' == event.key || '0' == event.key) o_id= 9;  else if ( 'B' == event.key ) o_id= 10;  else o_id= int(event.key)-49;  if ( p_valid(o_id) && !coach_state.left_team) o_id += 11;  if ( options.mode == Options::MODE_MOVE && o_valid(o_id) || id_ball == o_id) {    if ( options.just_edit) {      set_object_pos(build,o_id,event.pos);      return true;    }    else {#if 1 // if there is no connection to the server, this is needed      send_object_pos(o_id,event.pos);      set_object_pos(build,o_id,event.pos);      return true;#else      send_object_pos(o_id,event.pos);      return false; //don't redraw#endif    }  }  if ( options.mode == Options::MODE_SHOW_VIEW_AREA && p_valid( o_id ) ) {    if (options.active_in_mode == o_id) {      options.active_in_mode= id_invalid;      build->set_cmd_set_frame_visible(frame_varea,0);    }    else {      options.active_in_mode= o_id;      Positions::Player & p= server_pos.ref_player(options.active_in_mode);      build->set_cmd_set_frame_pos_ang(frame_varea,p.pos,p.body_angle+p.head_angle_rel);      vis_view_area.set_view_mode(p.view_quality, p.view_width);      build->set_cmd_set_frame_visible(frame_varea,1);    }    return true; //redraw  }  switch (event.key) {  case 't': coach_state.toggle_team(); break;  case 'e':#if 0    if ( options.just_edit ) {      std::cout << "\nthis key is not set in edit mode";      break;    }    coach.send_msg("(ear on)",9);#else    std::cout << "\nthis key is not set anymore";#endif    break;    //case 'm': COACH::sock.send_msg("(change_mode play_on)",22);  }  return redraw;}bool SMonitorDevice::process_mouse_button_event(BuilderBase * build, const InputEvent & event) {  //options.active_in_mode= id_invalid;  static unsigned long last_time=0;  //if (event.mouse_button != 2)  //  return false;  if ( event.mouse_button == 2 &&       event.mouse_button_state == InputEvent::MOUSE_BUTTON_PRESSED ) {    Point2d rel;    double min= 100.0;    int p_min= id_invalid;    for (int i=0; i<MAX_PLAYER*2; i++) {      rel.x= event.pos.x - server_pos.player[i].pos.x;      rel.y= event.pos.y - server_pos.player[i].pos.y;      //take the greater absolute value      double dum=  fabs(rel.x) > fabs(rel.y) ? fabs(rel.x) : fabs(rel.y);      if ( dum < min ) {	min= dum;	p_min= i;      }    }    rel.x= event.pos.x - server_pos.ball.pos.x;    rel.y= event.pos.y - server_pos.ball.pos.y;    double dum=  fabs(rel.x) > fabs(rel.y) ? fabs(rel.x) : fabs(rel.y);    if ( dum < min ) {      min= dum;      p_min= id_ball;    }    if ( min <= options.kick_radius * 1.5 * options.scale_factor() )      options.active_in_mode= p_min;    else      options.active_in_mode= id_invalid;    //std::cout << "\noptions.active_in_mode= " << options.active_in_mode << flush;    if ( options.mode == Options::MODE_MOVE ) {      if ( o_valid(options.active_in_mode) ) {	build->set_cmd_set_frame_pos(frame_shadow, event.pos);	build->set_cmd_set_frame_visible(frame_shadow,1);      }    }    else if ( options.mode == Options::MODE_SHOW_VIEW_AREA ) {      if ( !p_valid( options.active_in_mode))	build->set_cmd_set_frame_visible(frame_varea,0);      else {	Positions::Player & p= server_pos.ref_player(options.active_in_mode);	build->set_cmd_set_frame_pos_ang(frame_varea,p.pos,p.body_angle+p.head_angle_rel);	vis_view_area.set_view_mode(p.view_quality, p.view_width);	build->set_cmd_set_frame_visible(frame_varea,1);      }      return true; //redraw    }    //std::cout << "\n>>>>>>>>>>>>>>>>>>>> min= " << min << " " << options.kick_radius * 1.5;    return false; //no need for redraw  }  if ( event.mouse_button_state == InputEvent::MOUSE_BUTTON_MOTION       && options.mode == Options::MODE_MOVE)      if ( p_valid( options.active_in_mode)           && event.time > 75 + last_time )      {          build->set_cmd_set_frame_pos( p_frame(options.active_in_mode),                                        event.pos );          last_time = event.time;          return true;      }      else if ( o_ball(options.active_in_mode)                && event.time > 75 + last_time )      {          build->set_cmd_set_frame_pos(frame_ball, event.pos);          last_time = event.time;          return true;      }      else          return false;  if ( event.mouse_button == 2 &&       event.mouse_button_state == InputEvent::MOUSE_BUTTON_RELEASED && options.mode == Options::MODE_MOVE) {    if ( !o_valid(options.active_in_mode) )      return false;    bool res= false;    if (options.just_edit) {      set_object_pos(build,options.active_in_mode, event.pos);      res= true;    }    else {#if 1      set_object_pos(build,options.active_in_mode, event.pos); //is needed      res= true;                       // when no connection to a server is established#endif      send_object_pos(options.active_in_mode, event.pos); //send new pos to server!    }    build->set_cmd_set_frame_visible(frame_shadow,0);    last_time= 0;    options.active_in_mode= id_invalid;    return res;  }  return false;}bool SMonitorDevice::process_menu_button(BuilderBase * build, MenuBase * menu, const InputEvent & event) {  char buf[20];  bool chg= false;  //static unsigned long last_time=0;  switch ( event.menu_button ) {  case BUTTON_START:    send_dispstart();    return false;  case BUTTON_RECONNECT:    if ( options.just_edit ) {      std::cout << "\nthis key is not set in edit mode";      break;    }    server.init_serv_addr(options.server_host,options.server_port);    send_dispinit();    server_state.reset();    return false;  case BUTTON_SCALE_LEVEL:    if (event.mouse_button==1) {      chg= false;      if (options.scale_level > options.scale_level_min) {	options.scale_level--;	chg= true;      }    }    else {      if (options.scale_level < options.scale_level_max) {	options.scale_level++;	chg= true;      }    }    if (chg) {      double scale= options.scale_factor();      sprintf(buf,"scale %.1f", scale);      menu->set_button_label(BUTTON_SCALE_LEVEL,buf);      set_all_objects_scale(build, scale);    }    return chg;  case BUTTON_INFO_LEVEL:    if (event.mouse_button==1) {      chg= false;      if (options.info_level > options.info_level_min) {	options.info_level--;	chg= true;      }    }    else {      if (options.info_level < options.info_level_max) {	options.info_level++;	chg= true;      }    }    if (chg) {      sprintf(buf,"detail %d", options.info_level);      vis_player_set_info_level(options.info_level);      vis_ball_set_info_level(options.info_level);      menu->set_button_label(BUTTON_INFO_LEVEL,buf);    }    return chg;  case BUTTON_MODE:    options.active_in_mode= id_invalid;    chg= false;    if (event.mouse_button==1) {      if ( options.mode== Options::MODE_MOVE) {	build->set_cmd_set_frame_visible(frame_shadow,0);	options.mode= Options::MODE_STANDARD;	chg= true;      }      else if ( options.mode== Options::MODE_SHOW_VIEW_AREA) {	build->set_cmd_set_frame_visible(frame_varea,0);	options.mode= Options::MODE_MOVE;	chg= true;      }    }    else {      if ( options.mode== Options::MODE_STANDARD) {	options.mode= Options::MODE_MOVE;	chg= true;      }      else if ( options.mode== Options::MODE_MOVE) {	build->set_cmd_set_frame_visible(frame_shadow,0);	options.mode= Options::MODE_SHOW_VIEW_AREA;	chg= true;      }    }    if (chg)      menu->set_button_label(BUTTON_MODE,options.get_mode_string());    return chg;  case BUTTON_UNZOOM:    build->set_cmd_set_view_area(initial_area);    return true;  case BUTTON_QUIT:    menu->set_exit_program();    return false;  }  return false;}bool SMonitorDevice::process_popup_button(BuilderBase * build, MenuBase * popup, const InputEvent & event) {  static Point2d pos;  //std::cout << "\npos= " << pos.x << "," << pos.y << flush;  //std::cout << "\ninput_pos= " << event.pos.x << "," << event.pos.y << flush;  if ( event.mouse_button_state == InputEvent::MOUSE_BUTTON_PRESSED) {    pos= event.pos;    return false; //don't redraw  }  switch (event.menu_button) {  case POPUP_BUTTON_DROP_BALL:    send_dispball( pos );    //set_objec

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -