From 985ebc0dbb8574a5de76c9b64a8e3bbf11b3efea Mon Sep 17 00:00:00 2001 From: "ALLEN-PC\\acj30" Date: Sun, 9 Feb 2025 10:37:44 -0600 Subject: [PATCH] Allow NPCs to face targets while parented --- sp/src/game/server/ai_basenpc.cpp | 16 ++++++++-------- sp/src/game/server/ai_basenpc_schedule.cpp | 12 ++++++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/sp/src/game/server/ai_basenpc.cpp b/sp/src/game/server/ai_basenpc.cpp index bdface8c..b690f9a0 100644 --- a/sp/src/game/server/ai_basenpc.cpp +++ b/sp/src/game/server/ai_basenpc.cpp @@ -3043,7 +3043,7 @@ void CAI_BaseNPC::SetHeadDirection( const Vector &vTargetPos, float flInterval) //-------------------------------------- // Set head yaw //-------------------------------------- - float flDesiredYaw = VecToYaw(vTargetPos - GetLocalOrigin()) - GetLocalAngles().y; + float flDesiredYaw = VecToYaw(vTargetPos - GetAbsOrigin()) - GetAbsAngles().y; if (flDesiredYaw > 180) flDesiredYaw -= 360; if (flDesiredYaw < -180) @@ -8003,7 +8003,7 @@ void CAI_BaseNPC::NPCInit ( void ) SetGravity(1.0); // Don't change m_takedamage = DAMAGE_YES; - GetMotor()->SetIdealYaw( GetLocalAngles().y ); + GetMotor()->SetIdealYaw( GetAbsAngles().y ); m_iMaxHealth = m_iHealth; m_lifeState = LIFE_ALIVE; SetIdealState( NPC_STATE_IDLE );// Assume npc will be idle, until proven otherwise @@ -9644,14 +9644,14 @@ float CAI_BaseNPC::CalcIdealYaw( const Vector &vecTarget ) vecProjection.x = -vecTarget.y; vecProjection.y = vecTarget.x; - return UTIL_VecToYaw( vecProjection - GetLocalOrigin() ); + return UTIL_VecToYaw( vecProjection - GetAbsOrigin() ); } else if ( GetNavigator()->GetMovementActivity() == ACT_STRAFE_RIGHT ) { vecProjection.x = vecTarget.y; vecProjection.y = vecTarget.x; - return UTIL_VecToYaw( vecProjection - GetLocalOrigin() ); + return UTIL_VecToYaw( vecProjection - GetAbsOrigin() ); } #ifdef MAPBASE // Allow hint nodes to override the yaw without needing to control AI @@ -9662,7 +9662,7 @@ float CAI_BaseNPC::CalcIdealYaw( const Vector &vecTarget ) #endif else { - return UTIL_VecToYaw ( vecTarget - GetLocalOrigin() ); + return UTIL_VecToYaw ( vecTarget - GetAbsOrigin() ); } } @@ -9862,7 +9862,7 @@ void CAI_BaseNPC::HandleAnimEvent( animevent_t *pEvent ) //DevMsg( "Turned!\n" ); SetIdealActivity( ACT_IDLE ); Forget( bits_MEMORY_TURNING ); - SetBoneController( 0, GetLocalAngles().y ); + SetBoneController( 0, GetAbsAngles().y ); IncrementInterpolationFrame(); break; } @@ -11141,7 +11141,7 @@ Vector CAI_BaseNPC::GetShootEnemyDir( const Vector &shootOrigin, bool bNoisy ) else { Vector forward; - AngleVectors( GetLocalAngles(), &forward ); + AngleVectors( GetAbsAngles(), &forward ); return forward; } } @@ -14179,7 +14179,7 @@ bool CAI_BaseNPC::OverrideMove( float flInterval ) float CAI_BaseNPC::VecToYaw( const Vector &vecDir ) { if (vecDir.x == 0 && vecDir.y == 0 && vecDir.z == 0) - return GetLocalAngles().y; + return GetAbsAngles().y; return UTIL_VecToYaw( vecDir ); } diff --git a/sp/src/game/server/ai_basenpc_schedule.cpp b/sp/src/game/server/ai_basenpc_schedule.cpp index 8a8bee88..0520bb71 100644 --- a/sp/src/game/server/ai_basenpc_schedule.cpp +++ b/sp/src/game/server/ai_basenpc_schedule.cpp @@ -964,7 +964,7 @@ void CAI_BaseNPC::StartTurn( float flDeltaYaw ) { float flCurrentYaw; - flCurrentYaw = UTIL_AngleMod( GetLocalAngles().y ); + flCurrentYaw = UTIL_AngleMod( GetAbsAngles().y ); GetMotor()->SetIdealYaw( UTIL_AngleMod( flCurrentYaw + flDeltaYaw ) ); SetTurnActivity(); } @@ -1157,7 +1157,7 @@ void CAI_BaseNPC::StartScriptMoveToTargetTask( int task ) { TaskFail(FAIL_NO_TARGET); } - else if ( (m_hTargetEnt->GetAbsOrigin() - GetLocalOrigin()).Length() < 1 ) + else if ( (m_hTargetEnt->GetAbsOrigin() - GetAbsOrigin()).Length() < 1 ) { TaskComplete(); } @@ -1622,7 +1622,7 @@ void CAI_BaseNPC::StartTask( const Task_t *pTask ) break; case TASK_SET_IDEAL_YAW_TO_CURRENT: - GetMotor()->SetIdealYaw( UTIL_AngleMod( GetLocalAngles().y ) ); + GetMotor()->SetIdealYaw( UTIL_AngleMod( GetAbsAngles().y ) ); TaskComplete(); break; @@ -1776,7 +1776,7 @@ void CAI_BaseNPC::StartTask( const Task_t *pTask ) { TaskFail(FAIL_NO_TARGET); } - else if ( (pTarget->GetAbsOrigin() - GetLocalOrigin()).Length() < 1 ) + else if ( (pTarget->GetAbsOrigin() - GetAbsOrigin()).Length() < 1 ) { TaskComplete(); } @@ -3021,7 +3021,7 @@ void CAI_BaseNPC::StartTask( const Task_t *pTask ) { if ( m_hTargetEnt != NULL ) { - GetMotor()->SetIdealYaw( UTIL_AngleMod( m_hTargetEnt->GetLocalAngles().y ) ); + GetMotor()->SetIdealYaw( UTIL_AngleMod( m_hTargetEnt->GetAbsAngles().y ) ); } if ( m_scriptState != SCRIPT_CUSTOM_MOVE_TO_MARK ) @@ -3350,7 +3350,7 @@ void CAI_BaseNPC::RunTask( const Task_t *pTask ) pTarget = GetEnemy(); if ( pTarget ) { - GetMotor()->SetIdealYawAndUpdate( pTarget->GetAbsOrigin() - GetLocalOrigin() , AI_KEEP_YAW_SPEED ); + GetMotor()->SetIdealYawAndUpdate( pTarget->GetAbsOrigin() - GetAbsOrigin(), AI_KEEP_YAW_SPEED ); } if ( IsActivityFinished() )