bool ATankPlayerController::GetLookDirection(FVector2D ScreenLocation, FVector& LookDirection) const { FVector CameraWorldLocation; return (DeprojectScreenPositionToWorld(ScreenLocation.X, ScreenLocation.Y, CameraWorldLocation, LookDirection)); }
bool ATankPlayerController::GetLookDirection(FVector2D ScreenLocation, FVector& LookDirection) const { FVector CameraWorldLocation; // To be discarded //"de-project" the screen position of the crosshair to a world direction return DeprojectScreenPositionToWorld(ScreenLocation.X, ScreenLocation.Y, CameraWorldLocation, LookDirection); }
bool ATankPlayerController::GetSightRayHitLocation(FVector& HitLocation) const { FVector2D CrosshairLocation; GetCrosshairScreenLocation(CrosshairLocation); FVector WorldLocation; FVector WorldDirection; if (DeprojectScreenPositionToWorld(CrosshairLocation.X, CrosshairLocation.Y, WorldLocation, WorldDirection)) { //UE_LOG(LogTemp, Warning, TEXT("World location: %s World direction: %s"), *WorldLocation.ToString(), *WorldDirection.ToString()); } TArray<FHitResult> HitResults = TArray<FHitResult>(); if (LineTrace(WorldLocation, WorldDirection, HitResults)) { bool aimingThroughPlayer = false; for (int i = 0; i < HitResults.Num(); i++) { FHitResult HitResult = HitResults[i]; if (HitResult.IsValidBlockingHit()) { if (HitResult.GetActor() != GetControlledTank()) { if (aimingThroughPlayer) { UE_LOG(LogTemp, Warning, TEXT("Aiming through player tank actor, next hit is: %s"), *HitResult.ImpactPoint.ToString()); } HitLocation = HitResult.ImpactPoint; return true; }else { aimingThroughPlayer = true; UE_LOG(LogTemp, Warning, TEXT("%i hits, aiming through player tank actor: %s"),HitResults.Num(), *HitResult.ImpactPoint.ToString()); } } else { HitLocation = FVector(0); return false; } } } return false; }