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

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

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

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

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

示例1: UI_SwingAngles

/*==================UI_SwingAngles==================*/static void UI_SwingAngles( float destination, float swingTolerance, float clampTolerance,                            float speed, float *angle, qbool *swinging ) {    float	swing;    float	move;    float	scale;    if ( !*swinging ) {        // see if a swing should be started        swing = AngleSubtract( *angle, destination );        if ( swing > swingTolerance || swing < -swingTolerance ) {            *swinging = qtrue;        }    }    if ( !*swinging ) {        return;    }    // modify the speed depending on the delta    // so it doesn't seem so linear    swing = AngleSubtract( destination, *angle );    scale = fabs( swing );    if ( scale < swingTolerance * 0.5 ) {        scale = 0.5;    } else if ( scale < swingTolerance ) {        scale = 1.0;    } else {        scale = 2.0;    }    // swing towards the destination angle    if ( swing >= 0 ) {        move = uiInfo.uiDC.frameTime * scale * speed;        if ( move >= swing ) {            move = swing;            *swinging = qfalse;        }        *angle = AngleMod( *angle + move );    } else if ( swing < 0 ) {        move = uiInfo.uiDC.frameTime * scale * -speed;        if ( move <= swing ) {            move = swing;            *swinging = qfalse;        }        *angle = AngleMod( *angle + move );    }    // clamp to no more than tolerance    swing = AngleSubtract( destination, *angle );    if ( swing > clampTolerance ) {        *angle = AngleMod( destination - (clampTolerance - 1) );    } else if ( swing < -clampTolerance ) {        *angle = AngleMod( destination + (clampTolerance - 1) );    }}
开发者ID:LuckyBro,项目名称:sgfork,代码行数:60,


示例2: WalkerYawAdjust

void WalkerYawAdjust(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t *parentPS){	float angDif = AngleSubtract(pVeh->m_vOrientation[YAW], riderPS->viewangles[YAW]);	if (parentPS && parentPS->speed)	{		float s = parentPS->speed;		float maxDif = pVeh->m_pVehicleInfo->turningSpeed*1.5f; //magic number hackery		if (s < 0.0f)		{			s = -s;		}		angDif *= s/pVeh->m_pVehicleInfo->speedMax;		if (angDif > maxDif)		{			angDif = maxDif;		}		else if (angDif < -maxDif)		{			angDif = -maxDif;		}		pVeh->m_vOrientation[YAW] = AngleNormalize180(pVeh->m_vOrientation[YAW] - angDif*(pVeh->m_fTimeModifier*0.2f));	}}
开发者ID:PJayB,项目名称:jk3src,代码行数:25,


示例3: ProcessOrientCommands

void ProcessOrientCommands( Vehicle_t *pVeh ){	/********************************************************************************/	/*	BEGIN	Here is where make sure the vehicle is properly oriented.	BEGIN	*/	/********************************************************************************/	playerState_t *riderPS;	playerState_t *parentPS;	float angDif;	if (pVeh->m_pPilot)	{		riderPS = pVeh->m_pPilot->playerState;	}	else	{		riderPS = pVeh->m_pParentEntity->playerState;	}	parentPS = pVeh->m_pParentEntity->playerState;	//pVeh->m_vOrientation[YAW] = 0.0f;//riderPS->viewangles[YAW];	angDif = AngleSubtract(pVeh->m_vOrientation[YAW], riderPS->viewangles[YAW]);	if (parentPS && parentPS->speed)	{		float s = parentPS->speed;		float maxDif = pVeh->m_pVehicleInfo->turningSpeed*4.0f; //magic number hackery		if (s < 0.0f)		{			s = -s;		}		angDif *= s/pVeh->m_pVehicleInfo->speedMax;		if (angDif > maxDif)		{			angDif = maxDif;		}		else if (angDif < -maxDif)		{			angDif = -maxDif;		}		pVeh->m_vOrientation[YAW] = AngleNormalize180(pVeh->m_vOrientation[YAW] - angDif*(pVeh->m_fTimeModifier*0.2f));		if (parentPS->electrifyTime > pm->cmd.serverTime)		{ //do some crazy stuff			pVeh->m_vOrientation[YAW] += (sin(pm->cmd.serverTime/1000.0f)*3.0f)*pVeh->m_fTimeModifier;		}	}	/********************************************************************************/	/*	END	Here is where make sure the vehicle is properly oriented.	END			*/	/********************************************************************************/}
开发者ID:CaptainSkyhawk,项目名称:OpenJK-VR,代码行数:51,


示例4: WalkerYawAdjust

void WalkerYawAdjust(Vehicle_t *pVeh, playerState_t *riderPS, playerState_t *parentPS){	float angDif = AngleSubtract(pVeh->m_vOrientation[YAW], riderPS->viewangles[YAW]);	//ROP VEHICLE_IMP START	if (!pVeh->bTransAnimFlag && parentPS && 		(parentPS->speed || pVeh->m_pVehicleInfo->turnWhenStopped))	{		float s = parentPS->speed;		float maxDif = pVeh->m_pVehicleInfo->turningSpeed*1.5f; //magic number hackery		pVeh->eTurningOnSpot = VEHICLE_NOT_TURNING;		if(s == 0.0f)		{			//If were stationary, then simulate walking speed			s = pVeh->m_pVehicleInfo->speedMax * 0.275f;		}		if (s < 0.0f)		{			s = -s;		}		angDif *= s/pVeh->m_pVehicleInfo->speedMax;		if (angDif > maxDif)		{			angDif = maxDif;		}		else if (angDif < -maxDif)		{			angDif = -maxDif;		}		if(parentPS->speed == 0.0f)		{			if(angDif > (maxDif * 0.25))			{				//We are turning right				pVeh->eTurningOnSpot = VEHICLE_TURNING_RIGHT;			}			else if(angDif < -(maxDif * 0.25))			{				//We are turning left				pVeh->eTurningOnSpot = VEHICLE_TURNING_LEFT;			}		}		pVeh->m_vOrientation[YAW] = AngleNormalize180(pVeh->m_vOrientation[YAW] - angDif*(pVeh->m_fTimeModifier*0.2f));	}	//ROP VEHICLE_IMP END}
开发者ID:ForcePush,项目名称:OJPRPFZ,代码行数:51,


示例5: BG_EmplacedView

/*=================BG_EmplacedViewShared code for emplaced angle gun constriction=================*/int BG_EmplacedView(vec3_t baseAngles, vec3_t angles, float *newYaw, float constraint){	float dif = AngleSubtract(baseAngles[YAW], angles[YAW]);	if (dif > constraint ||		dif < -constraint)	{		float amt;		if (dif > constraint)		{			amt = (dif-constraint);			dif = constraint;		}		else if (dif < -constraint)		{			amt = (dif+constraint);			dif = -constraint;		}		else		{			amt = 0.0f;		}		*newYaw = AngleSubtract(angles[YAW], -dif);		if (amt > 1.0f || amt < -1.0f)		{ //significant, force the view			return 2;		}		else		{ //just a little out of range			return 1;		}	}	return 0;}
开发者ID:BSzili,项目名称:OpenJK,代码行数:45,


示例6: CG_DrawCompassIcon

/*=================CG_DrawCompassIcon=================*/void CG_DrawCompassIcon(float x, float y, float w, float h, vec3_t origin, vec3_t dest, qhandle_t shader){	float  angle, pi2 = M_PI * 2;	vec3_t v1, angles;	float  len;	VectorCopy(dest, v1);	VectorSubtract(origin, v1, v1);	len = VectorLength(v1);	VectorNormalize(v1);	vectoangles(v1, angles);	if (v1[0] == 0 && v1[1] == 0 && v1[2] == 0)	{		return;	}	angles[YAW] = AngleSubtract(cg.predictedPlayerState.viewangles[YAW], angles[YAW]);	angle = ((angles[YAW] + 180.f) / 360.f - (0.50 / 2.f)) * pi2;	w /= 2;	h /= 2;	x += w;	y += h;	{		w = sqrt((w * w) + (h * h)) / 3.f * 2.f * 0.9f;	}	x = x + (cos(angle) * w);	y = y + (sin(angle) * w);	len = 1 - MIN(1.f, len / 2000.f);	CG_DrawPic(x - (14 * len + 4) / 2, y - (14 * len + 4) / 2, 14 * len + 8, 14 * len + 8, shader);}
开发者ID:sxweet,项目名称:etlegacy,代码行数:43,


示例7: ProcessOrientCommands

void ProcessOrientCommands( Vehicle_t *pVeh ){	/********************************************************************************/	/*	BEGIN	Here is where make sure the vehicle is properly oriented.	BEGIN	*/	/********************************************************************************/	playerState_t *riderPS;	playerState_t *parentPS;#ifdef _JK2MP	float angDif;	if (pVeh->m_pPilot)	{		riderPS = pVeh->m_pPilot->playerState;	}	else	{		riderPS = pVeh->m_pParentEntity->playerState;	}	parentPS = pVeh->m_pParentEntity->playerState;	//pVeh->m_vOrientation[YAW] = 0.0f;//riderPS->viewangles[YAW];	angDif = AngleSubtract(pVeh->m_vOrientation[YAW], riderPS->viewangles[YAW]);	if (parentPS && parentPS->speed)	{		float s = parentPS->speed;		float maxDif = pVeh->m_pVehicleInfo->turningSpeed*4.0f; //magic number hackery		if (s < 0.0f)		{			s = -s;		}		angDif *= s/pVeh->m_pVehicleInfo->speedMax;		if (angDif > maxDif)		{			angDif = maxDif;		}		else if (angDif < -maxDif)		{			angDif = -maxDif;		}		pVeh->m_vOrientation[YAW] = AngleNormalize180(pVeh->m_vOrientation[YAW] - angDif*(pVeh->m_fTimeModifier*0.2f));		if (parentPS->electrifyTime > pm->cmd.serverTime)		{ //do some crazy stuff			pVeh->m_vOrientation[YAW] += (sin(pm->cmd.serverTime/1000.0f)*3.0f)*pVeh->m_fTimeModifier;		}	}#else 	gentity_t *rider = pVeh->m_pParentEntity->owner;	if ( !rider || !rider->client )	{		riderPS = &pVeh->m_pParentEntity->client->ps;	}	else	{		riderPS = &rider->client->ps;	}	parentPS = &pVeh->m_pParentEntity->client->ps;	if (pVeh->m_ulFlags & VEH_FLYING)	{		pVeh->m_vOrientation[YAW] += pVeh->m_vAngularVelocity;	}	else if (		(pVeh->m_ulFlags & VEH_SLIDEBREAKING) ||	// No Angles Control While Out Of Control 		(pVeh->m_ulFlags & VEH_OUTOFCONTROL) 		// No Angles Control While Out Of Control 		)	{		// Any ability to change orientation?	}	else if (		(pVeh->m_ulFlags & VEH_STRAFERAM)			// No Angles Control While Strafe Ramming		)	{		if (parentPS->hackingTime>0)		{			parentPS->hackingTime--;			pVeh->m_vOrientation[ROLL] += (parentPS->hackingTime<( STRAFERAM_DURATION/2))?(-STRAFERAM_ANGLE):( STRAFERAM_ANGLE);		}		else if (pVeh->hackingTime<0)		{			parentPS->hackingTime++;			pVeh->m_vOrientation[ROLL] += (parentPS->hackingTime>(-STRAFERAM_DURATION/2))?( STRAFERAM_ANGLE):(-STRAFERAM_ANGLE);		}	}	else	{		pVeh->m_vOrientation[YAW] = riderPS->viewangles[YAW];	}#endif	/********************************************************************************/	/*	END	Here is where make sure the vehicle is properly oriented.	END			*/	/********************************************************************************/}
开发者ID:dmead,项目名称:jkaq3,代码行数:96,


示例8: CL_FinishMove

void CL_FinishMove( usercmd_t *cmd ) {	int		i;	// copy the state that the cgame is currently sending	cmd->weapon = cl.cgameUserCmdValue;	cmd->forcesel = cl.cgameForceSelection;	cmd->invensel = cl.cgameInvenSelection;	if (cl.gcmdSendValue)	{		cmd->generic_cmd = cl.gcmdValue;		//cl.gcmdSendValue = qfalse;		cl.gcmdSentValue = qtrue;	}	else	{		cmd->generic_cmd = 0;	}	// send the current server time so the amount of movement	// can be determined without allowing cheating	cmd->serverTime = cl.serverTime;		if (cl.cgameViewAngleForceTime > cl.serverTime)	{		cl.cgameViewAngleForce[YAW] -= SHORT2ANGLE(cl.snap.ps.delta_angles[YAW]);		cl.viewangles[YAW] = cl.cgameViewAngleForce[YAW];		cl.cgameViewAngleForceTime = 0;	}	if ( cl_crazyShipControls )	{		float pitchSubtract, pitchDelta, yawDelta;		yawDelta = AngleSubtract(cl.viewangles[YAW],cl_lastViewAngles[YAW]);		//yawDelta *= (4.0f*pVeh->m_fTimeModifier);		cl_sendAngles[ROLL] -= yawDelta;		float nRoll = fabs(cl_sendAngles[ROLL]);		pitchDelta = AngleSubtract(cl.viewangles[PITCH],cl_lastViewAngles[PITCH]);		//pitchDelta *= (2.0f*pVeh->m_fTimeModifier);		pitchSubtract = pitchDelta * (nRoll/90.0f);		cl_sendAngles[PITCH] += pitchDelta-pitchSubtract;		//yaw-roll calc should be different		if (nRoll > 90.0f)		{			nRoll -= 180.0f;		}		if (nRoll < 0.0f)		{			nRoll = -nRoll;		}		pitchSubtract = pitchDelta * (nRoll/90.0f);		if ( cl_sendAngles[ROLL] > 0.0f )		{			cl_sendAngles[YAW] += pitchSubtract;		}		else		{			cl_sendAngles[YAW] -= pitchSubtract;		}				cl_sendAngles[PITCH] = AngleNormalize180( cl_sendAngles[PITCH] );		cl_sendAngles[YAW] = AngleNormalize360( cl_sendAngles[YAW] );		cl_sendAngles[ROLL] = AngleNormalize180( cl_sendAngles[ROLL] );		for (i=0 ; i<3 ; i++) {			cmd->angles[i] = ANGLE2SHORT(cl_sendAngles[i]);		}	}	else	{		for (i=0 ; i<3 ; i++) {			cmd->angles[i] = ANGLE2SHORT(cl.viewangles[i]);		}		//in case we switch to the cl_crazyShipControls		VectorCopy( cl.viewangles, cl_sendAngles );	}	//always needed in for the cl_crazyShipControls	VectorCopy( cl.viewangles, cl_lastViewAngles );}
开发者ID:Almightygir,项目名称:OpenJK,代码行数:84,


示例9: PM_UpdateViewAngles

//.........这里部分代码省略.........		{			//FIXME get this limit from the NPCs stats?			// don't let the player look up or down more than 90 degrees			if ( temp > pitchClampMax ) 			{				ps->delta_angles[i] = (pitchClampMax - cmd->angles[i]) & 0xffff;	//& clamp to short				temp = pitchClampMax;			} 			else if ( temp < pitchClampMin ) 			{				ps->delta_angles[i] = (pitchClampMin - cmd->angles[i]) & 0xffff;	//& clamp to short				temp = pitchClampMin;			}		}		if ( i == ROLL && ps->vehicleModel != 0 ) 		{			if ( temp > pitchClampMax ) 			{				ps->delta_angles[i] = (pitchClampMax - cmd->angles[i]) & 0xffff;				temp = pitchClampMax;			} 			else if ( temp < pitchClampMin ) 			{				ps->delta_angles[i] = (pitchClampMin - cmd->angles[i]) & 0xffff;				temp = pitchClampMin;			}		}		//FIXME: Are we losing precision here?  Is this why it jitters?		ps->viewangles[i] = SHORT2ANGLE(temp);		if ( i == YAW && lockedYaw) 		{			// don't let the player look left or right more than the clamp, if any			if ( AngleSubtract(ps->viewangles[i], gent->client->renderInfo.lockYaw) > yawMax ) 			{				ps->viewangles[i] = yawMax;			} 			else if ( AngleSubtract(ps->viewangles[i], gent->client->renderInfo.lockYaw) < yawMin ) 			{				ps->viewangles[i] = yawMin;			}		}	}	if ( (!cg.renderingThirdPerson||cg.zoomMode) && (cmd->buttons & BUTTON_USE) && cmd->rightmove != 0 && !cmd->forwardmove && cmd->upmove <= 0 )	{//Only lean if holding use button, strafing and not moving forward or back and not jumping		if ( gent )		{			int leanofs = 0;			vec3_t	viewangles;			if ( cmd->rightmove > 0 )			{				/*				if( pm->ps->legsAnim != LEGS_LEAN_RIGHT1)				{					PM_SetAnim(pm, SETANIM_LEGS, LEGS_LEAN_RIGHT1, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD);				}				pm->ps->legsAnimTimer = 500;//Force it to hold the anim for at least half a sec				*/				if ( ps->leanofs <= 28 )				{					leanofs = ps->leanofs + 4;				}				else
开发者ID:Ced2911,项目名称:massive-tyrion,代码行数:67,


示例10: ProcessOrientCommands

//MP RULE - ALL PROCESSORIENTCOMMANDS FUNCTIONS MUST BE BG-COMPATIBLE!!!//If you really need to violate this rule for SP, then use ifdefs.//By BG-compatible, I mean no use of game-specific data - ONLY use//stuff available in the MP bgEntity (in SP, the bgEntity is #defined//as a gentity, but the MP-compatible access restrictions are based//on the bgEntity structure in the MP codebase) -rww// ProcessOrientCommands the Vehicle.static void ProcessOrientCommands( Vehicle_t *pVeh ){	/********************************************************************************/	/*	BEGIN	Here is where make sure the vehicle is properly oriented.	BEGIN	*/	/********************************************************************************/	bgEntity_t *parent = pVeh->m_pParentEntity;	playerState_t *parentPS, *riderPS;	bgEntity_t *rider = NULL;	if (parent->s.owner != ENTITYNUM_NONE)	{		rider = PM_BGEntForNum(parent->s.owner); //&g_entities[parent->r.ownerNum];	}	if ( !rider )	{		rider = parent;	}	parentPS = parent->playerState;	if (rider)	{		float angDif;		riderPS = rider->playerState;		angDif = AngleSubtract(pVeh->m_vOrientation[YAW], riderPS->viewangles[YAW]);		if (parentPS && parentPS->speed)		{			float s = parentPS->speed;			float maxDif = pVeh->m_pVehicleInfo->turningSpeed*4.0f; //magic number hackery			if (s < 0.0f)			{				s = -s;			}			angDif *= s/pVeh->m_pVehicleInfo->speedMax;			if (angDif > maxDif)			{				angDif = maxDif;			}			else if (angDif < -maxDif)			{				angDif = -maxDif;			}			pVeh->m_vOrientation[YAW] = AngleNormalize180(pVeh->m_vOrientation[YAW] - angDif*(pVeh->m_fTimeModifier*0.2f));		}	}/*	speed = VectorLength( parentPS->velocity );	// If the player is the rider...	if ( rider->s.number < MAX_CLIENTS )	{//FIXME: use the vehicle's turning stat in this calc		pVeh->m_vOrientation[YAW] = riderPS->viewangles[YAW];	}	else	{		float turnSpeed = pVeh->m_pVehicleInfo->turningSpeed;		if ( !pVeh->m_pVehicleInfo->turnWhenStopped			&& !parentPS->speed )//FIXME: or !pVeh->m_ucmd.forwardmove?		{//can't turn when not moving			//FIXME: or ramp up to max turnSpeed?			turnSpeed = 0.0f;		}		if (rider->s.eType == ET_NPC)		{//help NPCs out some			turnSpeed *= 2.0f;			if (parentPS->speed > 200.0f)			{				turnSpeed += turnSpeed * parentPS->speed/200.0f*0.05f;			}		}		turnSpeed *= pVeh->m_fTimeModifier;		//default control scheme: strafing turns, mouselook aims		if ( pVeh->m_ucmd.rightmove < 0 )		{			pVeh->m_vOrientation[YAW] += turnSpeed;		}		else if ( pVeh->m_ucmd.rightmove > 0 )		{			pVeh->m_vOrientation[YAW] -= turnSpeed;		}		if ( pVeh->m_pVehicleInfo->malfunctionArmorLevel && pVeh->m_iArmor <= pVeh->m_pVehicleInfo->malfunctionArmorLevel )		{//damaged badly		}	}*/	/********************************************************************************/	/*	END	Here is where make sure the vehicle is properly oriented.	END			*///.........这里部分代码省略.........
开发者ID:AlexXT,项目名称:OpenJK,代码行数:101,


示例11: turret_aim

//-----------------------------------------------------static void turret_aim( gentity_t *self )//-----------------------------------------------------{	vec3_t	enemyDir, org, org2;	vec3_t	desiredAngles, setAngle;	float	diffYaw = 0.0f, diffPitch = 0.0f, turnSpeed;	const float pitchCap = 40.0f;	gentity_t *top = &g_entities[self->r.ownerNum];	if ( !top )	{		return;	}	// move our gun base yaw to where we should be at this time....	BG_EvaluateTrajectory( &top->s.apos, level.time, top->r.currentAngles );	top->r.currentAngles[YAW] = AngleNormalize180( top->r.currentAngles[YAW] );	top->r.currentAngles[PITCH] = AngleNormalize180( top->r.currentAngles[PITCH] );	turnSpeed = top->speed;	if ( self->painDebounceTime > level.time )	{		desiredAngles[YAW] = top->r.currentAngles[YAW]+flrand(-45,45);		desiredAngles[PITCH] = top->r.currentAngles[PITCH]+flrand(-10,10);		if (desiredAngles[PITCH] < -pitchCap)		{			desiredAngles[PITCH] = -pitchCap;		}		else if (desiredAngles[PITCH] > pitchCap)		{			desiredAngles[PITCH] = pitchCap;		}		diffYaw = AngleSubtract( desiredAngles[YAW], top->r.currentAngles[YAW] );		diffPitch = AngleSubtract( desiredAngles[PITCH], top->r.currentAngles[PITCH] );		turnSpeed = flrand( -5, 5 );	}	else if ( self->enemy )	{		// ...then we'll calculate what new aim adjustments we should attempt to make this frame		// Aim at enemy		VectorCopy( self->enemy->r.currentOrigin, org );		org[2]+=self->enemy->r.maxs[2]*0.5f;		if (self->enemy->s.eType == ET_NPC &&			self->enemy->s.NPC_class == CLASS_VEHICLE &&			self->enemy->m_pVehicle &&			self->enemy->m_pVehicle->m_pVehicleInfo->type == VH_WALKER)		{ //hack!			org[2] += 32.0f;		}		/*		mdxaBone_t	boltMatrix;		// Getting the "eye" here		gi.G2API_GetBoltMatrix( self->ghoul2, self->playerModel, 					self->torsoBolt,					&boltMatrix, self->r.currentAngles, self->s.origin, (cg.time?cg.time:level.time),					NULL, self->s.modelScale );		gi.G2API_GiveMeVectorFromMatrix( boltMatrix, ORIGIN, org2 );		*/		VectorCopy( top->r.currentOrigin, org2 );		VectorSubtract( org, org2, enemyDir );		vectoangles( enemyDir, desiredAngles );		desiredAngles[PITCH] = AngleNormalize180(desiredAngles[PITCH]);		if (desiredAngles[PITCH] < -pitchCap)		{			desiredAngles[PITCH] = -pitchCap;		}		else if (desiredAngles[PITCH] > pitchCap)		{			desiredAngles[PITCH] = pitchCap;		}		diffYaw = AngleSubtract( desiredAngles[YAW], top->r.currentAngles[YAW] );		diffPitch = AngleSubtract( desiredAngles[PITCH], top->r.currentAngles[PITCH] );	}	else	{//FIXME: Pan back and forth in original facing		// no enemy, so make us slowly sweep back and forth as if searching for a new one		desiredAngles[YAW] = sin( level.time * 0.0001f + top->count );		desiredAngles[YAW] *=  60.0f;		desiredAngles[YAW] += self->s.angles[YAW];		desiredAngles[YAW] = AngleNormalize180( desiredAngles[YAW] );		diffYaw = AngleSubtract( desiredAngles[YAW], top->r.currentAngles[YAW] );		diffPitch = AngleSubtract( 0, top->r.currentAngles[PITCH] );		turnSpeed = 1.0f;	}	if ( diffYaw )	{		// cap max speed....		if ( fabs(diffYaw) > turnSpeed )		{			diffYaw = ( diffYaw >= 0 ? turnSpeed : -turnSpeed );		}	}//.........这里部分代码省略.........
开发者ID:jwginge,项目名称:ojpa,代码行数:101,


示例12: turretG2_aim

//-----------------------------------------------------static void turretG2_aim( gentity_t *self )//-----------------------------------------------------{    vec3_t	enemyDir, org, org2;    vec3_t	desiredAngles, setAngle;    float	diffYaw = 0.0f, diffPitch = 0.0f;    float	maxYawSpeed = (self->spawnflags&SPF_TURRETG2_TURBO)?30.0f:14.0f;    float	maxPitchSpeed = (self->spawnflags&SPF_TURRETG2_TURBO)?15.0f:3.0f;    // move our gun base yaw to where we should be at this time....    BG_EvaluateTrajectory( &self->s.apos, level.time, self->r.currentAngles );    self->r.currentAngles[YAW] = AngleNormalize360( self->r.currentAngles[YAW] );    self->speed = AngleNormalize360( self->speed );    if ( self->enemy )    {        mdxaBone_t	boltMatrix;        // ...then we'll calculate what new aim adjustments we should attempt to make this frame        // Aim at enemy        if ( self->enemy->client )        {            VectorCopy( self->enemy->client->renderInfo.eyePoint, org );        }        else        {            VectorCopy( self->enemy->r.currentOrigin, org );        }        if ( self->spawnflags & 2 )        {            org[2] -= 15;        }        else        {            org[2] -= 5;        }        if ( (self->spawnflags&SPF_TURRETG2_LEAD_ENEMY) )        {   //we want to lead them a bit            vec3_t diff, velocity;            float dist;            VectorSubtract( org, self->s.origin, diff );            dist = VectorNormalize( diff );            if ( self->enemy->client )            {                VectorCopy( self->enemy->client->ps.velocity, velocity );            }            else            {                VectorCopy( self->enemy->s.pos.trDelta, velocity );            }            VectorMA( org, (dist/self->mass), velocity, org );        }        // Getting the "eye" here        trap_G2API_GetBoltMatrix( self->ghoul2,                                  0,                                  (self->alt_fire?self->genericValue12:self->genericValue11),                                  &boltMatrix,                                  self->r.currentAngles,                                  self->s.origin,                                  level.time,                                  NULL,                                  self->modelScale );        BG_GiveMeVectorFromMatrix( &boltMatrix, ORIGIN, org2 );        VectorSubtract( org, org2, enemyDir );        vectoangles( enemyDir, desiredAngles );        diffYaw = AngleSubtract( self->r.currentAngles[YAW], desiredAngles[YAW] );        diffPitch = AngleSubtract( self->speed, desiredAngles[PITCH] );    }    else    {        // no enemy, so make us slowly sweep back and forth as if searching for a new one//		diffYaw = sin( level.time * 0.0001f + self->count ) * 5.0f;	// don't do this for now since it can make it go into walls.    }    if ( diffYaw )    {        // cap max speed....        if ( fabs(diffYaw) > maxYawSpeed )        {            diffYaw = ( diffYaw >= 0 ? maxYawSpeed : -maxYawSpeed );        }        // ...then set up our desired yaw        VectorSet( setAngle, 0.0f, diffYaw, 0.0f );        VectorCopy( self->r.currentAngles, self->s.apos.trBase );        VectorScale( setAngle,- 5, self->s.apos.trDelta );        self->s.apos.trTime = level.time;        self->s.apos.trType = TR_LINEAR;    }    if ( diffPitch )    {        if ( fabs(diffPitch) > maxPitchSpeed )        {//.........这里部分代码省略.........
开发者ID:Atlas-zz,项目名称:SDK-JKA-ACADEMIE-HCF,代码行数:101,


示例13: AnglesSubtract

void AnglesSubtract( vector3 *v1, vector3 *v2, vector3 *v3 ) {	v3->x = AngleSubtract( v1->x, v2->x );	v3->y = AngleSubtract( v1->y, v2->y );	v3->z = AngleSubtract( v1->z, v2->z );}
开发者ID:Arcadiaprime,项目名称:japp,代码行数:5,


示例14: Reached_Tramcar

void Reached_Tramcar( gentity_t *ent ) {	gentity_t       *next;	float speed;	vec3_t move;	float length;	// copy the apropriate values	next = ent->nextTrain;	if ( !next || !next->nextTrain ) {		return;     // just stop	}	// Rafael	if ( next->wait == -1 && next->count ) {		// G_Printf ("stoped wait = -1 count %i/n",next->count);		return;	}	if ( !Q_stricmp( ent->classname, "props_me109" ) ) {		vec3_t vec, angles;		float diff;		if ( next->spawnflags & 8 ) { // laps			next->count--;			if ( !next->count ) {				next->count = next->count2;				GetNextTrack( ent );				Think_SetupAirplaneWaypoints( ent );				next = ent->nextTrain;				G_Printf( "changed track to %s/n", next->targetname );			} else {				G_Printf( "%s lap %i/n", next->targetname, next->count );			}		} else if ( ( next->spawnflags & 1 ) && !( next->count ) && ent->health > 0 )         { // SCRIPT flag			GetNextTrack( ent );			Think_SetupAirplaneWaypoints( ent );		} else if ( ( next->spawnflags & 2 ) && ( ent->spawnflags & 8 ) && ent->health <= 0 && ent->takedamage )         { // death path			ent->takedamage = qfalse;			GetNextTrack( ent );			Think_SetupAirplaneWaypoints( ent );		} else if ( ( next->spawnflags & 4 ) )       { // explode the plane			ExplodePlaneSndFx( ent );			ent->s.modelindex = crash_part;			// spawn the wing at the player effect			ent->nextTrain = NULL;			G_UseTargets( next, NULL );			return;		}		VectorSubtract( ent->nextTrain->nextTrain->s.origin, ent->r.currentOrigin, vec );		vectoangles( vec, angles );		diff = AngleSubtract( ent->r.currentAngles [YAW], angles[YAW] );		// diff = AngleSubtract (ent->TargetAngles [YAW], angles[YAW]);		ent->rotate[1] = 1;		ent->angle = -diff;		//if (angles[YAW] == 0)		//	ent->s.apos.trDuration = ent->s.pos.trDuration;		//else		//	ent->s.apos.trDuration = 1000;		{			VectorCopy( next->s.origin, ent->pos1 );			VectorCopy( next->nextTrain->s.origin, ent->pos2 );			// if the path_corner has a speed, use that			if ( next->speed ) {				speed = next->speed;			} else {				// otherwise use the train's speed				speed = ent->speed;			}			if ( speed < 1 ) {				speed = 1;			}			// calculate duration			VectorSubtract( ent->pos2, ent->pos1, move );			length = VectorLength( move );			ent->s.apos.trDuration = length * 1000 / speed;//testing// ent->gDuration = ent->s.apos.trDuration;			ent->gDurationBack = ent->gDuration = ent->s.apos.trDuration;// ent->gDeltaBack = ent->gDelta =		}//.........这里部分代码省略.........
开发者ID:MAN-AT-ARMS,项目名称:iortcw-archive,代码行数:101,


示例15: AnglesSubtract

void AnglesSubtract(vec3_t v1, vec3_t v2, vec3_t v3) {	v3[0] = AngleSubtract(v1[0], v2[0]);	v3[1] = AngleSubtract(v1[1], v2[1]);	v3[2] = AngleSubtract(v1[2], v2[2]);}
开发者ID:Jordi1990,项目名称:Sof2MPSDK,代码行数:5,


示例16: CG_DrawNewCompass

/*=================CG_DrawNewCompass=================*/static void CG_DrawNewCompass(rectDef_t location){	float        basex = location.x, basey = location.y - 16, basew = location.w, baseh = location.h;	snapshot_t   *snap;	float        angle;	int          i;	static float lastangle  = 0;	static float anglespeed = 0;	float        diff;	if (cg.nextSnap && !cg.nextFrameTeleport && !cg.thisFrameTeleport)	{		snap = cg.nextSnap;	}	else	{		snap = cg.snap;	}	if (snap->ps.pm_flags & PMF_LIMBO /*|| snap->ps.persistant[PERS_TEAM] == TEAM_SPECTATOR*/#if FEATURE_MULTIVIEW	    || cg.mvTotalClients > 0#endif	    )	{		CG_DrawExpandedAutoMap();		return;	}	diff = basew * 0.25f;	if (cgs.autoMapExpanded)	{		if (cg.time - cgs.autoMapExpandTime < 100.f)		{			CG_CompasMoveLocation(&basex, &basey, qtrue);		}		else		{			CG_DrawExpandedAutoMap();			return;		}	}	else	{		if (cg.time - cgs.autoMapExpandTime <= 150.f)		{			CG_DrawExpandedAutoMap();			return;		}		else if ((cg.time - cgs.autoMapExpandTime > 150.f) && (cg.time - cgs.autoMapExpandTime < 250.f))		{			CG_CompasMoveLocation(&basex, &basey, qfalse);		}	}	if (snap->ps.persistant[PERS_TEAM] == TEAM_SPECTATOR)	{		return;	}	CG_DrawAutoMap(basex + (diff / 2), basey + (diff / 2), basew - diff, baseh - diff);	CG_DrawPic(basex + 4, basey + 4, basew - 8, baseh - 8, cgs.media.compassShader);	angle       = (cg.predictedPlayerState.viewangles[YAW] + 180.f) / 360.f - (0.125f);	diff        = AngleSubtract(angle * 360, lastangle * 360) / 360.f;	anglespeed /= 1.08f;	anglespeed += diff * 0.01f;	if (Q_fabs(anglespeed) < 0.00001f)	{		anglespeed = 0;	}	lastangle += anglespeed;	CG_DrawRotatedPic(basex + 4, basey + 4, basew - 8, baseh - 8, cgs.media.compass2Shader, lastangle);	//if( !(cgs.ccFilter & CC_FILTER_REQUESTS) ) {	// draw voice chats	{		centity_t *cent;		for (i = 0; i < MAX_CLIENTS; i++)		{			cent = &cg_entities[i];			if (cg.predictedPlayerState.clientNum == i || !cgs.clientinfo[i].infoValid || cg.predictedPlayerState.persistant[PERS_TEAM] != cgs.clientinfo[i].team)			{				continue;			}			// also draw revive icons if cent is dead and player is a medic			if (cent->voiceChatSpriteTime < cg.time)			{				continue;			}//.........这里部分代码省略.........
开发者ID:sxweet,项目名称:etlegacy,代码行数:101,



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


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