📄 parsevisual.cpp
字号:
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 */
{
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 ParseVisualV7::OBJisMarker()
{
/* 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");
return;
}
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 Agent::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 Agent::motion info*/
/* else
SeeMarker(marker, dist, ang, distChng, dirChng, time); */
}
}
void ParseVisualV7::OBJisBall()
{
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);
}
void ParseVisualV7::OBJisLine()
{
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);
}
void ParseVisualV7::ParseFlagName(){
SightInfo += 2; /* it is a "flag " */
if ( *SightInfo=='r' )
{
SightInfo += 2;
if ( *SightInfo=='0' ) marker = Flag_R0;
else if ( *SightInfo=='b' )
{
SightInfo += 1;
if ( *SightInfo==')' ) marker = Flag_RB;
else
{
SightInfo += 1;
if ( *SightInfo=='1' ) marker = Flag_RB10;
else if ( *SightInfo=='2' ) marker = Flag_RB20;
else if ( *SightInfo=='3' ) marker = Flag_RB30;
else my_error("flag r b ?");
}
}
else if ( *SightInfo=='t' )
{
SightInfo+=1;
if ( *SightInfo==')' ) marker = Flag_RT;
else
{ SightInfo+=1;
if ( *SightInfo=='1' ) marker = Flag_RT10;
else if ( *SightInfo=='2' ) marker = Flag_RT20;
else if ( *SightInfo=='3' ) marker = Flag_RT30;
else my_error("flag r t ?");
}
}
else my_error("flag r ?");
}
else if ( *SightInfo=='l' )
{
SightInfo+=2;
if ( *SightInfo=='0' ) marker = Flag_L0;
else if ( *SightInfo=='b' )
{
SightInfo+=1;
if ( *SightInfo==')' ) marker = Flag_LB;
else
{
SightInfo+=1;
if ( *SightInfo=='1' ) marker = Flag_LB10;
else if ( *SightInfo=='2' ) marker = Flag_LB20;
else if ( *SightInfo=='3' ) marker = Flag_LB30;
else my_error("flag l b ?");
}
}
else if ( *SightInfo=='t' )
{
SightInfo+=1;
if ( *SightInfo==')' ) marker = Flag_LT;
else
{
SightInfo+=1;
if ( *SightInfo=='1' ) marker = Flag_LT10;
else if ( *SightInfo=='2' ) marker = Flag_LT20;
else if ( *SightInfo=='3' ) marker = Flag_LT30;
else my_error("flag l t ?");
}
}
else my_error("flag l ?");
}
else if ( *SightInfo=='t' )
{
SightInfo+=2;
if ( *SightInfo=='0' ) marker = Flag_T0;
else if ( *SightInfo=='l' )
{
SightInfo+=2;
if ( *SightInfo=='1' ) marker = Flag_TL10;
else if ( *SightInfo=='2' ) marker = Flag_TL20;
else if ( *SightInfo=='3' ) marker = Flag_TL30;
else if ( *SightInfo=='4' ) marker = Flag_TL40;
else if ( *SightInfo=='5' ) marker = Flag_TL50;
else my_error("flag t l ?");
}
else if ( *SightInfo=='r' )
{
SightInfo+=2;
if ( *SightInfo=='1' ) marker = Flag_TR10;
else if ( *SightInfo=='2' ) marker = Flag_TR20;
else if ( *SightInfo=='3' ) marker = Flag_TR30;
else if ( *SightInfo=='4' ) marker = Flag_TR40;
else if ( *SightInfo=='5' ) marker = Flag_TR50;
else my_error("flag t r ?");
}
else my_error("flag t ?");
}
else if ( *SightInfo=='b' )
{
SightInfo+=2;
if ( *SightInfo=='0' ) marker = Flag_B0;
else if ( *SightInfo=='l' )
{
SightInfo+=2;
if ( *SightInfo=='1' ) marker = Flag_BL10;
else if ( *SightInfo=='2' ) marker = Flag_BL20;
else if ( *SightInfo=='3' ) marker = Flag_BL30;
else if ( *SightInfo=='4' ) marker = Flag_BL40;
else if ( *SightInfo=='5' ) marker = Flag_BL50;
else my_error("flag b l ?");
}
else if ( *SightInfo=='r' )
{
SightInfo+=2;
if ( *SightInfo=='1' ) marker = Flag_BR10;
else if ( *SightInfo=='2' ) marker = Flag_BR20;
else if ( *SightInfo=='3' ) marker = Flag_BR30;
else if ( *SightInfo=='4' ) marker = Flag_BR40;
else if ( *SightInfo=='5' ) marker = Flag_BR50;
else my_error("flag b r ?");
}
else my_error("flag b ?");
}
else if ( *SightInfo=='c' )
{
SightInfo+=1;
if ( *SightInfo==')' ) marker = Flag_C;
else
{
SightInfo+=1;
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 ?");
}
/*******************Parse Visual Version 8.0*******************************/
void ParseVisualV8::ParseData()
{
#ifdef Version7_Compatible
if (ServerParam::version < 8.0) {
ParseVisualV7::ParseData();
return;
}
#endif
armdir = NOFACEINFO;
/************************************/
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 ( !CheckEnd() ) armdir=get_float(&SightInfo);
if ( !CheckEnd() ) {
distChng = armdir;
dirChng = get_float(&SightInfo);
}
if ( !CheckEnd() ) armdir=get_float(&SightInfo);
if ( !CheckEnd() ) {
if (object_type != OBJ_Player) my_error("Only players should have facedir");
facedir = armdir;
neckdir = get_float(&SightInfo);
}
if ( !CheckEnd() ) armdir=get_float(&SightInfo);
if ( *SightInfo != ')' ) my_error("Should be done with object info here");
SightInfo++;
}
void ParseVisualV8::SeePlayer(char player_side,float dist,AngleDeg ang, AngleDeg arm, bool tackling, Time time){
VisualUnkPlayer p;
p.set_polar(dist, ang, time);
p.set_other_info(arm, tackling);
if(player_side == situation.MySide){
My_Unk_Players.Data(time).Add(p);
}else{
Their_Unk_Players.Data(time).Add(p);
}
}
void ParseVisualV8::SeePlayer(char player_side,UNum NO, AngleDeg ang, AngleDeg arm, bool tackling, Time time,bool IsGoalie){
Player* p;
if(player_side == situation.MySide){
IdentifyMyGoalie(NO, IsGoalie);
p = &MyPlayer(NO);
}else{
IdentifyTheirGoalie(NO, IsGoalie);
p = &TheirPlayer(NO);
}
p->set_polar(ang,time);
p->set_arm_tackle(arm, tackling, time);
}
void ParseVisualV8::SeePlayer(char player_side,UNum NO,float dist, AngleDeg ang, AngleDeg arm, bool tackling, Time time, bool IsGoalie){
Player* p;
if(player_side == situation.MySide){
IdentifyMyGoalie(NO, IsGoalie);
p = &MyPlayer(NO);
}else{
IdentifyTheirGoalie(NO, IsGoalie);
p = &TheirPlayer(NO);
}
p->set_polar(ang, dist, time);
p->set_arm_tackle(arm, tackling, time);
}
void ParseVisualV8::SeePlayer(char player_side,UNum NO,float dist,AngleDeg ang,
float distChng, float dirChng, AngleDeg facedir, AngleDeg neckdir,
AngleDeg arm, bool tackling, Time time,bool IsGoalie){
Player* p;
if(player_side == situation.MySide){
IdentifyMyGoalie(NO, IsGoalie);
p = &MyPlayer(NO);
}else{
IdentifyTheirGoalie(NO, IsGoalie);
p = &TheirPlayer(NO);
}
p->set_polar(ang,dist,time);
p->set_chinfo(distChng,dirChng,time);
p->set_fcinfo(facedir, neckdir,time);
p->set_arm_tackle(arm, tackling, time);
}
void ParseVisualV8::SeePlayer(char player_side, AngleDeg ang,AngleDeg arm, bool tackling, Time time){
//距离不知时,暂时放弃
return;
}
void ParseVisualV8::OBJisPlayer()
{
#ifdef Version7_Compatible
if(ServerParam::version < 8.0f){
ParseVisualV7::OBJisPlayer();
return;
}
#endif
if ( !player_side ) /* Too far for team or num */
{
if ( view_qual == VQ_Low ) /* low quality */
VisualInfoProcess::SeePlayer(ang, time);
else if ( dirChng == NOCHNGINFO ) /* high quality */
VisualInfoProcess::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, armdir, tackling, time);
else if ( dirChng == NOCHNGINFO ) /* high quality */
SeePlayer(player_side, dist, ang, armdir, tackling, 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, armdir, tackling, time, IsGoalie);
else if ( dirChng == NOCHNGINFO )/* high quality */
{
my_error("Should know dirChng when know number");
SeePlayer(player_side, player_number, dist, ang, armdir, tackling, time, IsGoalie);
}
else /* know direction*/
SeePlayer(player_side, player_number, dist, ang, distChng, dirChng, facedir, neckdir, armdir, tackling, time, IsGoalie);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -