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

📄 sensory.cpp

📁 RoboCup仿真组世界冠军源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			    	if ( *SightInfo=='b' )     marker = Flag_CB;
		    		else if ( *SightInfo=='t' )     marker = Flag_CT;
		    		else my_error("flag c ?");
				}
			} 
    		else if ( *SightInfo=='p' )
			{
				SightInfo+=2;
    			if ( *SightInfo=='r' )
				{
					SightInfo+=2;
    				if ( *SightInfo=='t')      marker = Flag_PRT; 
	    			else if ( *SightInfo=='c')      marker = Flag_PRC; 
		    		else if ( *SightInfo=='b')      marker = Flag_PRB; 
			    	else my_error("flag p r ?");
				}
				else if ( *SightInfo=='l' ){

					SightInfo+=2;
			    	if ( *SightInfo=='t')      marker = Flag_PLT; 
			    	else if ( *SightInfo=='c')      marker = Flag_PLC; 
		     		else if ( *SightInfo=='b')      marker = Flag_PLB; 
			    	else my_error("flag p l ?");
				}
		    	else my_error("flag p ?");
			} 
    		else if ( *SightInfo=='g' ){

				SightInfo+=2;
    			if ( *SightInfo=='l' )
				{
					SightInfo+=2;
    				if ( *SightInfo=='t' )     marker = Flag_GLT;
	    			else if ( *SightInfo=='b' )     marker = Flag_GLB;
		    		else my_error("flag g l ?");
				} 
    			else if ( *SightInfo=='r' )
				{
					SightInfo+=2;
    				if ( *SightInfo=='t' )     marker = Flag_GRT;
	    			else if ( *SightInfo=='b' )     marker = Flag_GRB;		  
					else my_error("flag g r ?");
				} 
		    	else my_error("flag g ?");
			} 
     		 else my_error("flag ?");
		} 
		else if ( *SightInfo=='F' ){

			object_type = OBJ_Marker_Behind;
			marker = ClosestFlag(); // could be No_Marker
		}
		else if ( *SightInfo=='l' )
		{
			object_type = OBJ_Line;
			SightInfo+=2;          // "line "
			if ( *SightInfo=='r' ) line   = SL_Right;
			else if ( *SightInfo=='l' )line   = SL_Left;
			else if ( *SightInfo=='t' )line   = SL_Top;
			else if ( *SightInfo=='b' )line   = SL_Bottom;
			else my_error("line ?");	
		}
		else if ( *SightInfo=='p' || *SightInfo=='P' )
		{
			object_type = OBJ_Player;
			SightInfo += 1;            /* it is a "player" */
			if ( *SightInfo == ' ' ) /* there's a team */ 
			{
 				SightInfo += 2;
				if ( !strncmp(SightInfo,MyTeamName,MyTeamNameLen) && *(SightInfo+MyTeamNameLen) == '"'  )
					player_side = situation.MySide;
				else
				{
					if ( TheirTeamName[0] == '\n' )
					{	
						int a=0;
						while ( isalpha(*SightInfo) ) TheirTeamName[a++]=*SightInfo++;
					}
					player_side = situation.TheirSide;
				}
				while ( *SightInfo != ' ' && *SightInfo != ')' ) SightInfo++; /* advance past team name */
				if ( *SightInfo== ' ' )/* there's a number */
				{
					player_number = get_int(&SightInfo);
					if( *SightInfo== ' '){/*It's goalie*/
						get_word(&SightInfo);
						IsGoalie = true;
					}else{
						IsGoalie = false;
					}
				}
			}
		}
		else if ( *SightInfo=='b' || *SightInfo=='B' ) object_type = OBJ_Ball;
		else my_error("unknown object");
		advance_to(')',&SightInfo);              // advance to end of object
	   /************************************/
		ang = get_float(&SightInfo);
		if ( *SightInfo != ')' ) /* 'high' quality     */
		{	
			view_qual = VQ_High;
			dist = ang;
			ang = get_float(&SightInfo);
		}
		else /* 'low ' quality */
		{
			view_qual = VQ_Low;
		}
		if ( view_qual != ViewQuality ) my_error("View quality %d correct?",view_qual);
		if ( *SightInfo != ')' )
		{	
			distChng = get_float(&SightInfo);
			dirChng  = get_float(&SightInfo);
		}
		if ( *SightInfo != ')' )
		{
			if (object_type != OBJ_Player) my_error("Only players should have facedir");
			facedir = get_float(&SightInfo);
			neckdir = get_float(&SightInfo);
		}
		if ( *SightInfo != ')' ) my_error("Should be done with object info here");
		SightInfo++;                                /* ")" */
    /************************************/
		switch (object_type)
		{  
		case OBJ_Marker:
		case OBJ_Marker_Behind:
		  /* Want to save 2 closest for triangulation  */
		  /* don't want marker_behind unless necessary */
		  /* If it was a Marker_Behind and we don't know which one */
		if ( marker == No_Marker )
		{
			if ( object_type != OBJ_Marker_Behind ) my_error("Should know the marker");
				break;	
		}	
		processThisMarker = false;
		if ( view_qual == VQ_Low )
		{               /* low quality   */
				/* DON'T BOTHER PROCESSING ANY??? I don't think it helps ... */
				/* COULD process 2---then triangulate */
				/*if ( closestMarkerDist > 0 ){ */
				/*  closestMarkerDist = 0;  */                 /* Only process 1*/
				/*  processThisMarker = TRUE; */
				/*}*/
				}
		else	/* high quality  */
		{
			if ( closestMarker == No_Marker || dist < closestMarkerDist)
			{
				closestMarker = marker;
				closestMarkerDist = dist;	
				processThisMarker = true;
				ClosestMarker.Setdata(marker, time);
			}
		/* Don't bother with marker motion info --  it from sense_body and my angle 
		if ( dirChng != NOCHNGINFO && dist < motionInfoDist ){
		  motionInfoDist = dist;
		  processThisMarker = TRUE;
		  Mem->ClosestMotionMarker = marker;
		}
		*/
		}
		if ( processThisMarker )
		{
			if ( view_qual == VQ_Low )	SeeMarker(marker, ang, time);// low quality    
			else /* if (dirChng == NOCHNGINFO) */                  /* high quality  */
			
				SeeMarker(marker, dist, ang, time);   /* No motion info*/
		/* else
		  SeeMarker(marker, dist, ang, distChng, dirChng, time); */
		}
		break;
		case OBJ_Line:
			if ( *SightInfo != ')' )	;
		/* There's another line coming.  Assuming lines happen
		   last in the visual string and the closer line comes first */
			else if ( view_qual == VQ_Low )           /* low quality   */
				SeeLine(line, ang, time);
			else                                      /* high quality  */
				SeeLine(line, dist, ang, time);
			break;	
		case OBJ_Ball:	
			if ( view_qual == VQ_Low )                /* low quality   */
				SeeBall(ang, time);
			else if ( dirChng == NOCHNGINFO )                   /* high quality  */
				SeeBall(dist, ang, time);
			else                                      /* know direction*/
				SeeBall(dist, ang, distChng, dirChng, time);
			break;	
		case OBJ_Player:	
			if ( !player_side )    /* Too far for team or num */
			{
				if ( view_qual == VQ_Low )                /* low quality   */
					SeePlayer(ang, time);
				else if ( dirChng == NOCHNGINFO )                   /* high quality  */
					SeePlayer(dist, ang, time);
				else                              /* know direction*/
					my_error("Shouldn't know dirChng when the player's far");
			}  
			else
			{	
				if ( !player_number )  /* Too far for number     */
				{	
					if ( view_qual == VQ_Low )                /* low quality   */
						SeePlayer(player_side, ang, time);
					else if ( dirChng == NOCHNGINFO )                   /* high quality  */
						SeePlayer(player_side, dist, ang, time);
					else                         /* know direction*/
						my_error("Shouldn't know dirChng when the team member's far");
				}
				else	/* know side AND number   */
				{	
					if ( view_qual == VQ_Low )                /* low quality   */
						SeePlayer(player_side, player_number, ang, time, IsGoalie);
					else if ( dirChng == NOCHNGINFO )/* high quality  */
					{	
						printf("%s\n",SightInfo-30);
						my_error("Should know dirChng when know number");
						SeePlayer(player_side, player_number, dist, ang, time,IsGoalie);
					}
					else                            /* know direction*/
						SeePlayer(player_side, player_number, dist, ang, distChng, dirChng, facedir, neckdir, time,IsGoalie);	
				}
			}
		}
	}
}

