您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ AngleDelta函数代码示例

51自学网 2021-06-01 19:46:53
  C++
这篇教程C++ AngleDelta函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中AngleDelta函数的典型用法代码示例。如果您正苦于以下问题:C++ AngleDelta函数的具体用法?C++ AngleDelta怎么用?C++ AngleDelta使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了AngleDelta函数的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: R2D2_TurnAnims

/*-------------------------R2D2_TurnAnims-------------------------*/void R2D2_TurnAnims ( void ){	float turndelta;	int		anim;	turndelta = AngleDelta(NPC->r.currentAngles[YAW], NPCInfo->desiredYaw);	if ((fabs(turndelta) > 20) && ((NPC->client->NPC_class == CLASS_R2D2) || (NPC->client->NPC_class == CLASS_R5D2)))	{		anim = NPC->client->ps.legsAnim;		if (turndelta<0)		{			if (anim != BOTH_TURN_LEFT1)			{				NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_TURN_LEFT1, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD );			}		}		else		{			if (anim != BOTH_TURN_RIGHT1)			{				NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_TURN_RIGHT1, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD );			}		}	}	else	{			NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_RUN1, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD );	}}
开发者ID:DarthFutuza,项目名称:JediKnightGalaxies,代码行数:36,


示例2: InFOV

qboolean InFOV( vec3_t spot, vec3_t from, vec3_t fromAngles, int hFOV, int vFOV ){	vec3_t	deltaVector, angles, deltaAngles;	VectorSubtract ( spot, from, deltaVector );	vectoangles ( deltaVector, angles );	deltaAngles[PITCH]	= AngleDelta ( fromAngles[PITCH], angles[PITCH] );	deltaAngles[YAW]	= AngleDelta ( fromAngles[YAW], angles[YAW] );	if ( fabs ( deltaAngles[PITCH] ) <= vFOV && fabs ( deltaAngles[YAW] ) <= hFOV )	{		return qtrue;	}	return qfalse;}
开发者ID:AlexXT,项目名称:OpenJK,代码行数:17,


示例3: InFOV

