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

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

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

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

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

示例1: Seeker_Attack

//------------------------------------void Seeker_Attack( void ){	float		distance;	qboolean	visible, advance;	// Always keep a good height off the ground	Seeker_MaintainHeight();	// Rate our distance to the target, and our visibilty	distance	= DistanceHorizontalSquared( NPCS.NPC->r.currentOrigin, NPCS.NPC->enemy->r.currentOrigin );	visible		= NPC_ClearLOS4( NPCS.NPC->enemy );	advance		= (qboolean)(distance > MIN_DISTANCE_SQR);	if ( NPCS.NPC->client->NPC_class == CLASS_BOBAFETT )	{		advance = (qboolean)(distance>(200.0f*200.0f));	}	// If we cannot see our target, move to see it	if ( visible == qfalse )	{		if ( NPCS.NPCInfo->scriptFlags & SCF_CHASE_ENEMIES )		{			Seeker_Hunt( visible, advance );			return;		}	}	Seeker_Ranged( visible, advance );}
开发者ID:Avygeil,项目名称:NewJK,代码行数:31,


示例2: Sentry_AttackDecision

/*-------------------------Sentry_AttackDecision-------------------------*/void Sentry_AttackDecision( void ){	float		distance;		qboolean	visible;	qboolean	advance;	// Always keep a good height off the ground	Sentry_MaintainHeight();	NPC->s.loopSound = G_SoundIndex( "sound/chars/sentry/misc/sentry_hover_2_lp" );	//randomly talk	if ( TIMER_Done(NPC,"patrolNoise") )	{		if (TIMER_Done(NPC,"angerNoise"))		{			G_SoundOnEnt( NPC, CHAN_AUTO, va("sound/chars/sentry/misc/talk%d", Q_irand(1, 3)) );			TIMER_Set( NPC, "patrolNoise", Q_irand( 4000, 10000 ) );		}	}	// He's dead.	if (NPC->enemy->health<1)	{		NPC->enemy = NULL;		Sentry_Idle();		return;	}	// If we don't have an enemy, just idle	if ( NPC_CheckEnemyExt(qfalse) == qfalse )	{		Sentry_Idle();		return;	}	// Rate our distance to the target and visibilty	distance	= (int) DistanceHorizontalSquared( NPC->r.currentOrigin, NPC->enemy->r.currentOrigin );		visible		= NPC_ClearLOS4( NPC->enemy );	advance		= (qboolean)(distance > MIN_DISTANCE_SQR);	// If we cannot see our target, move to see it	if ( visible == qfalse )	{		if ( NPCInfo->scriptFlags & SCF_CHASE_ENEMIES )		{			Sentry_Hunt( visible, advance );			return;		}	}	NPC_FaceEnemy( qtrue );	Sentry_RangedAttack( visible, advance );}
开发者ID:DarthFutuza,项目名称:JediKnightGalaxies,代码行数:61,


示例3: Seeker_FindEnemy

//------------------------------------void Seeker_FindEnemy( void ){	int			numFound;	float		dis, bestDis = SEEKER_SEEK_RADIUS * SEEKER_SEEK_RADIUS + 1;	vec3_t		mins, maxs;	int			entityList[MAX_GENTITIES];	gentity_t	*ent, *best = NULL;	int			i;	VectorSet( maxs, SEEKER_SEEK_RADIUS, SEEKER_SEEK_RADIUS, SEEKER_SEEK_RADIUS );	VectorScale( maxs, -1, mins );	numFound = trap->EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES );	for ( i = 0 ; i < numFound ; i++ )	{		ent = &g_entities[entityList[i]];		if ( ent->s.number == NPCS.NPC->s.number			|| !ent->client //&& || !ent->NPC			|| ent->health <= 0			|| !ent->inuse )		{			continue;		}		if ( ent->client->playerTeam == NPCS.NPC->client->playerTeam || ent->client->playerTeam == NPCTEAM_NEUTRAL ) // don't attack same team or bots		{			continue;		}		// try to find the closest visible one		if ( !NPC_ClearLOS4( ent ))		{			continue;		}		dis = DistanceHorizontalSquared( NPCS.NPC->r.currentOrigin, ent->r.currentOrigin );		if ( dis <= bestDis )		{			bestDis = dis;			best = ent;		}	}	if ( best )	{		// used to offset seekers around a circle so they don't occupy the same spot.  This is not a fool-proof method.		NPCS.NPC->random = Q_flrand(0.0f, 1.0f) * 6.3f; // roughly 2pi		NPCS.NPC->enemy = best;	}}
开发者ID:Avygeil,项目名称:NewJK,代码行数:55,


示例4: ATST_Attack

void ATST_Attack( void ) {	qboolean altAttack = qfalse, visible = qfalse, advance = qfalse;	int blasterTest, chargerTest;	float distance;	if ( !NPC_CheckEnemyExt( qfalse ) ) {		NPC->enemy = NULL;		return;	}	NPC_FaceEnemy( qtrue );	// Rate our distance to the target, and our visibilty	distance = (int)DistanceHorizontalSquared( &NPC->r.currentOrigin, &NPC->enemy->r.currentOrigin );	visible = NPC_ClearLOS4( NPC->enemy ) ? qtrue : qfalse;	advance = (distance > MIN_DISTANCE_SQR) ? qtrue : qfalse;	// If we cannot see our target, move to see it	if ( !visible ) {		if ( NPCInfo->scriptFlags & SCF_CHASE_ENEMIES ) {			ATST_Hunt( visible, advance );			return;		}	}	// Decide what type of attack to do	if ( distance > MIN_MELEE_RANGE_SQR ) {		// DIST_LONG		//		NPC_ChangeWeapon( WP_ATST_SIDE );		//rwwFIXMEFIXME: make atst weaps work.		// See if the side weapons are there		blasterTest = trap->G2API_GetSurfaceRenderStatus( NPC->ghoul2, 0, "head_light_blaster_cann" );		chargerTest = trap->G2API_GetSurfaceRenderStatus( NPC->ghoul2, 0, "head_concussion_charger" );		// It has both side weapons		if ( blasterTest != -1 && !(blasterTest & TURN_OFF) && chargerTest != -1 && !(chargerTest & TURN_OFF) )			altAttack = Q_irand( 0, 1 ) ? qtrue : qfalse;		else if ( blasterTest != -1 && !(blasterTest & TURN_OFF) )			altAttack = qfalse;		else if ( chargerTest != -1 && !(chargerTest & TURN_OFF) )			altAttack = qtrue;		else			NPC_ChangeWeapon( WP_NONE );	}	else {		// DIST_MELEE		//	NPC_ChangeWeapon( WP_ATST_MAIN );	}	NPC_FaceEnemy( qtrue );	ATST_Ranged( visible, advance, altAttack );}
开发者ID:Arcadiaprime,项目名称:japp,代码行数:53,


示例5: ImperialProbe_AttackDecision

void ImperialProbe_AttackDecision( void ){	float		distance;		qboolean	visible;	qboolean	advance;	// Always keep a good height off the ground	ImperialProbe_MaintainHeight();	//randomly talk	if ( TIMER_Done(NPC,"patrolNoise") )	{		if (TIMER_Done(NPC,"angerNoise"))		{			G_SoundOnEnt( NPC, CHAN_AUTO, va("sound/chars/probe/misc/probetalk%d", Q_irand(1, 3)) );			TIMER_Set( NPC, "patrolNoise", Q_irand( 4000, 10000 ) );		}	}	// If we don't have an enemy, just idle	if ( NPC_CheckEnemyExt(qfalse) == qfalse )	{		ImperialProbe_Idle();		return;	}	NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_RUN1, SETANIM_FLAG_NORMAL);	// Rate our distance to the target, and our visibilty	distance	= (int) DistanceHorizontalSquared( NPC->r.currentOrigin, NPC->enemy->r.currentOrigin );		visible		= NPC_ClearLOS4( NPC->enemy );	advance		= (qboolean)(distance > MIN_DISTANCE_SQR);	// If we cannot see our target, move to see it	if ( visible == qfalse )	{		if ( NPCInfo->scriptFlags & SCF_CHASE_ENEMIES )		{			ImperialProbe_Hunt( visible, advance );			return;		}	}	// Sometimes I have problems with facing the enemy I'm attacking, so force the issue so I don't look dumb	NPC_FaceEnemy( qtrue );	// Decide what type of attack to do	ImperialProbe_Ranged( visible, advance );}
开发者ID:ForcePush,项目名称:OJPRPFZ,代码行数:50,


示例6: Seeker_Attack

void Seeker_Attack( void ){    float		distance;    qboolean	visible;    qboolean	advance;    // Always keep a good height off the ground    Seeker_MaintainHeight();    // Rate our distance to the target, and our visibilty    distance	= DistanceHorizontalSquared( NPC->r.currentOrigin, NPC->enemy->r.currentOrigin );    visible		= NPC_ClearLOS4( NPC->enemy );    advance		= (qboolean)(distance > MIN_DISTANCE_SQR);    //[SeekerItemNpc]    //dont shoot at dead people    if(!NPC->enemy->inuse || NPC->enemy->health <= 0) {        NPC->enemy = NULL;        return;    }    //[/SeekerItemNpc]    if ( NPC->client->NPC_class == CLASS_BOBAFETT )    {        advance = (qboolean)(distance>(200.0f*200.0f));    }    // If we cannot see our target, move to see it    if ( visible == qfalse )    {        if ( NPCInfo->scriptFlags & SCF_CHASE_ENEMIES )        {            Seeker_Hunt( visible, advance );            return;        }        //[SeekerItemNpc]        else {            //we cant chase them?  then return to the follow target            NPC->enemy = NULL;            if(NPC->client->leader)                NPCInfo->goalEntity = NPC->client->leader;            return;        }        //[/SeekerItemNpc]    }    Seeker_Ranged( visible, advance );}
开发者ID:jwginge,项目名称:ojpa,代码行数:49,


示例7: Interrogator_Attack

/*-------------------------Interrogator_Attack-------------------------*/void Interrogator_Attack( void ){	float		distance;		qboolean	visible;	qboolean	advance;	// Always keep a good height off the ground	Interrogator_MaintainHeight();	//randomly talk	if ( TIMER_Done(NPC,"patrolNoise") )	{		if (TIMER_Done(NPC,"angerNoise"))		{			G_SoundOnEnt( NPC, CHAN_AUTO, va("sound/chars/probe/misc/talk.wav",	Q_irand(1, 3)) );			TIMER_Set( NPC, "patrolNoise", Q_irand( 4000, 10000 ) );		}	}	// If we don't have an enemy, just idle	if ( NPC_CheckEnemyExt(qfalse) == qfalse )	{		Interrogator_Idle();		return;	}	// Rate our distance to the target, and our visibilty	distance	= (int) DistanceHorizontalSquared( NPC->r.currentOrigin, NPC->enemy->r.currentOrigin );		visible		= NPC_ClearLOS4( NPC->enemy );	advance		= (qboolean)(distance > MIN_DISTANCE*MIN_DISTANCE );	if ( !visible )	{		advance = qtrue;	}	if ( NPCInfo->scriptFlags & SCF_CHASE_ENEMIES )	{		Interrogator_Hunt( visible, advance );	}	NPC_FaceEnemy( qtrue );	if (!advance)	{		Interrogator_Melee( visible, advance );	}}
开发者ID:AlexCSilva,项目名称:jediacademy,代码行数:53,


示例8: Remote_Attack

/*-------------------------Remote_Attack-------------------------*/void Remote_Attack( void ){	float		distance;	qboolean	visible;	float		idealDist;	qboolean	advance;	qboolean	retreat;	if ( TIMER_Done(NPC,"spin") )	{		TIMER_Set( NPC, "spin", Q_irand( 250, 1500 ) );		NPCInfo->desiredYaw += Q_irand( -200, 200 ); 	}	// Always keep a good height off the ground	Remote_MaintainHeight();	// If we don't have an enemy, just idle	if ( NPC_CheckEnemyExt(qfalse) == qfalse )	{		Remote_Idle();		return;	}	// Rate our distance to the target, and our visibilty	distance	= (int) DistanceHorizontalSquared( NPC->r.currentOrigin, NPC->enemy->r.currentOrigin );		visible		= NPC_ClearLOS4( NPC->enemy );	//[CoOp]	idealDist	= MIN_DISTANCE_SQR+(MIN_DISTANCE_SQR*Q_flrand( 0, 1 ));	//idealDist	= MIN_DISTANCE_SQR+(MIN_DISTANCE_SQR*flrand( 0, 1 ));	//[/CoOp]	advance		= (qboolean)(distance > idealDist*1.25);	retreat		= (qboolean)(distance < idealDist*0.75);	// If we cannot see our target, move to see it	if ( visible == qfalse )	{		if ( NPCInfo->scriptFlags & SCF_CHASE_ENEMIES )		{			Remote_Hunt( visible, advance, retreat );			return;		}	}	Remote_Ranged( visible, advance, retreat );}
开发者ID:jwginge,项目名称:ojpa,代码行数:51,


示例9: NPC_BSReaver_Attack

void NPC_BSReaver_Attack( void ){	// We may have a pounce animation started and are waiting to actually start the jump movement...	Reaver_Jump();	//If we don't have an enemy, just idle	if ( NPC_CheckEnemyExt() == qfalse )	{		NPC_BSReaver_Idle();		return;	}	//Rate our distance to the target, and our visibilty	float		distance	= (int) DistanceHorizontalSquared( NPC->currentOrigin, NPC->enemy->currentOrigin );		distance_e	distRate	= ( distance > MIN_MELEE_RANGE_SQR ) ? DIST_LONG : DIST_MELEE;	int			visRate		= NPC_ClearLOS( NPC->enemy );	//If we cannot see our target, move to see it	if ( visRate == qfalse )	{		Reaver_Hunt();		return;	}	if ( distance < MIN_CRITICAL_DIST_SQR )	{		// We're not happy when the player gets too close		Reaver_Backup();	}	//Decide what to do next	switch ( distRate )	{	case DIST_MELEE:		Reaver_Melee();		break;	case DIST_LONG:		Reaver_Ranged( distance );		break;	}}
开发者ID:UberGames,项目名称:SP-Mod-Source-Code,代码行数:42,


示例10: Seeker_FollowPlayer

//------------------------------------void Seeker_FollowPlayer( void ){	Seeker_MaintainHeight();	float	dis	= DistanceHorizontalSquared( NPC->currentOrigin, g_entities[0].currentOrigin );	vec3_t	pt, dir;		if ( dis < MIN_DISTANCE_SQR )	{		// generally circle the player closely till we take an enemy..this is our target point		pt[0] = g_entities[0].currentOrigin[0] + cos( level.time * 0.001f + NPC->random ) * 56;		pt[1] = g_entities[0].currentOrigin[1] + sin( level.time * 0.001f + NPC->random ) * 56;		pt[2] = g_entities[0].currentOrigin[2] + 40;		VectorSubtract( pt, NPC->currentOrigin, dir );		VectorMA( NPC->client->ps.velocity, 0.8f, dir, NPC->client->ps.velocity );	}	else	{		if ( TIMER_Done( NPC, "seekerhiss" ))		{			TIMER_Set( NPC, "seekerhiss", 1000 + random() * 1000 );			G_Sound( NPC, G_SoundIndex( "sound/chars/seeker/misc/hiss" ));		}		// Hey come back!		NPCInfo->goalEntity = &g_entities[0];		NPCInfo->goalRadius = 32;		NPC_MoveToGoal( qtrue );		NPC->owner = &g_entities[0];	}	if ( NPCInfo->enemyCheckDebounceTime < level.time )	{		// check twice a second to find a new enemy		Seeker_FindEnemy();		NPCInfo->enemyCheckDebounceTime = level.time + 500;	}	NPC_UpdateAngles( qtrue, qtrue );}
开发者ID:AlexXT,项目名称:OpenJK,代码行数:42,


示例11: RT_Flying_Attack

void RT_Flying_Attack( void ){	// Always keep a good height off the ground	RT_Flying_MaintainHeight();	// Rate our distance to the target, and our visibilty	float		distance	= DistanceHorizontalSquared( NPC->currentOrigin, NPC->enemy->currentOrigin );		qboolean	visible		= NPC_ClearLOS( NPC->enemy );	qboolean	advance		= (qboolean)(distance>(256.0f*256.0f));	// If we cannot see our target, move to see it	if ( visible == qfalse )	{		if ( NPCInfo->scriptFlags & SCF_CHASE_ENEMIES )		{			RT_Flying_Hunt( visible, advance );			return;		}	}	RT_Flying_Ranged( visible, advance );}
开发者ID:3ddy,项目名称:Jedi-Academy,代码行数:22,


示例12: MineMonster_Combat

//----------------------------------void MineMonster_Combat( void ){	float distance;	qboolean advance;	// If we cannot see our target or we have somewhere to go, then do that	if ( !NPC_ClearLOS4( NPC->enemy ) || UpdateGoal( ))	{		NPCInfo->combatMove = qtrue;		NPCInfo->goalEntity = NPC->enemy;		NPCInfo->goalRadius = MAX_DISTANCE;	// just get us within combat range		NPC_MoveToGoal( qtrue );		return;	}	// Sometimes I have problems with facing the enemy I'm attacking, so force the issue so I don't look dumb	NPC_FaceEnemy( qtrue );	distance	= DistanceHorizontalSquared( &NPC->r.currentOrigin, &NPC->enemy->r.currentOrigin );		advance = (qboolean)( distance > MIN_DISTANCE_SQR ? qtrue : qfalse  );	if (( advance || NPCInfo->localState == LSTATE_WAITING ) && TIMER_Done( NPC, "attacking" )) // waiting monsters can't attack	{		if ( TIMER_Done2( NPC, "takingPain", qtrue ))		{			NPCInfo->localState = LSTATE_CLEAR;		}		else		{			MineMonster_Move( qtrue );		}	}	else	{		MineMonster_Attack();	}}
开发者ID:Geptun,项目名称:japp,代码行数:40,


示例13: Mark2_AttackDecision

/*-------------------------Mark2_AttackDecision-------------------------*/void Mark2_AttackDecision( void ){	float		distance;	qboolean	visible;	qboolean	advance;	NPC_FaceEnemy( qtrue );	distance	= (int) DistanceHorizontalSquared( NPC->r.currentOrigin, NPC->enemy->r.currentOrigin );		visible		= NPC_ClearLOS4( NPC->enemy );	advance		= (qboolean)(distance > MIN_DISTANCE_SQR);	// He's been ordered to get up	if (NPCInfo->localState == LSTATE_RISINGUP)	{		NPC->flags &= ~FL_SHIELDED;		NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_RUN1START, SETANIM_FLAG_HOLD|SETANIM_FLAG_OVERRIDE );		if ((NPC->client->ps.legsTimer<=0) && 			NPC->client->ps.torsoAnim == BOTH_RUN1START )		{			NPCInfo->localState = LSTATE_NONE;	// He's up again.		}		return;	}	// If we cannot see our target, move to see it	if ((!visible) || (!NPC_FaceEnemy(qtrue)))	{		// If he's going down or is down, make him get up		if ((NPCInfo->localState == LSTATE_DOWN) || (NPCInfo->localState == LSTATE_DROPPINGDOWN))		{			if ( TIMER_Done( NPC, "downTime" ) )	// Down being down?? (The delay is so he doesn't pop up and down when the player goes in and out of range)			{				NPCInfo->localState = LSTATE_RISINGUP;				NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_RUN1STOP, SETANIM_FLAG_HOLD|SETANIM_FLAG_OVERRIDE );				TIMER_Set( NPC, "runTime", Q_irand( 3000, 8000) );	// So he runs for a while before testing to see if he should drop down.			}		}		else		{			Mark2_Hunt();		}		return;	}	// He's down but he could advance if he wants to.	if ((advance) && (TIMER_Done( NPC, "downTime" )) && (NPCInfo->localState == LSTATE_DOWN))	{		NPCInfo->localState = LSTATE_RISINGUP;		NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_RUN1STOP, SETANIM_FLAG_HOLD|SETANIM_FLAG_OVERRIDE );		TIMER_Set( NPC, "runTime", Q_irand( 3000, 8000) );	// So he runs for a while before testing to see if he should drop down.	}	NPC_FaceEnemy( qtrue );	// Dropping down to shoot	if (NPCInfo->localState == LSTATE_DROPPINGDOWN)	{		NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_RUN1STOP, SETANIM_FLAG_HOLD|SETANIM_FLAG_OVERRIDE );		TIMER_Set( NPC, "downTime", Q_irand( 3000, 9000) );		if ((NPC->client->ps.legsTimer<=0) && NPC->client->ps.torsoAnim == BOTH_RUN1STOP )		{			NPC->flags |= FL_SHIELDED;			NPCInfo->localState = LSTATE_DOWN;		}	}	// He's down and shooting	else if (NPCInfo->localState == LSTATE_DOWN)	{		NPC->flags |= FL_SHIELDED;//only damagable by lightsabers and missiles		Mark2_BlasterAttack(qfalse);	}	else if (TIMER_Done( NPC, "runTime" ))	// Lowering down to attack. But only if he's done running at you.	{		NPCInfo->localState = LSTATE_DROPPINGDOWN;	}	else if (advance)	{		// We can see enemy so shoot him if timer lets you.		Mark2_BlasterAttack(advance);	}}
开发者ID:NikitaRus,项目名称:JediKnightGalaxies-1,代码行数:89,


示例14: Mark1_AttackDecision

/*-------------------------Mark1_AttackDecision-------------------------*/void Mark1_AttackDecision( void ){	int blasterTest,rocketTest;	float		distance;	distance_e	distRate;	qboolean	visible;	qboolean	advance;	//randomly talk	if ( TIMER_Done(NPC,"patrolNoise") )	{		if (TIMER_Done(NPC,"angerNoise"))		{			TIMER_Set( NPC, "patrolNoise", Q_irand( 4000, 10000 ) );		}	}	// Enemy is dead or he has no enemy.	if ((NPC->enemy->health<1) || ( NPC_CheckEnemyExt(qfalse) == qfalse ))	{		NPC->enemy = NULL;		return;	}	// Rate our distance to the target and visibility	distance	= (int) DistanceHorizontalSquared( NPC->r.currentOrigin, NPC->enemy->r.currentOrigin );		distRate	= ( distance > MIN_MELEE_RANGE_SQR ) ? DIST_LONG : DIST_MELEE;	visible		= NPC_ClearLOS4( NPC->enemy );	advance		= (qboolean)(distance > MIN_DISTANCE_SQR);	// If we cannot see our target, move to see it	if ((!visible) || (!NPC_FaceEnemy(qtrue)))	{		Mark1_Hunt();		return;	}	// See if the side weapons are there	blasterTest = trap_G2API_GetSurfaceRenderStatus( NPC->ghoul2, 0, "l_arm" );	rocketTest = trap_G2API_GetSurfaceRenderStatus( NPC->ghoul2, 0, "r_arm" );	// It has both side weapons	if (!blasterTest  && !rocketTest)	{		;	// So do nothing.	}	else if (blasterTest!=-1		&&blasterTest)	{		distRate = DIST_LONG;	}	else if (rocketTest!=-1		&&rocketTest)	{		distRate = DIST_MELEE;	}	else	// It should never get here, but just in case	{ 		NPC->health = 0;		NPC->client->ps.stats[STAT_HEALTH] = 0;		if (NPC->die)		{			NPC->die(NPC, NPC, NPC, 100, MOD_UNKNOWN);		}	}	// We can see enemy so shoot him if timers let you.	NPC_FaceEnemy( qtrue );	if (distRate == DIST_MELEE)	{		Mark1_BlasterAttack(advance);	}	else if (distRate == DIST_LONG)	{		Mark1_RocketAttack(advance);	}}
开发者ID:NoahBennet,项目名称:base_enhanced,代码行数:83,


示例15: Seeker_FollowOwner

//------------------------------------void Seeker_FollowOwner( void ){	float	dis, minDistSqr;	vec3_t	pt, dir;	gentity_t	*owner = &g_entities[NPCS.NPC->s.owner];	Seeker_MaintainHeight();	if ( NPCS.NPC->client->NPC_class == CLASS_BOBAFETT )	{		owner = NPCS.NPC->enemy;	}	if ( !owner || owner == NPCS.NPC || !owner->client )	{		return;	}	//rwwFIXMEFIXME: Care about all clients not just 0	dis	= DistanceHorizontalSquared( NPCS.NPC->r.currentOrigin, owner->r.currentOrigin );	minDistSqr = MIN_DISTANCE_SQR;	if ( NPCS.NPC->client->NPC_class == CLASS_BOBAFETT )	{		if ( TIMER_Done( NPCS.NPC, "flameTime" ) )		{			minDistSqr = 200*200;		}	}	if ( dis < minDistSqr )	{		// generally circle the player closely till we take an enemy..this is our target point		if ( NPCS.NPC->client->NPC_class == CLASS_BOBAFETT )		{			pt[0] = owner->r.currentOrigin[0] + cos( level.time * 0.001f + NPCS.NPC->random ) * 250;			pt[1] = owner->r.currentOrigin[1] + sin( level.time * 0.001f + NPCS.NPC->random ) * 250;			if ( NPCS.NPC->client->jetPackTime < level.time )			{				pt[2] = NPCS.NPC->r.currentOrigin[2] - 64;			}			else			{				pt[2] = owner->r.currentOrigin[2] + 200;			}		}		else		{			pt[0] = owner->r.currentOrigin[0] + cos( level.time * 0.001f + NPCS.NPC->random ) * 56;			pt[1] = owner->r.currentOrigin[1] + sin( level.time * 0.001f + NPCS.NPC->random ) * 56;			pt[2] = owner->r.currentOrigin[2] + 40;		}		VectorSubtract( pt, NPCS.NPC->r.currentOrigin, dir );		VectorMA( NPCS.NPC->client->ps.velocity, 0.8f, dir, NPCS.NPC->client->ps.velocity );	}	else	{		if ( NPCS.NPC->client->NPC_class != CLASS_BOBAFETT )		{			if ( TIMER_Done( NPCS.NPC, "seekerhiss" ))			{				TIMER_Set( NPCS.NPC, "seekerhiss", 1000 + Q_flrand(0.0f, 1.0f) * 1000 );				G_Sound( NPCS.NPC, CHAN_AUTO, G_SoundIndex( "sound/chars/seeker/misc/hiss" ));			}		}		// Hey come back!		NPCS.NPCInfo->goalEntity = owner;		NPCS.NPCInfo->goalRadius = 32;		NPC_MoveToGoal( qtrue );		NPCS.NPC->parent = owner;	}	if ( NPCS.NPCInfo->enemyCheckDebounceTime < level.time )	{		// check twice a second to find a new enemy		Seeker_FindEnemy();		NPCS.NPCInfo->enemyCheckDebounceTime = level.time + 500;	}	NPC_UpdateAngles( qtrue, qtrue );}
开发者ID:Avygeil,项目名称:NewJK,代码行数:83,


示例16: Seeker_FollowPlayer

//[CoOp]//------------------------------------void Seeker_FollowPlayer( void ){   //hover around the closest player    //[SeekerItemNpc]#if 1    vec3_t	pt, dir;    float	dis;    float	minDistSqr = MIN_DISTANCE_SQR;    gentity_t *target;    Seeker_MaintainHeight();    if(NPC->activator && NPC->activator->client)    {        if(NPC->activator->client->remote != NPC || NPC->activator->health <= 0) {            //have us fall down and explode.            NPC->NPC->aiFlags |= NPCAI_CUSTOM_GRAVITY;            return;        }        target = NPCInfo->goalEntity;        if(!target)            target = NPC->client->leader;    }    else {        target = FindClosestPlayer(NPC->r.currentOrigin, NPC->client->playerTeam);    }    if(!target)    {   //in MP it's actually possible that there's no players on our team at the moment.        return;    }    dis	= DistanceHorizontalSquared( NPC->r.currentOrigin, target->r.currentOrigin );    if ( NPC->client->NPC_class == CLASS_BOBAFETT )    {        if ( TIMER_Done( NPC, "flameTime" ) )        {            minDistSqr = 200*200;        }    }    if ( dis < minDistSqr )    {        // generally circle the player closely till we take an enemy..this is our target point        if ( NPC->client->NPC_class == CLASS_BOBAFETT )        {            pt[0] = target->r.currentOrigin[0] + cos( level.time * 0.001f + NPC->random ) * 250;            pt[1] = target->r.currentOrigin[1] + sin( level.time * 0.001f + NPC->random ) * 250;            if ( NPC->client->jetPackTime < level.time )            {                pt[2] = target->r.currentOrigin[2] - 64;            }            else            {                pt[2] = target->r.currentOrigin[2] + 200;            }        }        else        {            pt[0] = target->r.currentOrigin[0] + cos( level.time * 0.001f + NPC->random ) * 56;            pt[1] = target->r.currentOrigin[1] + sin( level.time * 0.001f + NPC->random ) * 56;            pt[2] = target->r.currentOrigin[2] + 40;        }        VectorSubtract( pt, NPC->r.currentOrigin, dir );        VectorMA( NPC->client->ps.velocity, 0.8f, dir, NPC->client->ps.velocity );    }    else    {        if ( NPC->client->NPC_class != CLASS_BOBAFETT )        {            if ( TIMER_Done( NPC, "seekerhiss" ))            {                TIMER_Set( NPC, "seekerhiss", 1000 + random() * 1000 );                G_Sound( NPC, CHAN_AUTO, G_SoundIndex( "sound/chars/seeker/misc/hiss" ));            }        }        // Hey come back!        NPCInfo->goalEntity = target;        if(target == NPC->enemy)            NPCInfo->goalRadius = 60;        else            NPCInfo->goalRadius = 32;        if(!NPC_MoveToGoal(qtrue)) {            //cant go there on our first try, abort.            //this really isnt the best way... but if it cant reach the point, it will just sit there doing nothing.            NPCInfo->goalEntity = NPC->client->leader;            //stop chasing the enemy if we were told to, and return to the player            NPCInfo->scriptFlags &= ~SCF_CHASE_ENEMIES;        }    }    //call this even if we do have an enemy, for enemy proximity detection    if ( /*!NPC->enemy && */ NPCInfo->enemyCheckDebounceTime < level.time )    {        // check twice a second to find a new enemy//.........这里部分代码省略.........
开发者ID:jwginge,项目名称:ojpa,代码行数:101,


示例17: ATST_Attack

/*-------------------------ATST_Attack-------------------------*/void ATST_Attack( void ){    qboolean	altAttack=qfalse;    int			blasterTest,chargerTest,weapon;    if ( NPC_CheckEnemyExt() == qfalse )//!NPC->enemy )//    {        NPC->enemy = NULL;        return;    }    NPC_FaceEnemy( qtrue );    // Rate our distance to the target, and our visibilty    float		distance	= (int) DistanceHorizontalSquared( NPC->currentOrigin, NPC->enemy->currentOrigin );    distance_e	distRate	= ( distance > MIN_MELEE_RANGE_SQR ) ? DIST_LONG : DIST_MELEE;    qboolean	visible		= NPC_ClearLOS( NPC->enemy );    qboolean	advance		= (qboolean)(distance > MIN_DISTANCE_SQR);    // If we cannot see our target, move to see it    if ( visible == qfalse )    {        if ( NPCInfo->scriptFlags & SCF_CHASE_ENEMIES )        {            ATST_Hunt( visible, advance );            return;        }    }    // Decide what type of attack to do    switch ( distRate )    {    case DIST_MELEE:        NPC_ChangeWeapon( WP_ATST_MAIN );        break;    case DIST_LONG:        NPC_ChangeWeapon( WP_ATST_SIDE );        // See if the side weapons are there        blasterTest = gi.G2API_GetSurfaceRenderStatus( &NPC->ghoul2[NPC->playerModel], "head_light_blaster_cann" );        chargerTest = gi.G2API_GetSurfaceRenderStatus( &NPC->ghoul2[NPC->playerModel], "head_concussion_charger" );        // It has both side weapons        if (!(blasterTest & TURN_OFF)  && !(chargerTest & TURN_OFF))        {            weapon = Q_irand( 0, 1);	// 0 is blaster, 1 is charger (ALT SIDE)            if (weapon)				// Fire charger            {                altAttack = qtrue;            }            else            {                altAttack = qfalse;            }        }        else if (!(blasterTest & TURN_OFF))	// Blaster is on        {            altAttack = qfalse;        }        else if (!(chargerTest & TURN_OFF))	// Blaster is on        {            altAttack = qtrue;        }        else        {            NPC_ChangeWeapon( WP_NONE );        }        break;    }    NPC_FaceEnemy( qtrue );    ATST_Ranged( visible, advance,altAttack );}
开发者ID:MrSquirrely,项目名称:Jedi-Academy,代码行数:83,


示例18: Seeker_FindEnemy

//------------------------------------void Seeker_FindEnemy( void ){    int			numFound;    float		dis, bestDis = SEEKER_SEEK_RADIUS * SEEKER_SEEK_RADIUS + 1;    vec3_t		mins, maxs;    int			entityList[MAX_GENTITIES];    gentity_t	*ent, *best = NULL;    int			i;    //[SeekerItemNpc]    float closestDist = SEEKER_SEEK_RADIUS * SEEKER_SEEK_RADIUS + 1;    //[/SeekerItemNpc]    if(NPC->activator && NPC->activator->client->ps.weapon == WP_SABER && !NPC->activator->client->ps.saberHolstered)    {        NPC->enemy=NULL;        return;    }    VectorSet( maxs, SEEKER_SEEK_RADIUS, SEEKER_SEEK_RADIUS, SEEKER_SEEK_RADIUS );    VectorScale( maxs, -1, mins );    //[CoOp]    //without this, the seekers are just scanning in terms of the world coordinates instead of around themselves, which is bad.    VectorAdd(maxs, NPC->r.currentOrigin, maxs);    VectorAdd(mins, NPC->r.currentOrigin, mins);    //[/CoOp]    numFound = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES );    for ( i = 0 ; i < numFound ; i++ )    {        ent = &g_entities[entityList[i]];        if ( ent->s.number == NPC->s.number                || !ent->client //&& || !ent->NPC                //[CoOp]                //SP says this.  Don't attack non-NPCs?!                //|| !ent->NPC                //[/CoOp]                || ent->health <= 0                || !ent->inuse )        {            continue;        }        //[SeekerItemNpc]        if(OnSameTeam(NPC->activator, ent))        {   //our owner is on the same team as this entity, don't target them.            continue;        }        //dont attack our owner        if(NPC->activator == ent)            continue;        if(ent->s.NPC_class == CLASS_VEHICLE)            continue;        //[/SeekerItemNpc]        dis = DistanceHorizontalSquared( NPC->r.currentOrigin, ent->r.currentOrigin );        if ( dis <= closestDist )            closestDist = dis;        // try to find the closest visible one        if ( !NPC_ClearLOS4( ent ))        {            continue;        }        if ( dis <= bestDis )        {            bestDis = dis;            best = ent;        }        //[/SeekerItemNpc]    }    if ( best )    {        //[SeekerItemNpc] because we can run even if we already have an enemy        if(!NPC->enemy) {            // used to offset seekers around a circle so they don't occupy the same spot.  This is not a fool-proof method.            NPC->random = random() * 6.3f; // roughly 2pi            NPC->enemy = best;        }        //[/SeekerItemNpc]    }    //[SeekerItemNpc]    //positive radius, check with los in mind    if(NPC->radius > 0) {        if(best && bestDis <= NPC->radius)            NPC->fly_sound_debounce_time = level.time + (int)floor(2500.0f * (bestDis / (float)NPC->radius)) + 500;        else            NPC->fly_sound_debounce_time = -1;    }//.........这里部分代码省略.........
开发者ID:jwginge,项目名称:ojpa,代码行数:101,


示例19: NPC_BSGrenadier_Attack

void NPC_BSGrenadier_Attack( void ){	//Don't do anything if we're hurt	if ( NPC->painDebounceTime > level.time )	{		NPC_UpdateAngles( qtrue, qtrue );		return;	}	//NPC_CheckEnemy( qtrue, qfalse );	//If we don't have an enemy, just idle	if ( NPC_CheckEnemyExt() == qfalse )//!NPC->enemy )//	{		NPC->enemy = NULL;		NPC_BSGrenadier_Patrol();//FIXME: or patrol?		return;	}	if ( TIMER_Done( NPC, "flee" ) && NPC_CheckForDanger( NPC_CheckAlertEvents( qtrue, qtrue, -1, qfalse, AEL_DANGER ) ) )	{//going to run		NPC_UpdateAngles( qtrue, qtrue );		return;	}	if ( !NPC->enemy )	{//WTF?  somehow we lost our enemy?		NPC_BSGrenadier_Patrol();//FIXME: or patrol?		return;	}	enemyLOS = enemyCS = qfalse;	move = qtrue;	faceEnemy = qfalse;	shoot = qfalse;	enemyDist = DistanceSquared( NPC->enemy->currentOrigin, NPC->currentOrigin );	//See if we should switch to melee attack	if ( enemyDist < 16384 && (!NPC->enemy->client||NPC->enemy->client->ps.weapon != WP_SABER||!NPC->enemy->client->ps.saberActive) )//128	{//enemy is close and not using saber		if ( NPC->client->ps.weapon == WP_THERMAL )		{//grenadier			trace_t	trace;			gi.trace ( &trace, NPC->currentOrigin, NPC->enemy->mins, NPC->enemy->maxs, NPC->enemy->currentOrigin, NPC->s.number, NPC->enemy->clipmask );			if ( !trace.allsolid && !trace.startsolid && (trace.fraction == 1.0 || trace.entityNum == NPC->enemy->s.number ) )			{//I can get right to him				//reset fire-timing variables				NPC_ChangeWeapon( WP_MELEE );				if ( !(NPCInfo->scriptFlags&SCF_CHASE_ENEMIES) )//NPCInfo->behaviorState == BS_STAND_AND_SHOOT )				{//FIXME: should we be overriding scriptFlags?					NPCInfo->scriptFlags |= SCF_CHASE_ENEMIES;//NPCInfo->behaviorState = BS_HUNT_AND_KILL;				}			}		}	}	else if ( enemyDist > 65536 || (NPC->enemy->client && NPC->enemy->client->ps.weapon == WP_SABER && NPC->enemy->client->ps.saberActive) )//256	{//enemy is far or using saber		if ( NPC->client->ps.weapon == WP_MELEE && (NPC->client->ps.stats[STAT_WEAPONS]&(1<<WP_THERMAL)) )		{//fisticuffs, make switch to thermal if have it			//reset fire-timing variables			NPC_ChangeWeapon( WP_THERMAL );		}	}	//can we see our target?	if ( NPC_ClearLOS( NPC->enemy ) )	{		NPCInfo->enemyLastSeenTime = level.time;		enemyLOS = qtrue;		if ( NPC->client->ps.weapon == WP_MELEE )		{			if ( enemyDist <= 4096 && InFOV( NPC->enemy->currentOrigin, NPC->currentOrigin, NPC->client->ps.viewangles, 90, 45 ) )//within 64 & infront			{				VectorCopy( NPC->enemy->currentOrigin, NPCInfo->enemyLastSeenLocation );				enemyCS = qtrue;			}		}		else if ( InFOV( NPC->enemy->currentOrigin, NPC->currentOrigin, NPC->client->ps.viewangles, 45, 90 ) )		{//in front of me 			//can we shoot our target?			//FIXME: how accurate/necessary is this check?			int hit = NPC_ShotEntity( NPC->enemy );			gentity_t *hitEnt = &g_entities[hit];			if ( hit == NPC->enemy->s.number 				|| ( hitEnt && hitEnt->client && hitEnt->client->playerTeam == NPC->client->enemyTeam ) )			{				VectorCopy( NPC->enemy->currentOrigin, NPCInfo->enemyLastSeenLocation );				float enemyHorzDist = DistanceHorizontalSquared( NPC->enemy->currentOrigin, NPC->currentOrigin );				if ( enemyHorzDist < 1048576 )				{//within 1024					enemyCS = qtrue;					NPC_AimAdjust( 2 );//adjust aim better longer we have clear shot at enemy				}				else				{					NPC_AimAdjust( 1 );//adjust aim better longer we can see enemy				}			}		}	}//.........这里部分代码省略.........
开发者ID:blaenk,项目名称:jedioutcast,代码行数:101,


示例20: NPC_BSGM_Attack

void NPC_BSGM_Attack( void ){	//Don't do anything if we're hurt	if ( NPC->painDebounceTime > level.time )	{		NPC_UpdateAngles( qtrue, qtrue );		return;	}	//FIXME: if killed enemy, use victory anim	if ( NPC->enemy && NPC->enemy->health <= 0 		&& !NPC->enemy->s.number )	{//my enemy is dead		if ( NPC->client->ps.torsoAnim == BOTH_STAND2TO1 )		{			if ( NPC->client->ps.torsoAnimTimer <= 500 )			{				G_AddVoiceEvent( NPC, Q_irand( EV_VICTORY1, EV_VICTORY3 ), 3000 );				NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_TRIUMPHANT1START, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD );				NPC->client->ps.legsAnimTimer += 500;				NPC->client->ps.torsoAnimTimer += 500;			}		}		else if ( NPC->client->ps.torsoAnim == BOTH_TRIUMPHANT1START )		{			if ( NPC->client->ps.torsoAnimTimer <= 500 )			{				NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_TRIUMPHANT1STARTGESTURE, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD );				NPC->client->ps.legsAnimTimer += 500;				NPC->client->ps.torsoAnimTimer += 500;			}		}		else if ( NPC->client->ps.torsoAnim == BOTH_TRIUMPHANT1STARTGESTURE )		{			if ( NPC->client->ps.torsoAnimTimer <= 500 )			{				NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_TRIUMPHANT1STOP, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD );				NPC->client->ps.legsAnimTimer += 500;				NPC->client->ps.torsoAnimTimer += 500;			}		}		else if ( NPC->client->ps.torsoAnim == BOTH_TRIUMPHANT1STOP )		{			if ( NPC->client->ps.torsoAnimTimer <= 500 )			{				NPC_SetAnim( NPC, SETANIM_BOTH, BOTH_STAND1, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD );				NPC->client->ps.legsAnimTimer = -1;				NPC->client->ps.torsoAnimTimer = -1;			}		}		else if ( NPC->wait )		{			if ( TIMER_Done( NPC, "gloatTime" ) )			{				GM_StartGloat();			}			else if ( DistanceHorizontalSquared( NPC->client->renderInfo.eyePoint, NPC->enemy->currentOrigin ) > 4096 && (NPCInfo->scriptFlags&SCF_CHASE_ENEMIES) )//64 squared			{				NPCInfo->goalEntity = NPC->enemy;				GM_Move();			}			else			{//got there				GM_StartGloat();			}		}		NPC_FaceEnemy( qtrue );		NPC_UpdateAngles( qtrue, qtrue );		return;	}	//If we don't have an enemy, just idle	if ( NPC_CheckEnemyExt() == qfalse || !NPC->enemy )	{		NPC->enemy = NULL;		NPC_BSGM_Patrol();		return;	}	enemyLOS = enemyCS = qfalse;	bMove = qtrue;	faceEnemy = qfalse;	shoot = qfalse;	hitAlly = qfalse;	VectorClear( impactPos );	enemyDist = DistanceSquared( NPC->currentOrigin, NPC->enemy->currentOrigin );	if ( NPC->client->ps.torsoAnim == BOTH_ATTACK4 ||		NPC->client->ps.torsoAnim == BOTH_ATTACK5 )	{		shoot = qfalse;		if ( TIMER_Done( NPC, "smackTime" ) && !NPCInfo->blockedDebounceTime )		{//time to smack			//recheck enemyDist and InFront			if ( enemyDist < MELEE_DIST_SQUARED && InFront( NPC->enemy->currentOrigin, NPC->currentOrigin, NPC->client->ps.viewangles, 0.3f ) )			{				vec3_t	smackDir;				VectorSubtract( NPC->enemy->currentOrigin, NPC->currentOrigin, smackDir );				smackDir[2] += 30;				VectorNormalize( smackDir );				//hurt them//.........这里部分代码省略.........
开发者ID:PJayB,项目名称:jk2src,代码行数:101,



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


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