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

📄 parsevisual.cpp

📁 2002年
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			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 + -