📄 sensory.cpp
字号:
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 + -