FVector2D FStrategyHelpers::Project(FVector WorldPosition, ULocalPlayer* Player) { FVector worldPoint = WorldPosition; FVector2D retVal = FVector2D::ZeroVector; if (Player != NULL && Player->ViewportClient != NULL && Player->ViewportClient->Viewport != NULL && Player->PlayerController != NULL) { //get the projection data FSceneViewProjectionData ProjectionData; if (Player->GetProjectionData(Player->ViewportClient->Viewport, eSSP_FULL, /*out*/ ProjectionData)) { FMatrix viewProjectionMatrix = ProjectionData.ProjectionMatrix * ProjectionData.ViewMatrix; //worldPoint = viewProjectionMatrix * worldPoint; worldPoint.X = viewProjectionMatrix.M[0][0] * worldPoint.X + viewProjectionMatrix.M[0][1] * worldPoint.Y + viewProjectionMatrix.M[0][2] * worldPoint.Z + viewProjectionMatrix.M[0][3]; worldPoint.Y = viewProjectionMatrix.M[1][0] * worldPoint.X + viewProjectionMatrix.M[1][1] * worldPoint.Y + viewProjectionMatrix.M[1][2] * worldPoint.Z + viewProjectionMatrix.M[1][3]; worldPoint.Z = viewProjectionMatrix.M[2][0] * worldPoint.X + viewProjectionMatrix.M[2][1] * worldPoint.Y + viewProjectionMatrix.M[2][2] * worldPoint.Z + viewProjectionMatrix.M[2][3]; FIntRect theViewRect = ProjectionData.GetViewRect(); int width = theViewRect.Width(); int height = theViewRect.Height(); retVal.X = (int)((((worldPoint.X + 1) / 2.0) * width)+0.5f); retVal.Y = (int)((((1 - worldPoint.Y) / 2.0) * height)+0.5f); } } return retVal; }