本文整理汇总了C++中NPC_CheckEnemyExt函数的典型用法代码示例。如果您正苦于以下问题:C++ NPC_CheckEnemyExt函数的具体用法?C++ NPC_CheckEnemyExt怎么用?C++ NPC_CheckEnemyExt使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NPC_CheckEnemyExt函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Howler_Patrol
/*
-------------------------
Howler_Patrol
-------------------------
*/
void Howler_Patrol( void )
{
NPCInfo->localState = LSTATE_CLEAR;
//If we have somewhere to go, then do that
if ( UpdateGoal() )
{
ucmd.buttons &= ~BUTTON_WALKING;
NPC_MoveToGoal( qtrue );
}
else
{
if ( TIMER_Done( NPC, "patrolTime" ))
{
TIMER_Set( NPC, "patrolTime", crandom() * 5000 + 5000 );
}
}
vec3_t dif;
VectorSubtract( g_entities[0].currentOrigin, NPC->currentOrigin, dif );
if ( VectorLengthSquared( dif ) < 256 * 256 )
{
G_SetEnemy( NPC, &g_entities[0] );
}
if ( NPC_CheckEnemyExt( qtrue ) == qfalse )
{
Howler_Idle();
return;
}
}
示例2: Rancor_Patrol
/*
-------------------------
Rancor_Patrol
-------------------------
*/
void Rancor_Patrol( void )
{
NPCS.NPCInfo->localState = LSTATE_CLEAR;
//If we have somewhere to go, then do that
if ( UpdateGoal() )
{
NPCS.ucmd.buttons &= ~BUTTON_WALKING;
NPC_MoveToGoal( qtrue );
}
else
{
if ( TIMER_Done( NPCS.NPC, "patrolTime" ))
{
TIMER_Set( NPCS.NPC, "patrolTime", crandom() * 5000 + 5000 );
}
}
if ( NPC_CheckEnemyExt( qtrue ) == qfalse )
{
Rancor_Idle();
return;
}
Rancor_CheckRoar( NPCS.NPC );
TIMER_Set( NPCS.NPC, "lookForNewEnemy", Q_irand( 5000, 15000 ) );
}
示例3: Howler_Patrol
/*
-------------------------
Howler_Patrol
-------------------------
*/
void Howler_Patrol( void )
{
vector3 dif;
NPCInfo->localState = LSTATE_CLEAR;
//If we have somewhere to go, then do that
if ( UpdateGoal() )
{
ucmd.buttons &= ~BUTTON_WALKING;
NPC_MoveToGoal( qtrue );
}
else
{
if ( TIMER_Done( NPC, "patrolTime" ))
{
TIMER_Set( NPC, "patrolTime", crandom() * 5000 + 5000 );
}
}
//rwwFIXMEFIXME: Care about all clients, not just client 0
VectorSubtract( &g_entities[0].r.currentOrigin, &NPC->r.currentOrigin, &dif );
if ( VectorLengthSquared( &dif ) < 256 * 256 )
{
G_SetEnemy( NPC, &g_entities[0] );
}
if ( NPC_CheckEnemyExt( qtrue ) == qfalse )
{
Howler_Idle();
return;
}
}
示例4: MineMonster_Patrol
/*
-------------------------
MineMonster_Patrol
-------------------------
*/
void MineMonster_Patrol( void )
{
vec3_t dif;
NPCS.NPCInfo->localState = LSTATE_CLEAR;
//If we have somewhere to go, then do that
if ( UpdateGoal() )
{
NPCS.ucmd.buttons &= ~BUTTON_WALKING;
NPC_MoveToGoal( qtrue );
}
else
{
if ( TIMER_Done( NPCS.NPC, "patrolTime" ))
{
TIMER_Set( NPCS.NPC, "patrolTime", Q_flrand(-1.0f, 1.0f) * 5000 + 5000 );
}
}
//rwwFIXMEFIXME: Care about all clients, not just client 0
//OJKFIXME: clietnum 0
VectorSubtract( g_entities[0].r.currentOrigin, NPCS.NPC->r.currentOrigin, dif );
if ( VectorLengthSquared( dif ) < 256 * 256 )
{
G_SetEnemy( NPCS.NPC, &g_entities[0] );
}
if ( NPC_CheckEnemyExt( qtrue ) == qfalse )
{
MineMonster_Idle();
return;
}
}
示例5: MineMonster_Patrol
/*
-------------------------
MineMonster_Patrol
-------------------------
*/
void MineMonster_Patrol( void )
{
NPCInfo->localState = LSTATE_CLEAR;
//If we have somewhere to go, then do that
if ( UpdateGoal() )
{
ucmd.buttons &= ~BUTTON_WALKING;
NPC_MoveToGoal( qtrue );
}
vec3_t dif;
VectorSubtract( g_entities[0].currentOrigin, NPC->currentOrigin, dif );
if ( VectorLengthSquared( dif ) < 256 * 256 )
{
G_SetEnemy( NPC, &g_entities[0] );
}
if ( NPC_CheckEnemyExt( qtrue ) == qfalse )
{
MineMonster_Idle();
return;
}
}
示例6: Howler_Patrol
/*
-------------------------
Howler_Patrol
-------------------------
*/
static void Howler_Patrol( void )
{
NPCInfo->localState = LSTATE_CLEAR;
//If we have somewhere to go, then do that
if ( UpdateGoal() )
{
NPC_Howler_Move( 100 );
}
vec3_t dif;
VectorSubtract( g_entities[0].currentOrigin, NPC->currentOrigin, dif );
if ( VectorLengthSquared( dif ) < 256 * 256 )
{
G_SetEnemy( NPC, &g_entities[0] );
}
if ( NPC_CheckEnemyExt( qtrue ) == qfalse )
{
Howler_Idle();
return;
}
Howler_Attack( 0.0f, qtrue );
}
示例7: Howler_Patrol
//[CoOp]
//Replaced with SP version
static void Howler_Patrol( void )
{
gentity_t *ClosestPlayer = FindClosestPlayer(NPC->r.currentOrigin, NPC->client->enemyTeam);
NPCInfo->localState = LSTATE_CLEAR;
//If we have somewhere to go, then do that
if ( UpdateGoal() )
{
NPC_Howler_Move( 100 );
}
if(ClosestPlayer)
{//attack enemy players that are close.
if(Distance(ClosestPlayer->r.currentOrigin, NPC->r.currentOrigin) < 256 * 256)
{
G_SetEnemy( NPC, ClosestPlayer );
}
}
if ( NPC_CheckEnemyExt( qtrue ) == qfalse )
{
Howler_Idle();
return;
}
Howler_Attack( 0.0f, qtrue );
}
示例8: 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 );
}
示例9: 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 );
}
示例10: 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 );
}
示例11: 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 );
}
}
示例12: 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 );
}
示例13: 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;
}
}
示例14: NPC_BSHirogenAlpha_Attack
void NPC_BSHirogenAlpha_Attack( void )
{
//FIXME: Move to spawn location
NPC->flags |= FL_NO_KNOCKBACK;
if ( TIMER_Done( NPC, "speech" ) == qfalse )
{
NPC_FaceEnemy( qtrue );
return;
}
//Do any taunts if need-be
if ( Hirogen_Speak() )
return;
//Check for the enemy (formality)
if ( NPC_CheckEnemyExt() == qfalse )
{
Hirogen_ActivateShield( qtrue );
NPC_BSHirogenAlpha_Idle();
return;
}
//See if we're currently attacking the player
if ( NPCInfo->standTime > level.time )
{
Hirogen_PauseState();
return;
}
//Turn our shielding on
Hirogen_ActivateShield( qtrue );
//See if the target is visible
if ( NPC_ClearLOS( NPC->enemy ) == qfalse )
{
Hirogen_Hunt();
//This is done to keep the enemy from stopping too soon
if ( DistanceSquared( NPC->currentOrigin, NPCInfo->tempGoal->currentOrigin ) > 96 )
{
NPC_UpdateAngles( qtrue, qtrue );
return;
}
}
//Must be at our goal
if ( DistanceSquared( NPC->currentOrigin, NPCInfo->tempGoal->currentOrigin ) > 96 )
{
Hirogen_Hunt();
return;
}
//Setup our timing information
NPCInfo->pauseTime = level.time + HIROGEN_PREFIRE_DELAY;
NPCInfo->weaponTime = NPCInfo->pauseTime + HIROGEN_FIRE_DURATION;
NPCInfo->standTime = NPCInfo->weaponTime + HIROGEN_RELOAD_PAUSE;
G_SoundOnEnt( NPC, CHAN_WEAPON, alphaSpeech[5] );
NPC_UpdateAngles( qtrue, qtrue );
}
示例15: NPC_BSEmplaced
void NPC_BSEmplaced( void )
{
//Don't do anything if we're hurt
if ( NPC->painDebounceTime > level.time )
{
NPC_UpdateAngles( qtrue, qtrue );
return;
}
if( NPCInfo->scriptFlags & SCF_FIRE_WEAPON )
{
WeaponThink( qtrue );
}
//If we don't have an enemy, just idle
if ( NPC_CheckEnemyExt() == qfalse )
{
if ( !Q_irand( 0, 30 ) )
{
NPCInfo->desiredYaw = NPC->s.angles[1] + Q_irand( -90, 90 );
}
if ( !Q_irand( 0, 30 ) )
{
NPCInfo->desiredPitch = Q_irand( -20, 20 );
}
NPC_UpdateAngles( qtrue, qtrue );
return;
}
qboolean enemyLOS = qfalse;
qboolean enemyCS = qfalse;
qboolean faceEnemy = qfalse;
qboolean shoot = qfalse;
vec3_t impactPos;
if ( NPC_ClearLOS( NPC->enemy ) )
{
enemyLOS = qtrue;
int hit = NPC_ShotEntity( NPC->enemy, impactPos );
gentity_t *hitEnt = &g_entities[hit];
if ( hit == NPC->enemy->s.number || ( hitEnt && hitEnt->takedamage ) )
{//can hit enemy or will hit glass or other minor breakable (or in emplaced gun), so shoot anyway
enemyCS = qtrue;
NPC_AimAdjust( 2 );//adjust aim better longer we have clear shot at enemy
VectorCopy( NPC->enemy->currentOrigin, NPCInfo->enemyLastSeenLocation );
}
}
/*
else if ( gi.inPVS( NPC->enemy->currentOrigin, NPC->currentOrigin ) )
{
NPCInfo->enemyLastSeenTime = level.time;
faceEnemy = qtrue;
NPC_AimAdjust( -1 );//adjust aim worse longer we cannot see enemy
}
*/
if ( enemyLOS )
{//FIXME: no need to face enemy if we're moving to some other goal and he's too far away to shoot?
faceEnemy = qtrue;
}
if ( enemyCS )
{
shoot = qtrue;
}
if ( faceEnemy )
{//face the enemy
NPC_FaceEnemy( qtrue );
}
else
{//we want to face in the dir we're running
NPC_UpdateAngles( qtrue, qtrue );
}
if ( NPCInfo->scriptFlags & SCF_DONT_FIRE )
{
shoot = qfalse;
}
if ( NPC->enemy && NPC->enemy->enemy )
{
if ( NPC->enemy->s.weapon == WP_SABER && NPC->enemy->enemy->s.weapon == WP_SABER )
{//don't shoot at an enemy jedi who is fighting another jedi, for fear of injuring one or causing rogue blaster deflections (a la Obi Wan/Vader duel at end of ANH)
shoot = qfalse;
}
}
if ( shoot )
{//try to shoot if it's time
if( !(NPCInfo->scriptFlags & SCF_FIRE_WEAPON) ) // we've already fired, no need to do it again here
{
WeaponThink( qtrue );
}
}
}