qboolean InFOV ( gentity_t *ent, gentity_t *from, int hFOV, int vFOV ) {	vec3_t	eyes;	vec3_t	spot;	vec3_t	deltaVector;	vec3_t	angles, fromAngles;	vec3_t	deltaAngles;	if( from->client )	{		if( !VectorCompare( from->client->renderInfo.eyeAngles, vec3_origin ) )		{//Actual facing of tag_head!			//NOTE: Stasis aliens may have a problem with this?			VectorCopy( from->client->renderInfo.eyeAngles, fromAngles );		}		else		{			VectorCopy( from->client->ps.viewangles, fromAngles );		}	}	else	{		VectorCopy(from->s.angles, fromAngles);	}	CalcEntitySpot( from, SPOT_HEAD_LEAN, eyes );	CalcEntitySpot( ent, SPOT_ORIGIN, spot );	VectorSubtract ( spot, eyes, deltaVector);	vectoangles ( deltaVector, angles );	deltaAngles[PITCH] = AngleDelta ( fromAngles[PITCH], angles[PITCH] );	deltaAngles[YAW] = AngleDelta ( fromAngles[YAW], angles[YAW] );	if ( fabs ( deltaAngles[PITCH] ) <= vFOV && fabs ( deltaAngles[YAW] ) <= hFOV ) 	{		return qtrue;	}	CalcEntitySpot( ent, SPOT_HEAD, spot );	VectorSubtract ( spot, eyes, deltaVector);	vectoangles ( deltaVector, angles );	deltaAngles[PITCH] = AngleDelta ( fromAngles[PITCH], angles[PITCH] );	deltaAngles[YAW] = AngleDelta ( fromAngles[YAW], angles[YAW] );	if ( fabs ( deltaAngles[PITCH] ) <= vFOV && fabs ( deltaAngles[YAW] ) <= hFOV ) 	{		return qtrue;	}	CalcEntitySpot( ent, SPOT_LEGS, spot );	VectorSubtract ( spot, eyes, deltaVector);	vectoangles ( deltaVector, angles );	deltaAngles[PITCH] = AngleDelta ( fromAngles[PITCH], angles[PITCH] );	deltaAngles[YAW] = AngleDelta ( fromAngles[YAW], angles[YAW] );	if ( fabs ( deltaAngles[PITCH] ) <= vFOV && fabs ( deltaAngles[YAW] ) <= hFOV ) 	{		return qtrue;	}	return qfalse;}
开发者ID:Stoiss,项目名称:JediKnightGalaxies,代码行数:60,


示例4: NPC_GetVFOVPercentage

float NPC_GetVFOVPercentage( vec3_t spot, vec3_t from, vec3_t facing, float vFOV ){	vec3_t	deltaVector, angles;	float	delta;	VectorSubtract ( spot, from, deltaVector );	vectoangles ( deltaVector, angles );	delta = fabs( AngleDelta ( facing[PITCH], angles[PITCH] ) );	if ( delta > vFOV )		return 0.0f;	return ( ( vFOV - delta ) / vFOV );}
开发者ID:AlexXT,项目名称:OpenJK,代码行数:16,


示例5: NPC_GetHFOVPercentage

float NPC_GetHFOVPercentage( vec3_t spot, vec3_t from, vec3_t facing, float hFOV ){	vec3_t	deltaVector, angles;	float	delta;	VectorSubtract ( spot, from, deltaVector );	vectoangles ( deltaVector, angles );	delta = fabs( AngleDelta ( facing[YAW], angles[YAW] ) );	if ( delta > hFOV )		return 0.0f;	return ( ( hFOV - delta ) / hFOV );}
开发者ID:AlexXT,项目名称:OpenJK,代码行数:16,


示例6: CGCam_Roll

void CGCam_Roll( float	dest, float duration ){	if ( !duration )	{		CGCam_SetRoll( dest );		return;	}	//FIXME/NOTE: this will override current panning!!!	client_camera.info_state |= CAMERA_PANNING;		VectorCopy( client_camera.angles, client_camera.angles2 );	client_camera.angles2[2] = AngleDelta( dest, client_camera.angles[2] );		client_camera.pan_duration = duration;	client_camera.pan_time = cg.time;}
开发者ID:Aura15,项目名称:OpenJK,代码行数:17,


示例7: NPC_BSJump

void NPC_BSJump (void){	vec3_t		dir, angles, p1, p2, apex;	float		time, height, forward, z, xy, dist, yawError, apexHeight;	if( !NPCInfo->goalEntity )	{//Should have task completed the navgoal		return;	}	if ( NPCInfo->jumpState != JS_JUMPING && NPCInfo->jumpState != JS_LANDING )	{		//Face navgoal		VectorSubtract(NPCInfo->goalEntity->currentOrigin, NPC->currentOrigin, dir);		vectoangles(dir, angles);		NPCInfo->desiredPitch = NPCInfo->lockedDesiredPitch = AngleNormalize360(angles[PITCH]);		NPCInfo->desiredYaw = NPCInfo->lockedDesiredYaw = AngleNormalize360(angles[YAW]);	}	NPC_UpdateAngles ( qtrue, qtrue );	yawError = AngleDelta ( NPC->client->ps.viewangles[YAW], NPCInfo->desiredYaw );	//We don't really care about pitch here	switch ( NPCInfo->jumpState )	{	case JS_FACING:		if ( yawError < MIN_ANGLE_ERROR )		{//Facing it, Start crouching			NPC_SetAnim(NPC, SETANIM_LEGS, BOTH_CROUCH1, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD);			NPCInfo->jumpState = JS_CROUCHING;		}		break;	case JS_CROUCHING:		if ( NPC->client->ps.legsAnimTimer > 0 )		{//Still playing crouching anim			return;		}		//Create a parabola		if ( NPC->currentOrigin[2] > NPCInfo->goalEntity->currentOrigin[2] )		{			VectorCopy( NPC->currentOrigin, p1 );			VectorCopy( NPCInfo->goalEntity->currentOrigin, p2 );		}		else if ( NPC->currentOrigin[2] < NPCInfo->goalEntity->currentOrigin[2] )		{			VectorCopy( NPCInfo->goalEntity->currentOrigin, p1 );			VectorCopy( NPC->currentOrigin, p2 );		}		else		{			VectorCopy( NPC->currentOrigin, p1 );			VectorCopy( NPCInfo->goalEntity->currentOrigin, p2 );		}		//z = xy*xy		VectorSubtract( p2, p1, dir );		dir[2] = 0;		//Get xy and z diffs		xy = VectorNormalize( dir );		z = p1[2] - p2[2];		apexHeight = APEX_HEIGHT/2;		/*		//Determine most desirable apex height		apexHeight = (APEX_HEIGHT * PARA_WIDTH/xy) + (APEX_HEIGHT * z/128);		if ( apexHeight < APEX_HEIGHT * 0.5 )		{			apexHeight = APEX_HEIGHT*0.5;		}		else if ( apexHeight > APEX_HEIGHT * 2 )		{			apexHeight = APEX_HEIGHT*2;		}		*/		//FIXME: length of xy will change curve of parabola, need to account for this		//somewhere... PARA_WIDTH				z = (sqrt(apexHeight + z) - sqrt(apexHeight));		assert(z >= 0);//		gi.Printf("apex is %4.2f percent from p1: ", (xy-z)*0.5/xy*100.0f);		xy -= z;		xy *= 0.5;				assert(xy > 0);		VectorMA( p1, xy, dir, apex );		apex[2] += apexHeight;			VectorCopy(apex, NPC->pos1);				//Now we have the apex, aim for it		height = apex[2] - NPC->currentOrigin[2];		time = sqrt( height / ( .5 * NPC->client->ps.gravity ) );//.........这里部分代码省略.........
开发者ID:Chedo,项目名称:OpenJK,代码行数:101,


示例8: NPC_UpdateShootAngles

void NPC_UpdateShootAngles (vec3_t angles, qboolean doPitch, qboolean doYaw ) {//FIXME: shoot angles either not set right or not used!	float		error;	float		decay;	float		targetPitch = 0;	float		targetYaw = 0;	if(doPitch)		targetPitch = angles[PITCH];	if(doYaw)		targetYaw = angles[YAW];	if(doYaw)	{		// decay yaw error		error = AngleDelta ( NPCInfo->shootAngles[YAW], targetYaw );		if ( error ) 		{			decay = 60.0 + 80.0 * NPCInfo->stats.aim;			decay *= 100.0f / 1000.0f;//msec			if ( error < 0.0 ) 			{				error += decay;				if ( error > 0.0 ) 				{					error = 0.0;				}			}			else 			{				error -= decay;				if ( error < 0.0 ) 				{					error = 0.0;				}			}		}		NPCInfo->shootAngles[YAW] = targetYaw + error;	}	if(doPitch)	{		// decay pitch error		error = AngleDelta ( NPCInfo->shootAngles[PITCH], targetPitch );		if ( error ) 		{			decay = 60.0 + 80.0 * NPCInfo->stats.aim;			decay *= 100.0f / 1000.0f;//msec			if ( error < 0.0 ) 			{				error += decay;				if ( error > 0.0 ) 				{					error = 0.0;				}			}			else 			{				error -= decay;				if ( error < 0.0 ) 				{					error = 0.0;				}			}		}		NPCInfo->shootAngles[PITCH] = targetPitch + error;	}}
开发者ID:Agustinlv,项目名称:BlueHarvest,代码行数:69,


示例9: NPC_UpdateFiringAngles

/*qboolean NPC_UpdateFiringAngles ( qboolean doPitch, qboolean doYaw )   Includes aim when determining angles - so they don't always hit...  */qboolean NPC_UpdateFiringAngles ( qboolean doPitch, qboolean doYaw ) {#if 0	float		diff;	float		error;	float		targetPitch = 0;	float		targetYaw = 0;	qboolean	exact = qtrue;	if ( level.time < NPCInfo->aimTime ) 	{		if( doPitch )			targetPitch = NPCInfo->lockedDesiredPitch;		if( doYaw )			targetYaw = NPCInfo->lockedDesiredYaw;	}	else 	{		if( doPitch )		{			targetPitch = NPCInfo->desiredPitch;			NPCInfo->lockedDesiredPitch = NPCInfo->desiredPitch;		}		if( doYaw )		{			targetYaw = NPCInfo->desiredYaw;			NPCInfo->lockedDesiredYaw = NPCInfo->desiredYaw;		}				}	if( doYaw )	{		// add yaw error based on NPCInfo->aim value		error = ((float)(6 - NPCInfo->stats.aim)) * Q_flrand(-1, 1);		if(Q_irand(0, 1))			error *= -1;		diff = AngleDelta ( NPC->client->ps.viewangles[YAW], targetYaw );		if ( diff )			exact = qfalse;				ucmd.angles[YAW] = ANGLE2SHORT( targetYaw + diff + error ) - client->ps.delta_angles[YAW];	}	if( doPitch )	{		// add pitch error based on NPCInfo->aim value		error = ((float)(6 - NPCInfo->stats.aim)) * Q_flrand(-1, 1);		diff = AngleDelta ( NPC->client->ps.viewangles[PITCH], targetPitch );		if ( diff )			exact = qfalse;				ucmd.angles[PITCH] = ANGLE2SHORT( targetPitch + diff + error ) - client->ps.delta_angles[PITCH];	}	ucmd.angles[ROLL] = ANGLE2SHORT ( NPC->client->ps.viewangles[ROLL] ) - client->ps.delta_angles[ROLL];	return exact;	#else	float		error, diff;	float		decay;	float		targetPitch = 0;	float		targetYaw = 0;	qboolean	exact = qtrue;	// if angle changes are locked; just keep the current angles	if ( level.time < NPCInfo->aimTime ) 	{		if(doPitch)			targetPitch = NPCInfo->lockedDesiredPitch;		if(doYaw)			targetYaw = NPCInfo->lockedDesiredYaw;	}	else 	{		if(doPitch)			targetPitch = NPCInfo->desiredPitch;		if(doYaw)			targetYaw = NPCInfo->desiredYaw;//		NPCInfo->aimTime = level.time + 250;		if(doPitch)			NPCInfo->lockedDesiredPitch = NPCInfo->desiredPitch;		if(doYaw)			NPCInfo->lockedDesiredYaw = NPCInfo->desiredYaw;//.........这里部分代码省略.........
开发者ID:Agustinlv,项目名称:BlueHarvest,代码行数:101,


示例10: NPC_UpdateAngles

qboolean NPC_UpdateAngles ( qboolean doPitch, qboolean doYaw ) {#if 1	float		error;	float		decay;	float		targetPitch = 0;	float		targetYaw = 0;	float		yawSpeed;	qboolean	exact = qtrue;	// if angle changes are locked; just keep the current angles	// aimTime isn't even set anymore... so this code was never reached, but I need a way to lock NPC's yaw, so instead of making a new SCF_ flag, just use the existing render flag... - dmv	if ( !NPC->enemy && ( (level.time < NPCInfo->aimTime) || NPC->client->renderInfo.renderFlags & RF_LOCKEDANGLE) ) 	{		if(doPitch)			targetPitch = NPCInfo->lockedDesiredPitch;		if(doYaw)			targetYaw = NPCInfo->lockedDesiredYaw;	}	else 	{		// we're changing the lockedDesired Pitch/Yaw below so it's lost it's original meaning, get rid of the lock flag		NPC->client->renderInfo.renderFlags &= ~RF_LOCKEDANGLE;		if(doPitch)		{			targetPitch = NPCInfo->desiredPitch;			NPCInfo->lockedDesiredPitch = NPCInfo->desiredPitch;		}		if(doYaw)		{			targetYaw = NPCInfo->desiredYaw;			NPCInfo->lockedDesiredYaw = NPCInfo->desiredYaw;		}				}	if ( NPC->s.weapon == WP_EMPLACED_GUN )	{		// FIXME: this seems to do nothing, actually...		yawSpeed = 20;	}	else	{		yawSpeed = NPCInfo->stats.yawSpeed;	}	if ( NPC->s.weapon == WP_SABER && NPC->client->ps.forcePowersActive&(1<<FP_SPEED) )	{		yawSpeed *= 1.0f/g_timescale->value;	}		if( doYaw )	{		// decay yaw error		error = AngleDelta ( NPC->client->ps.viewangles[YAW], targetYaw );		if( fabs(error) > MIN_ANGLE_ERROR )		{			if ( error ) 			{				exact = qfalse;				decay = 60.0 + yawSpeed * 3;				decay *= 50.0f / 1000.0f;//msec				if ( error < 0.0 ) 				{					error += decay;					if ( error > 0.0 ) 					{						error = 0.0;					}				}				else 				{					error -= decay;					if ( error < 0.0 ) 					{						error = 0.0;					}				}			}		}				ucmd.angles[YAW] = ANGLE2SHORT( targetYaw + error ) - client->ps.delta_angles[YAW];	}	//FIXME: have a pitchSpeed?	if( doPitch )	{		// decay pitch error		error = AngleDelta ( NPC->client->ps.viewangles[PITCH], targetPitch );		if ( fabs(error) > MIN_ANGLE_ERROR )		{			if ( error ) 			{				exact = qfalse;//.........这里部分代码省略.........
开发者ID:Agustinlv,项目名称:BlueHarvest,代码行数:101,


示例11: InFOVFromPlayerView

//Entity to entityqboolean InFOVFromPlayerView ( gentity_t *ent, int hFOV, int vFOV ){	vec3_t	eyes;	vec3_t	spot;	vec3_t	deltaVector;	vec3_t	angles, fromAngles;	vec3_t	deltaAngles;	if ( !player || !player->client )	{		return qfalse;	}	if ( cg.time )	{		VectorCopy( cg.refdefViewAngles, fromAngles );	}	else	{		VectorCopy( player->client->ps.viewangles, fromAngles );	}	if( cg.time )	{		VectorCopy( cg.refdef.vieworg, eyes );	}	else	{		CalcEntitySpot( player, SPOT_HEAD_LEAN, eyes );	}	CalcEntitySpot( ent, SPOT_ORIGIN, spot );	VectorSubtract ( spot, eyes, deltaVector);	vectoangles ( deltaVector, angles );	deltaAngles[PITCH] = AngleDelta ( fromAngles[PITCH], angles[PITCH] );	deltaAngles[YAW] = AngleDelta ( fromAngles[YAW], angles[YAW] );	if ( fabs ( deltaAngles[PITCH] ) <= vFOV && fabs ( deltaAngles[YAW] ) <= hFOV )	{		return qtrue;	}	CalcEntitySpot( ent, SPOT_HEAD, spot );	VectorSubtract ( spot, eyes, deltaVector);	vectoangles ( deltaVector, angles );	deltaAngles[PITCH] = AngleDelta ( fromAngles[PITCH], angles[PITCH] );	deltaAngles[YAW] = AngleDelta ( fromAngles[YAW], angles[YAW] );	if ( fabs ( deltaAngles[PITCH] ) <= vFOV && fabs ( deltaAngles[YAW] ) <= hFOV )	{		return qtrue;	}	CalcEntitySpot( ent, SPOT_LEGS, spot );	VectorSubtract ( spot, eyes, deltaVector);	vectoangles ( deltaVector, angles );	deltaAngles[PITCH] = AngleDelta ( fromAngles[PITCH], angles[PITCH] );	deltaAngles[YAW] = AngleDelta ( fromAngles[YAW], angles[YAW] );	if ( fabs ( deltaAngles[PITCH] ) <= vFOV && fabs ( deltaAngles[YAW] ) <= hFOV )	{		return qtrue;	}	return qfalse;}
开发者ID:AlexXT,项目名称:OpenJK,代码行数:64,


示例12: NPC_BSPointShoot

void NPC_BSPointShoot (qboolean shoot){//FIXME: doesn't check for clear shot...	vec3_t	muzzle, dir, angles, org;	//spot_t	spot_enemy = SPOT_CHEST;	if ( !NPC->enemy || !NPC->enemy->inuse || (NPC->enemy->NPC && NPC->enemy->health <= 0) )	{//FIXME: should still keep shooting for a second or two after they actually die...		trap_ICARUS_TaskIDComplete( NPC, TID_BSTATE );		goto finished;		return;	}	CalcEntitySpot(NPC, SPOT_WEAPON, muzzle);	CalcEntitySpot(NPC->enemy, SPOT_HEAD, org);//Was spot_org	//Head is a little high, so let's aim for the chest:	//if ( NPC->enemy->client )	//{	//	org[2] -= 12;//NOTE: is this enough?	//}	VectorSubtract(org, muzzle, dir);	vectoangles(dir, angles);	switch( NPC->client->ps.weapon )	{	case WP_NONE://	case WP_TRICORDER:	case WP_STUN_BATON:	case WP_SABER:		//don't do any pitch change if not holding a firing weapon		break;	default:		NPCInfo->desiredPitch = NPCInfo->lockedDesiredPitch = AngleNormalize360(angles[PITCH]);		break;	}	NPCInfo->desiredYaw = NPCInfo->lockedDesiredYaw = AngleNormalize360(angles[YAW]);	if ( NPC_UpdateAngles ( qtrue, qtrue ) )	{//FIXME: if angles clamped, this may never work!		//NPCInfo->shotTime = NPC->attackDebounceTime = 0;		if ( shoot )		{//FIXME: needs to hold this down if using a weapon that requires it, like phaser...			//ucmd.buttons |= BUTTON_ATTACK;			WeaponThink( qtrue );		}				//if ( !shoot || !(NPC->svFlags & SVF_LOCKEDENEMY) )		if (1)		{//If locked_enemy is on, dont complete until it is destroyed...			trap_ICARUS_TaskIDComplete( NPC, TID_BSTATE );			goto finished;		}	}	//else if ( shoot && (NPC->svFlags & SVF_LOCKEDENEMY) )	if (0)	{//shooting them till their dead, not aiming right at them yet...		/*		qboolean movingTarget = qfalse;		if ( NPC->enemy->client )		{			if ( VectorLengthSquared( NPC->enemy->client->ps.velocity ) )			{				movingTarget = qtrue;			}		}		else if ( VectorLengthSquared( NPC->enemy->s.pos.trDelta ) )		{			movingTarget = qtrue;		}		if (movingTarget )		*/		{			float	dist = VectorLength( dir );			float	yawMiss, yawMissAllow = NPC->enemy->r.maxs[0];			float	pitchMiss, pitchMissAllow = (NPC->enemy->r.maxs[2] - NPC->enemy->r.mins[2])/2;						if ( yawMissAllow < 8.0f )			{				yawMissAllow = 8.0f;			}			if ( pitchMissAllow < 8.0f )			{				pitchMissAllow = 8.0f;			}			yawMiss = tan(DEG2RAD(AngleDelta ( NPC->client->ps.viewangles[YAW], NPCInfo->desiredYaw ))) * dist;			pitchMiss = tan(DEG2RAD(AngleDelta ( NPC->client->ps.viewangles[PITCH], NPCInfo->desiredPitch))) * dist;			if ( yawMissAllow >= yawMiss && pitchMissAllow > pitchMiss )			{				ucmd.buttons |= BUTTON_ATTACK;			}		}	}	//.........这里部分代码省略.........
开发者ID:erfg12,项目名称:clanmod-jka,代码行数:101,


示例13: NPC_UpdateAngles

/*qboolean NPC_UpdateAngles ( qboolean doPitch, qboolean doYaw ) Added: option to do just pitch or just yawDoes not include "aim" in it's calculationsFIXME: stop compressing angles into shorts!!!!*/qboolean NPC_UpdateAngles ( qboolean doPitch, qboolean doYaw ) {#if 1	float		error;	float		decay;	float		targetPitch = 0;	float		targetYaw = 0;	float		yawSpeed;	qboolean	exact = qtrue;	// if angle changes are locked; just keep the current angles	// aimTime isn't even set anymore... so this code was never reached, but I need a way to lock NPC's yaw, so instead of making a new SCF_ flag, just use the existing render flag... - dmv	if ( !NPC->enemy && ( (level.time < NPCInfo->aimTime) /*|| NPC->client->renderInfo.renderFlags & RF_LOCKEDANGLE*/) ) 	{		if(doPitch)			targetPitch = NPCInfo->lockedDesiredPitch;		if(doYaw)			targetYaw = NPCInfo->lockedDesiredYaw;	}	else 	{		// we're changing the lockedDesired Pitch/Yaw below so it's lost it's original meaning, get rid of the lock flag	//	NPC->client->renderInfo.renderFlags &= ~RF_LOCKEDANGLE;		if(doPitch)		{			targetPitch = NPCInfo->desiredPitch;			NPCInfo->lockedDesiredPitch = NPCInfo->desiredPitch;		}		if(doYaw)		{			targetYaw = NPCInfo->desiredYaw;			NPCInfo->lockedDesiredYaw = NPCInfo->desiredYaw;		}				}	if ( NPC->s.weapon == WP_EMPLACED_GUN )	{		// FIXME: this seems to do nothing, actually...		yawSpeed = 20;	}	else	{		yawSpeed = NPCInfo->stats.yawSpeed;	}	if ( NPC->s.weapon == WP_SABER && NPC->client->ps.fd.forcePowersActive&(1<<FP_SPEED) )	{		char buf[128];		float tFVal = 0;		trap_Cvar_VariableStringBuffer("timescale", buf, sizeof(buf));		tFVal = atof(buf);		yawSpeed *= 1.0f/tFVal;	}		if( doYaw )	{		// decay yaw error		error = AngleDelta ( NPC->client->ps.viewangles[YAW], targetYaw );		if( fabs(error) > MIN_ANGLE_ERROR )		{			if ( error ) 			{				exact = qfalse;				decay = 60.0 + yawSpeed * 3;				decay *= 50.0f / 1000.0f;//msec				if ( error < 0.0 ) 				{					error += decay;					if ( error > 0.0 ) 					{						error = 0.0;					}				}				else 				{					error -= decay;					if ( error < 0.0 ) 					{						error = 0.0;					}				}			}//.........这里部分代码省略.........
开发者ID:NoahBennet,项目名称:base_enhanced,代码行数:101,



注:本文中的AngleDelta函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ AngleMatrix函数代码示例
C++ Angle函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。