Activity CSDKPlayerAnimState::CalcMainActivity() { Activity idealActivity = ACT_DA_STAND_IDLE; if (ShouldUseAimInAnims()) idealActivity = ACT_DA_STAND_AIM; else if (m_pSDKPlayer->IsWeaponReady()) idealActivity = ACT_DA_STAND_READY; if (HandleWallClimb (idealActivity) || HandleWallFlip (idealActivity) || HandleDiving( idealActivity ) || HandleJumping( idealActivity ) || #if defined ( SDK_USE_PRONE ) //Tony; handle these before ducking !! HandleProneTransition( idealActivity ) || HandleProne( idealActivity ) || #endif HandleRollTransition( idealActivity ) || HandleSlideTransition( idealActivity ) || HandleSliding( idealActivity ) || HandleDucking( idealActivity ) || HandleSwimming( idealActivity ) || HandleDying( idealActivity ) #if defined ( SDK_USE_SPRINTING ) || HandleSprinting( idealActivity ) #endif ) { // intentionally blank } else { HandleMoving( idealActivity ); } ShowDebugInfo(); // Client specific. #ifdef CLIENT_DLL if ( anim_showmainactivity.GetBool() ) { DebugShowActivity( idealActivity ); } #endif return idealActivity; }
bool UProjectileMovementComponent::HandleDeflection(FHitResult& Hit, const FVector& OldVelocity, const uint32 NumBounces, float& SubTickTimeRemaining) { const FVector Normal = ConstrainNormalToPlane(Hit.Normal); // Multiple hits within very short time period? const bool bMultiHit = (PreviousHitTime < 1.f && Hit.Time <= KINDA_SMALL_NUMBER); // if velocity still into wall (after HandleBlockingHit() had a chance to adjust), slide along wall const float DotTolerance = 0.01f; bIsSliding = (bMultiHit && FVector::Coincident(PreviousHitNormal, Normal)) || ((Velocity.GetSafeNormal() | Normal) <= DotTolerance); if (bIsSliding) { if (bMultiHit && (PreviousHitNormal | Normal) <= 0.f) { //90 degree or less corner, so use cross product for direction FVector NewDir = (Normal ^ PreviousHitNormal); NewDir = NewDir.GetSafeNormal(); Velocity = Velocity.ProjectOnToNormal(NewDir); if ((OldVelocity | Velocity) < 0.f) { Velocity *= -1.f; } Velocity = ConstrainDirectionToPlane(Velocity); } else { //adjust to move along new wall Velocity = ComputeSlideVector(Velocity, 1.f, Normal, Hit); } // Check min velocity. if (Velocity.SizeSquared() < FMath::Square(BounceVelocityStopSimulatingThreshold)) { StopSimulating(Hit); return false; } // Velocity is now parallel to the impact surface. if (SubTickTimeRemaining > KINDA_SMALL_NUMBER) { if (!HandleSliding(Hit, SubTickTimeRemaining)) { return false; } } } return true; }