void Sensory::Parse_Sound(Time time, char *SoundInfo)
{
	if ( SoundInfo[1] == 'r' ){   /* Referee or Coach message */
		SoundInfo += 9;             /* " referee " */
		if (strncmp(SoundInfo, "training", 8) == 0)
			Parse_Trainer_Sound(SoundInfo+8);
		else if (islower(SoundInfo[0]) )
			Parse_Referee_Sound(SoundInfo);
		else
			my_error("Referee sounds should start with lower case letters!");
		return;
	}
    else if ( SoundInfo[1] == 'o' ){  /* Online coach message */
		SoundInfo += 14;                /* online_coach_ */
		if ( SoundInfo[0] == situation.MySide ){
			advance_to(' ',&SoundInfo);   /* advance to end of side */
			SoundInfo++;
			Parse_My_Coach_Sound(time,SoundInfo);
		}
		else if ( SoundInfo[0] == situation.TheirSide ){
			advance_to(' ',&SoundInfo);   /* advance to end of side */
			SoundInfo++;
			Parse_Their_Coach_Sound(time,SoundInfo);
		}
		else 
			my_error("online_coach_?");
		return;
	}
	else if ( SoundInfo[1] == 's'){
		/* Self's message need not process */
	}
	else{
		/* Here you could do something with the heard message */
		motion.ProcessMsg(SoundInfo + 1);
	}
}

