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

📄 smonitor_dev.c

📁 robocup rcssmonitor-11.1.1.zip
💻 C
📖 第 1 页 / 共 5 页
字号:
const int SMonitorDevice::BUTTON_SCALE_LEVEL= 2;const int SMonitorDevice::BUTTON_INFO_LEVEL= 3;const int SMonitorDevice::BUTTON_MODE= 4;const int SMonitorDevice::BUTTON_UNZOOM= 5;const int SMonitorDevice::BUTTON_QUIT= 6;const int SMonitorDevice::BUTTON_NUMBER= 7;const int SMonitorDevice::POPUP_BUTTON_DROP_BALL= 0;const int SMonitorDevice::POPUP_BUTTON_FREE_KICK_LEFT= 1;const int SMonitorDevice::POPUP_BUTTON_FREE_KICK_RIGHT= 2;const int SMonitorDevice::POPUP_BUTTON_NUMBER= 3;const int SMonitorDevice::Options::info_level_min= 0;const int SMonitorDevice::Options::info_level_def= 1;const int SMonitorDevice::Options::info_level_max= 3;const int SMonitorDevice::Options::scale_level_min= 0;const int SMonitorDevice::Options::scale_level_def= 0;const int SMonitorDevice::Options::scale_level_max= 5;const double SMonitorDevice::Options::scale_level_inc= 0.2;const double SMonitorDevice::Options::scale_level_beg= 1.0;const int SMonitorDevice::Options::MODE_STANDARD= 0;const int SMonitorDevice::Options::MODE_MOVE= 1;const int SMonitorDevice::Options::MODE_SHOW_VIEW_AREA= 2;const int SMonitorDevice::id_ball= -1;const int SMonitorDevice::id_invalid= -2;SMonitorDevice::Options::Options() {  server_port= 6000;  strcpy(server_host,"localhost");  coach_port= server_port+1;  protocol_version= 2;  connect_on_start= true;  keepaway = false;  keepaway_length = 20.0;  keepaway_width = 20.0;  list_player_types= false;  show_ball_collisions= false;  just_edit= false;  track_ball= false;  show_ball_vel= false;  player_radius= 0.3;  player_skin= 1;  kick_radius= 1.085;  ball_radius= 0.3;//0.085;  ball_skin= 1;  c_team_l= RGBcolor(255,255,0);  c_goalie_l= RGBcolor(0,255,0);  c_font_l= RGBcolor(255,0,0);//(255,0,0);  c_invalid_l= RGBcolor(0,0,0);  c_team_r= RGBcolor(0,255,255);  c_goalie_r= RGBcolor(255,153,255);  c_font_r= RGBcolor(0,0,139); //(0,255,0);//(255,0,0);  c_invalid_r= RGBcolor(0,0,0);  c_ball= RGBcolor(255,255,255);  c_field= RGBcolor(0,153,0);//(153,204,51); //(204,204,204);  c_marigin= RGBcolor(204,51,51);  c_line= RGBcolor(255,255,255);  c_goal= RGBcolor(0,0,0);  c_varea_exact= RGBcolor(0,180,0); // 0, 0xB4, 0  c_varea_fuzzy= RGBcolor(0,170,0); // 0, 0xAA, 0  info_level= info_level_def;  scale_level= scale_level_def;  mode= MODE_STANDARD;  //mode= MODE_SHOW_VIEW_AREA;  active_in_mode= id_invalid;  lt_show_spare_space_to_offside_line= false;  rt_show_spare_space_to_offside_line= false;}double SMonitorDevice::Options::scale_factor() const {  return scale_level_beg + scale_level * scale_level_inc;}bool SMonitorDevice::Options::set_scale_level_from_double(double s) {  for (int i=scale_level_max; i >= 0; i--)    if ( s >=  scale_level_beg + i * scale_level_inc - 0.0001) {      scale_level=  i;      return true;    }  scale_level= scale_level_min;  return true;}const char * SMonitorDevice::Options::get_mode_string() const {  if (mode == MODE_STANDARD)    return "mode std ";  if (mode == MODE_MOVE)    return "mode move";  if (mode == MODE_SHOW_VIEW_AREA)    return "mode view";  return "mode ????";}const char * SMonitorDevice::Options::get_mode_value_string() const {  if (mode == MODE_STANDARD)    return "std";  if (mode == MODE_MOVE)    return "move";  if (mode == MODE_SHOW_VIEW_AREA)    return "view";  return "????";}bool SMonitorDevice::Options::set_mode_from_string(const char * s) {  if ( strcmp("std",s) == 0)    mode= MODE_STANDARD;  else if ( strcmp("move",s) == 0)    mode= MODE_MOVE;  else if ( strcmp("view",s) == 0)    mode= MODE_SHOW_VIEW_AREA;  else    return false;  return true;}SMonitorDevice::ServerState::ServerState() {  reset();}void SMonitorDevice::ServerState::reset() {  //last_packet_ms_time= -1;  reconnected= true;  left_teamname.reset();  right_teamname.reset();  match_information.reset();}void SMonitorDevice::Positions::set_player(int i,const Point2d & p,const Angle & a) {  player[i].pos= p;  player[i].body_angle= a;}bool SMonitorDevice::Positions::max_x_pos(int p1, int p2, double & x1) const {  bool res= false;  for (int i=p1; i < p2; i++) {    const Player & p = player[i];    if ( ! p.alive)      continue;    if (!res) {      x1= p.pos.x;      res= true;    }    else if ( p.pos.x > x1)      x1= p.pos.x;  }  return res;}//copy of max_x_pos with > replaced by <bool SMonitorDevice::Positions::min_x_pos(int p1, int p2, double & x1) const {  bool res= false;  for (int i=p1; i < p2; i++) {    const Player & p = player[i];    if ( ! p.alive)      continue;    if (!res) {      x1= p.pos.x;      res= true;    }    else if ( p.pos.x < x1)      x1= p.pos.x;  }  return res;}bool SMonitorDevice::Positions::max_x_pos(int p1, int p2, double & x1, double & x2) const {  int res= 0;  for (int i=p1; i < p2; i++) {    const Player & p = player[i];    if (!p.alive)      continue;    if (res == 0) {      x1= p.pos.x;      res= 1;    }    else if (res == 1) {      res= 2;      if (p.pos.x > x1) {	x2= x1;	x1= p.pos.x;      }      else	x2= p.pos.x;    }    else if ( p.pos.x > x2) {      if ( p.pos.x > x1) {	x2= x1;	x1= p.pos.x;      }      else	x2= p.pos.x;    }  }  return (res==2);}//copy of max_x_pos with > replaced by <bool SMonitorDevice::Positions::min_x_pos(int p1, int p2, double & x1, double & x2) const {  int res= 0;  for (int i=p1; i < p2; i++) {    const Player & p = player[i];    if (!p.alive)      continue;    if (res == 0) {      x1= p.pos.x;      res= 1;    }    else if (res == 1) {      res= 2;      if (p.pos.x < x1) {	x2= x1;	x1= p.pos.x;      }      else	x2= p.pos.x;    }    else if ( p.pos.x < x2) {      if ( p.pos.x < x1) {	x2= x1;	x1= p.pos.x;      }      else	x2= p.pos.x;    }  }  return (res==2);}void SMonitorDevice::Positions::print_inline(std::ostream & out) {  int prec= 4;  out << std::setprecision(prec) << ball.pos.x      << " " << std::setprecision(prec) << ball.pos.y      << " " << std::setprecision(prec) << ball.vel.x      << " " << std::setprecision(prec) << ball.vel.y;  for (int i= 0; i < MAX_PLAYER*2; i++)    out << "    " << std::setprecision(prec) << player[i].pos.x	<< " " << std::setprecision(prec) << player[i].pos.y	<< " " << std::setprecision(prec) << player[i].body_angle.get_value()	<< " 0 0"; // the velocity is 0}void SMonitorDevice::Positions::print_formation(std::ostream & out, bool left_half, bool left_team) {  int start_idx= 0;  double dum= 0.0;  if (left_half) {    out << "\n[left half";    dum= 52.5;  }  else    out << "\n[right half";  if (left_team)    out << ", left team]";  else {    out << ", right team]";    start_idx= 11;  }  char buffer[200];  for (int i= 1+start_idx; i< MAX_PLAYER+start_idx; i++) {    float x= (player[i].pos.x + dum)/52.5;    if (x<0.0) x= 0.0;    if (x>1.0) x= 1.0;    float y= (player[i].pos.y + 34.0)/68.0;    if (y<0.0) y= 0.0;    if (y>1.0) y= 1.0;    sprintf(buffer,"\npos_%-2d = %.2f %.2f *",i-start_idx,x,y);    out << buffer;  }  out << std::flush;}/*****************************************************************************//*****************************************************************************/double x_SERVER_2_LP(double x) {  return x;}double y_SERVER_2_LP(double y) {  return -y;}double ang_SERVER_2_LP(double a) {  a= (a*PI)/180.0;  if (a < 0.0) return -a;  return -a+2*PI;}/*****************************************************************************//*****************************************************************************/SMonitorDevice::SMonitorDevice()    : timeover( false ){  server_state.reset();  //init_connection(); //vorlaeufig}void SMonitorDevice::generic_description_of_options(std::ostream & o, int mode) const {  print_option_entry(o,mode,"port",options.server_port,"defines the socket port for communication");  print_option_entry(o,mode,"host",options.server_host,"defines the host on which the soccer server is running");  print_option_entry(o,mode,"version",options.protocol_version,"version of monitor <-> server protocol");  print_option_entry(o,mode,"connect_on_start",options.connect_on_start,"if set then a connection to the server is established during the start");  print_option_entry(o,mode,"keepaway",options.keepaway,"if set then the field will be laid out for a keepaway match");  print_option_entry(o,mode,"keepaway_length",options.keepaway_length,"length of the keepaway region");  print_option_entry(o,mode,"keepaway_width",options.keepaway_width,"width of the keepaway region");  print_option_entry(o,mode,"list_player_types",options.list_player_types,"print all player types after a connection");  print_option_entry(o,mode,"show_ball_collisions",options.show_ball_collisions,"show if a player collides with the  ball");  print_option_entry(o,mode,"just_edit",options.just_edit,"don't connect to the soccer server");  print_option_entry(o,mode,"scale",options.scale_factor(),"factor all player's and the ball sizes are multiplied by");  print_option_entry(o,mode,"detail",options.info_level,"level of player information such as his number, stamina and type");  print_option_entry(o,mode,"mode",options.get_mode_value_string(),"initial mode to use");  print_option_entry(o,mode,"player_radius",options.player_radius,"default inner player radius (if server doesn't provide type info)");  print_option_entry(o,mode,"kick_radius",options.kick_radius,"default outer player radius (if server doesn't provide type info)");  print_option_entry(o,mode,"player_num_pos_x",options.player_num_pos.x,"x position of player number relative to player's center");  print_option_entry(o,mode,"player_num_pos_y",options.player_num_pos.y,"y position of player number relative to player's center");  print_option_entry(o,mode,"ball_radius",options.ball_radius,"define how large the inner circle of the ball should be");  o << "\n";  print_option_entry(o,mode,"c_team_l",options.c_team_l,"color of left team players");  print_option_entry(o,mode,"c_goalie_l",options.c_goalie_l,"color of left goalie");  print_option_entry(o,mode,"c_font_l",options.c_font_l,"color of left team number strings");  print_option_entry(o,mode,"c_team_r",options.c_team_r,"color of right team players");  print_option_entry(o,mode,"c_goalie_r",options.c_goalie_r,"color of right goalie");  print_option_entry(o,mode,"c_font_r",options.c_font_r,"color of right team number strings");  print_option_entry(o,mode,"c_ball",options.c_ball,"color of the ball");  print_option_entry(o,mode,"c_field",options.c_field,"color of the soccer field");  print_option_entry(o,mode,"c_line",options.c_line,"color of the soccer field lines");  print_option_entry(o,mode,"c_goal",options.c_goal,"color of the soccer field goals");  print_option_entry(o,mode,"c_varea_exact",options.c_varea_exact,"color of the exact view area");  print_option_entry(o,mode,"c_varea_fuzzy",options.c_varea_fuzzy,"color of the fuzzy view area");  o << "\n";}bool SMonitorDevice::process_options(const ValueParser & vp) {  double tmp_double;  int res;  vp.get("port", options.server_port);  vp.get("host", options.server_host,STRING_MAX_SIZE);#if USE_COACH  vp.get("coach_port", options.coach_port);#endif  vp.get("version", options.protocol_version);  vp.get("connect_on_start",options.connect_on_start);  vp.get("keepaway",options.keepaway);  vp.get("keepaway_length",options.keepaway_length);  vp.get("keepaway_width",options.keepaway_width);  vp.get("list_player_types",options.list_player_types);  vp.get("show_ball_collisions",options.show_ball_collisions);  vp.get("just_edit",options.just_edit);  res= vp.get("scale",tmp_double);  if ( res == 1 )    options.set_scale_level_from_double(tmp_double);  vp.get("detail", options.info_level);  if (options.info_level < options.info_level_min)    options.info_level= options.info_level_min;  else if (options.info_level > options.info_level_max)    options.info_level= options.info_level_max;  char tmp_str[MAX_NAME_LEN];  res= vp.get("mode",tmp_str,MAX_NAME_LEN);  if ( res > 0 ) {    std::cout << "\nsetting mode [" << tmp_str << "]";    options.set_mode_from_string(tmp_str);    std::cout << "\nnew mode: " << options.get_mode_string() << std::flush;  }  vp.get("player_radius",options.player_radius);  vp.get("player_skin",options.player_skin);  vp.get("kick_radius",options.kick_radius);  vp.get("player_num_pos_x",options.player_num_pos.x);  vp.get("player_num_pos_y",options.player_num_pos.y);  vp.get("ball_radius",options.ball_radius);  vp.get("ball_skin",options.ball_skin);  char rgb_str[20];  vp.get("c_team_l",rgb_str,20,'\0');   AsciiProcessor::get_col(rgb_str,options.c_team_l);  vp.get("c_goalie_l",rgb_str,20,'\0'); AsciiProcessor::get_col(rgb_str,options.c_goalie_l);  vp.get("c_font_l",rgb_str,20,'\0');   AsciiProcessor::get_col(rgb_str,options.c_font_l);  vp.get("c_team_r",rgb_str,20,'\0');   AsciiProcessor::get_col(rgb_str,options.c_team_r);  vp.get("c_goalie_r",rgb_str,20,'\0'); AsciiProcessor::get_col(rgb_str,options.c_goalie_r);  vp.get("c_font_r",rgb_str,20,'\0');   AsciiProcessor::get_col(rgb_str,options.c_font_r);  vp.get("c_ball",rgb_str,20,'\0');     AsciiProcessor::get_col(rgb_str,options.c_ball);  vp.get("c_field",rgb_str,20,'\0');    AsciiProcessor::get_col(rgb_str,options.c_field);  vp.get("c_marigin",rgb_str,20,'\0');  AsciiProcessor::get_col(rgb_str,options.c_marigin);  vp.get("c_line",rgb_str,20,'\0');     AsciiProcessor::get_col(rgb_str,options.c_line);  vp.get("c_goal",rgb_str,20,'\0');     AsciiProcessor::get_col(rgb_str,options.c_goal);  vp.get("c_varea_exact",rgb_str,20,'\0'); AsciiProcessor::get_col(rgb_str,options.c_varea_exact);  vp.get("c_varea_fuzzy",rgb_str,20,'\0'); AsciiProcessor::get_col(rgb_str,options.c_varea_fuzzy);  if ( vp.num_of_not_accessed_entries() ) {    ERROR_OUT << "\nSMonitorDevice: not recognized options:";    vp.show_not_accessed_entries(ERROR_STREAM);    return false;  }  return true;}

⌨️ 快捷键说明

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