bool CPlayerInput::OnActionSprint(EntityId entityId, const ActionId& actionId, int activationMode, float value) { if (CanMove()) { if (g_pGameCVars->cl_sprintToggle) { if (activationMode == eAAM_OnPress) { if (value > 0.0f) { if (!(m_actions & ACTION_SPRINT)) StartSprint(); else StopSprint(); } } } else { if (value > 0.0f) StartSprint(); else StopSprint(); } } return false; }
void CPlayerInput::PostUpdate() { if (m_actions!=m_lastActions) m_pPlayer->GetGameObject()->ChangedNetworkState( INPUT_ASPECT ); m_actions &= ~(ACTION_LEANLEFT | ACTION_LEANRIGHT); float frameTime(gEnv->pTimer->GetFrameTime()); //bool bFlipPitch=true; float deltaPitch= m_deltaPitch; deltaPitch += m_deltaPitchOnce; m_deltaPitchOnce = 0; m_pCameraInputHelper->PostUpdate(frameTime, deltaPitch); if (m_mouseInput) { m_cameraStickLR = 0; m_cameraStickUD = 0; m_mouseInput = false; } if ( m_actions & ACTION_SPRINT && ( ( g_pGameCVars->cl_sprintTime != 0 && g_pGameCVars->cl_sprintRestingTime != 0 && gEnv->pTimer->GetCurrTime() - m_fSprintTime > g_pGameCVars->cl_sprintTime ) || !( m_actions & ACTION_MOVE ) ) ) StopSprint(); }
void CNPC_Zombine::PrescheduleThink( void ) { GatherGrenadeConditions(); if( gpGlobals->curtime > m_flNextMoanSound ) { if( CanPlayMoanSound() ) { // Classic guy idles instead of moans. IdleSound(); m_flNextMoanSound = gpGlobals->curtime + random->RandomFloat( 10.0, 15.0 ); } else { m_flNextMoanSound = gpGlobals->curtime + random->RandomFloat( 2.5, 5.0 ); } } if ( HasGrenade () ) { CSoundEnt::InsertSound ( SOUND_DANGER, GetAbsOrigin() + GetSmoothedVelocity() * 0.5f , 256, 0.1, this, SOUNDENT_CHANNEL_ZOMBINE_GRENADE ); if( IsSprinting() && GetEnemy() && GetEnemy()->Classify() == CLASS_PLAYER_ALLY_VITAL && HasCondition( COND_SEE_ENEMY ) ) { if( GetAbsOrigin().DistToSqr(GetEnemy()->GetAbsOrigin()) < Square( 144 ) ) { StopSprint(); } } } BaseClass::PrescheduleThink(); }
void CNPC_Zombine::ReleaseGrenade( Vector vPhysgunPos ) { if ( HasGrenade() == false ) return; Vector vDir = vPhysgunPos - m_hGrenade->GetAbsOrigin(); VectorNormalize( vDir ); Activity aActivity; Vector vForward, vRight; GetVectors( &vForward, &vRight, NULL ); float flDotForward = DotProduct( vForward, vDir ); float flDotRight = DotProduct( vRight, vDir ); bool bNegativeForward = false; bool bNegativeRight = false; if ( flDotForward < 0.0f ) { bNegativeForward = true; flDotForward = flDotForward * -1; } if ( flDotRight < 0.0f ) { bNegativeRight = true; flDotRight = flDotRight * -1; } if ( flDotRight > flDotForward ) { if ( bNegativeRight == true ) aActivity = (Activity)ACT_ZOMBINE_GRENADE_FLINCH_WEST; else aActivity = (Activity)ACT_ZOMBINE_GRENADE_FLINCH_EAST; } else { if ( bNegativeForward == true ) aActivity = (Activity)ACT_ZOMBINE_GRENADE_FLINCH_BACK; else aActivity = (Activity)ACT_ZOMBINE_GRENADE_FLINCH_FRONT; } AddGesture( aActivity ); DropGrenade( vec3_origin ); if ( IsSprinting() ) { StopSprint(); } else { Sprint(); } }
void CNPC_Zombine::RunTask( const Task_t *pTask ) { switch ( pTask->iTask ) { case TASK_WAIT_FOR_MOVEMENT_STEP: case TASK_WAIT_FOR_MOVEMENT: { BaseClass::RunTask( pTask ); if ( IsOnFire() && IsSprinting() ) { StopSprint(); } //Only do this if I have an enemy if ( GetEnemy() ) { if ( AllowedToSprint() == true ) { Sprint( ( GetHealth() <= GetMaxHealth() * 0.5f ) ); return; } if ( HasGrenade() ) { if ( IsSprinting() ) { GetNavigator()->SetMovementActivity( (Activity)ACT_ZOMBINE_GRENADE_RUN ); } else { GetNavigator()->SetMovementActivity( (Activity)ACT_ZOMBINE_GRENADE_WALK ); } return; } if ( GetNavigator()->GetMovementActivity() != ACT_WALK ) { if ( IsSprinting() == false ) { GetNavigator()->SetMovementActivity( ACT_WALK ); } } } else { GetNavigator()->SetMovementActivity( ACT_WALK ); } break; } default: { BaseClass::RunTask( pTask ); break; } } }
int CNPC_Zombine::MeleeAttack1Conditions ( float flDot, float flDist ) { int iBase = BaseClass::MeleeAttack1Conditions( flDot, flDist ); if( HasGrenade() ) { //Adrian: stop spriting if we get close enough to melee and we have a grenade //this gives NPCs time to move away from you (before it was almost impossible cause of the high sprint speed) if ( iBase == COND_CAN_MELEE_ATTACK1 ) { StopSprint(); } } return iBase; }
void CNPC_Zombine::TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr, CDmgAccumulator *pAccumulator ) { BaseClass::TraceAttack( info, vecDir, ptr, pAccumulator ); //Only knock grenades off their hands if it's a player doing the damage. if ( info.GetAttacker() && info.GetAttacker()->IsNPC() ) return; if ( info.GetDamageType() & ( DMG_BULLET | DMG_CLUB ) ) { if ( ptr->hitgroup == HITGROUP_LEFTARM ) { if ( HasGrenade() ) { DropGrenade( info.GetDamageForce() ); StopSprint(); } } } }