void Sensory::Parse_ServerParams(char *SensoryInfo){
	SP_goal_width = get_float(&SensoryInfo);
	SP_inertia_moment = get_float(&SensoryInfo);
	SP_player_size = get_float(&SensoryInfo);
	SP_player_decay = get_float(&SensoryInfo);
	SP_player_rand = get_float(&SensoryInfo);
	SP_player_weight = get_float(&SensoryInfo);
	SP_player_speed_max = get_float(&SensoryInfo);
	SP_paccel_max = get_float(&SensoryInfo);
	SP_stamina_max = get_float(&SensoryInfo);
	SP_stamina_inc = get_float(&SensoryInfo);
	SP_recover_init = get_float(&SensoryInfo);
	SP_recover_dec_thr = get_float(&SensoryInfo);
	SP_recover_min = get_float(&SensoryInfo);
	SP_recover_dec = get_float(&SensoryInfo);
	SP_effort_init = get_float(&SensoryInfo);
	SP_effort_dec_thr = get_float(&SensoryInfo);
	SP_effort_min = get_float(&SensoryInfo);
	SP_effort_dec = get_float(&SensoryInfo);
	SP_effort_inc_thr = get_float(&SensoryInfo);
	SP_effort_inc = get_float(&SensoryInfo);
	SP_kick_rand = get_float(&SensoryInfo);
	SP_team_actuator_noise = get_float(&SensoryInfo);
	SP_prand_factor_l = get_float(&SensoryInfo);
	SP_prand_factor_r = get_float(&SensoryInfo);
	SP_kick_rand_factor_l = get_float(&SensoryInfo);
	SP_kick_rand_factor_r = get_float(&SensoryInfo);
	SP_ball_size = get_float(&SensoryInfo);
	SP_ball_decay = get_float(&SensoryInfo);
	SP_ball_rand = get_float(&SensoryInfo);
	SP_ball_weight = get_float(&SensoryInfo);
	SP_ball_speed_max = get_float(&SensoryInfo);
	SP_baccel_max = get_float(&SensoryInfo);
	SP_dash_power_rate = get_float(&SensoryInfo);
	SP_kick_power_rate = get_float(&SensoryInfo);
	SP_kickable_margin = get_float(&SensoryInfo);
	SP_ctl_radius = get_float(&SensoryInfo); 
	SP_ctl_radius_width = get_float(&SensoryInfo);
	SP_max_power = get_float(&SensoryInfo);
	SP_min_power = get_float(&SensoryInfo);
	SP_max_moment = get_float(&SensoryInfo);
	SP_min_moment = get_float(&SensoryInfo);
	SP_max_neck_moment = get_float(&SensoryInfo);
	SP_min_neck_moment = get_float(&SensoryInfo);
	SP_max_neck_angle = get_float(&SensoryInfo);
	SP_min_neck_angle = get_float(&SensoryInfo);
	SP_visible_angle = get_float(&SensoryInfo);
	SP_feel_distance = get_float(&SensoryInfo);
	SP_wind_dir = get_float(&SensoryInfo);
	SP_wind_force = get_float(&SensoryInfo);
	SP_wind_ang = get_float(&SensoryInfo);
	SP_wind_rand  = get_float(&SensoryInfo);
	SP_kickable_area = get_float(&SensoryInfo);
	SP_catch_area_l = get_float(&SensoryInfo);
	SP_catch_area_w = get_float(&SensoryInfo);
	SP_catch_prob = get_float(&SensoryInfo);
	SP_goalie_max_moves = get_int(&SensoryInfo);
	SP_ckmargin = get_float(&SensoryInfo);
	SP_offside_area = get_float(&SensoryInfo);
	SP_win_no = get_float(&SensoryInfo);
	SP_win_random = get_float(&SensoryInfo);
	SP_say_coach_cnt_max = get_int(&SensoryInfo);
	SP_say_coach_msg_size = get_int(&SensoryInfo);
	SP_clang_win_size = get_int(&SensoryInfo);
	SP_clang_define_win = get_int(&SensoryInfo);
	SP_clang_meta_win = get_int(&SensoryInfo);
	SP_clang_advice_win = get_int(&SensoryInfo);
	SP_clang_info_win = get_int(&SensoryInfo);
	SP_clang_mess_delay = get_int(&SensoryInfo);
	SP_clang_mess_per_cycle = get_int(&SensoryInfo);
	SP_half_time = get_int(&SensoryInfo);
	SP_simulator_step = get_int(&SensoryInfo);
	SP_send_step = get_int(&SensoryInfo);
	SP_recv_step = get_int(&SensoryInfo);
	SP_sense_body_step = get_int(&SensoryInfo);
	SP_lcm_step = get_int(&SensoryInfo);
	SP_say_msg_size = get_int(&SensoryInfo);
	SP_hear_max = get_int(&SensoryInfo);
	SP_hear_inc = get_int(&SensoryInfo);
	SP_hear_decay = get_int(&SensoryInfo);

⌨️ 快捷键说明

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