void ATankPlayerController::GetCrosshairScreenLocation(FVector2D& ScreenLocation) const
{
	int32 ViewportSizeX, ViewportSizeY, ScreenX, ScreenY;
	GetViewportSize(ViewportSizeX, ViewportSizeY);
	ScreenX = ViewportSizeX * CrosshairXLocation;
	ScreenY = ViewportSizeY * CrosshairYLocation;
	ScreenLocation.X = ViewportSizeX * CrosshairXLocation;
	ScreenLocation.Y = ViewportSizeY * CrosshairYLocation;
}
Beispiel #2
0
void ASrPlayerPawn::UpdateSpringArmLength(UWorld* World)
{
	if (World && CameraComponent && CameraBoomComponent)
	{
		auto Viewport = World->GetGameViewport();
		if (Viewport)
		{
			auto ViewportSize = FVector2D::ZeroVector;
			Viewport->GetViewportSize(ViewportSize);
			CameraBoomComponent->TargetArmLength = 0.5f * VisibleHorizontalArea / FMath::Tan(FMath::DegreesToRadians(CameraComponent->FieldOfView / 2.0f));
			CameraBoomComponent->SocketOffset = FVector(0.0f, 0.0f, (ViewportSize.Y / ViewportSize.X) * VisibleHorizontalArea / 2.0f);
		}
	}
}
bool ATankPlayerController::GetSightRayHitLocation(FVector& HitLocation) const
{
	int32 ViewportSizeX, ViewportSizeY;
	GetViewportSize(ViewportSizeX, ViewportSizeY);
	FVector LookDirection;
	FVector2D ScreenLocation = FVector2D(CrosshairXLocation * ViewportSizeX,
		CrosshairYLocation * ViewportSizeY);

	if (GetLookDirection(ScreenLocation, LookDirection))
	{
		return GetLookVectorHitLocation(LookDirection, HitLocation);
	}
	return false;
}
void UFloatingTextWidget::Tick_Implementation(FGeometry myGeometry, float inDeltaTime)
{
	auto curPos = GetSlot(messageLabel)->GetPosition();

	GetSlot(messageLabel)->SetPosition(curPos + FVector2D(0, -FloatingSpeed * inDeltaTime));

	auto opacity = FMath::InterpExpoOut(messageLabel->ColorAndOpacity.GetSpecifiedColor().A,
		FMath::Clamp(curPos.Y / (GetViewportSize().Y / 2), 0.f, 1.f),
		inDeltaTime * FadeSpeed);
	auto color = messageLabel->ColorAndOpacity.GetSpecifiedColor();
	color.A = opacity;
	SetColor(color);

	if (curPos.Y < 0) RemoveFromViewport();
}
// Get world location of linetrace through crosshair, true if hits landscape
bool ATankPlayerController::GetSightRayHitLocation(FVector& HitLocation) const
{
	// Find the crosshair position in pixel coordinates
	int32 ViewportSizeX, ViewportSizeY;
	GetViewportSize(ViewportSizeX, ViewportSizeY);
	auto ScreenLocation = FVector2D(ViewportSizeX * CrosshairXLocation, ViewportSizeY * CrosshairYLocation);

	// "De-project" the screen position of the crosshair to a world direction
	FVector LookDirection;
	if (GetLookDirection(ScreenLocation, LookDirection))
	{
		// Line-trace along that LookDirection, and see what we hit (up to max range)
		return GetLookVectorHitLocation(LookDirection, HitLocation);
	}
	return false;
}
bool ATankPlayerController::GetSightRayHitLocation(FVector& OutHitLocation) const
{
	// Find the crosshair position
	int32 ViewportSizeX, ViewportSizeY;
	GetViewportSize(OUT ViewportSizeX, OUT ViewportSizeY);
	
	FVector2D ScreenLocation = FVector2D(ViewportSizeX * CrossHairXLocation, ViewportSizeY * CrossHairYLocation);
	FVector LookDirection;

	if(GetLookDirection(ScreenLocation, LookDirection))
	{
		return GetLookVectorHitLocation(LookDirection, OUT OutHitLocation);
	}

	// Line trace along that look direction, and see what we hit (up to a max range)
	return false;
}
// Get world location of line trace through crosshair, true if this landscape
bool ATankPlayerController::GetSightRayHitLocation(FVector& HitLocation) const
{
	// Find the crosshair posisiton
	int32 ViewportSizeX, ViewportSizeY;
	GetViewportSize(ViewportSizeX, ViewportSizeY);

	FVector2D ScreenLocation = FVector2D(ViewportSizeX * CrossHairXLocation, ViewportSizeY * CrossHairYLocation);

	// "De-project" the screen position of the crosshair to a world direction
	FVector LookDirection;
	FHitResult HitResult;
	if (GetLookDirection(ScreenLocation, LookDirection))
	{
		return GetLookVectorHitLocation(LookDirection, HitLocation);
	}


	return false;
}
void ABaleroPlayerController::OnRightClickPressed()
{
	UE_LOG(LogTemp, Warning, TEXT("rightclick"));
	FHitResult Hit;
	GetHitResultUnderCursor(ECC_Visibility, false, Hit);
	FVector2D MouseLocation;
	GetMousePosition(MouseLocation.X, MouseLocation.Y);

	int32 ViewportX;
	int32 ViewportY;
	GetViewportSize(ViewportX, ViewportY);

	if (MouseLocation.X > ViewportX * .9f)
	{
		return;
	}


	if (Hit.bBlockingHit)
	{
		UE_LOG(LogTemp, Warning, TEXT("rightclickedsomething"));


		APawn* pawn = Cast<APawn>(Hit.GetActor());
		if (pawn != NULL)
		{
			UE_LOG(LogTemp, Warning, TEXT("clicked pawn"));

			ABaleroCharacter* Unit = Cast<ABaleroCharacter>(pawn);
			if (Unit != NULL)
			{
				MoveToActor(Unit);
			}
		}
		else
		{
			MoveToMouseCursor();
		}
	}


}
bool ATankPlayerController::GetSightRayHitLocation(FVector& HitLocation) const
{
	// Find the crosshair position
	int32 ViewportSizeX, ViewportSizeY;
	GetViewportSize(ViewportSizeX, ViewportSizeY);
	FVector2D ScreenLocation = FVector2D(CrossHairXLocation * ViewportSizeX, 
		CrosshairYLocation * ViewportSizeY);
	// "De-project" the screen position of the crosshair to a world direction
	FVector LookDirection;
	FHitResult HitResult;
	if (GetLookDirection(ScreenLocation, LookDirection))
	{
		// Line-trace along that look direction, and see what we hit (up to max range)
		if (GetLookVectorHitLocation((HitResult), LookDirection, HitLocation))
		{

		}
	}
	return true;
}
//-----------------------------------------------------------------------------
// Updates the relative orientation of the camera, spring mode
//-----------------------------------------------------------------------------
void CWeaponIFMSteadyCam::ComputeMouseRay( const VMatrix &steadyCamToPlayer, Vector &vecForward )
{
	// Create a ray in steadycam space
	float flMaxD = 1.0f / tan( M_PI * m_flFOV / 360.0f );

	// Remap offsets into normalized space
	int w, h;
	GetViewportSize( w, h );

	float flViewX = ( w != 0 ) ? m_vecViewOffset.x / ( w / 2 ) : 0.0f;
	float flViewY = ( h != 0 ) ? m_vecViewOffset.y / ( h / 2 ) : 0.0f;

	flViewX *= flMaxD;
	flViewY *= flMaxD;
				    
	Vector vecSelectionDir( 1.0f, -flViewX, -flViewY );
	VectorNormalize( vecSelectionDir );

	// Rotate the ray into player coordinates
	Vector3DMultiply( steadyCamToPlayer, vecSelectionDir, vecForward );
}
Beispiel #11
0
void ASrPlayerPawn::UpdateWorldToScreenCoef(UWorld* World)
{
	if (World)
	{
		auto Viewport = World->GetGameViewport();
		if (Viewport)
		{
			auto ViewportSize = FVector2D::ZeroVector;
			Viewport->GetViewportSize(ViewportSize);

			if (!ViewportSize.X == 0)
			{
				WorldToScreenCoef = VisibleHorizontalArea / ViewportSize.X;
			}
			else
			{
				WorldToScreenCoef = 1.0f;
			}
		}
	}
}
bool ATankPlayerController::GetSightRayHitLocation( FVector& HitLocation ) const
{
    //Find the crosshair position in pixel coordinates
    int32 ViewportSizeX, ViewportSizeY;
    GetViewportSize(ViewportSizeX, ViewportSizeY);
    
    auto ScreenLocation = FVector2D(ViewportSizeX * CrossHairXLocation, ViewportSizeY * CrossHairYLocation);
    
    FVector LookDirection;
    if(GetLookDirection(ScreenLocation, LookDirection))
    {
        // Line trace along that look direction, and see what we hit (up to max range)
        if(GetLookVectorHitLocation(LookDirection, HitLocation))
        {
            //UE_LOG(LogTemp, Warning, TEXT("Hit Location: %s"), *HitLocation.ToString());
        }
        
    }
    
    return true;
}
void ASECharacterController::Tick(float DeltaSeconds)
{
   Super::Tick(DeltaSeconds);

   if (auto PS = CastChecked<ASECharacterState>(PlayerState))
   {
      auto LocalPlayer = CastChecked<ULocalPlayer>(this->Player);
      auto ViewportClient = LocalPlayer->ViewportClient;
      FViewport* Viewport = ViewportClient->Viewport;
      FVector2D ViewportSize;


      switch (PS->CursorState)
      {
      case ECharacterCursorState::Uncontrolled:
         this->bShowMouseCursor = true;
         Viewport->LockMouseToViewport(false);
         Viewport->CaptureMouse(false);
         break;
      case ECharacterCursorState::Free:
          this->bShowMouseCursor = false;
         Viewport->LockMouseToViewport(true);
         Viewport->CaptureMouse(false);
         break;
      case ECharacterCursorState::Locked:
          this->bShowMouseCursor = false;
         Viewport->LockMouseToViewport(true);
         Viewport->CaptureMouse(true);
         ViewportClient->GetViewportSize(ViewportSize);
         const int32 X = static_cast<int32>(ViewportSize.X * 0.5f);
         const int32 Y = static_cast<int32>(ViewportSize.Y * 0.5f);

         Viewport->SetMouse(X, Y);
         break;
      }
   }
}
void ABaleroPlayerController::OnClickPressed()
{
	UE_LOG(LogTemp, Warning, TEXT("clickpressed"));
	FHitResult Hit;
	GetHitResultUnderCursor(ECC_Visibility, false, Hit);
	FVector2D MouseLocation;
	GetMousePosition(MouseLocation.X, MouseLocation.Y);

	int32 ViewportX;
	int32 ViewportY;
	GetViewportSize(ViewportX, ViewportY);

	if (MouseLocation.X > ViewportX * .9f)
	{
		return;
	}


	if (Hit.bBlockingHit)
	{
		UE_LOG(LogTemp, Warning, TEXT("clickedsomething"));


		APawn* pawn = Cast<APawn>(Hit.GetActor());
		if (pawn != NULL)
		{
			UE_LOG(LogTemp, Warning, TEXT("clicked pawn"));

			ABaleroCharacter* Unit = Cast<ABaleroCharacter>(pawn);
			if (Unit != NULL)
			{
				//deselect the clicked unit
				if (SelectedUnits.Contains(Unit))
				{
					RemoveUnitFromSelection(Unit);
				}
				//add unit to selection
				else
				{
					AddUnitToSelection(Unit);
				}

			}
		}
		else
		{
			//give move command to move
			UE_LOG(LogTemp, Warning, TEXT("MOVE COMMAND_A"));
			for (ABaleroCharacter* Unit : SelectedUnits)
			{
				AAIControllerBase* AIControl = Cast<AAIControllerBase>(Unit->GetController());
				FVector loc = Unit->GetActorLocation();
				UE_LOG(LogTemp, Warning, TEXT("Unit ai: %s , pos: %.1f %.1f %.1f"), *(AActor::GetDebugName(AIControl)), loc.X, loc.Y, loc.Z);

			}
			MoveToMouseCursor();
		}
	}
	else
	{
		UE_LOG(LogTemp, Warning, TEXT("MOVE COMMAND_B"));
		MoveToMouseCursor();
	}
}