//TODO: This is still an awful way to do this and we should scrap this task or do it right. void UAbilityTask_MoveToLocation::TickTask(float DeltaTime) { if (bIsFinished) { return; } Super::TickTask(DeltaTime); AActor* MyActor = GetAvatarActor(); if (MyActor) { ACharacter* MyCharacter = Cast<ACharacter>(MyActor); if (MyCharacter) { UCharacterMovementComponent* CharMoveComp = Cast<UCharacterMovementComponent>(MyCharacter->GetMovementComponent()); if (CharMoveComp) { CharMoveComp->SetMovementMode(MOVE_Custom, 0); } } float CurrentTime = GetWorld()->GetTimeSeconds(); if (CurrentTime >= TimeMoveWillEnd) { bIsFinished = true; // Teleport in attempt to find a valid collision spot MyActor->TeleportTo(TargetLocation, MyActor->GetActorRotation()); if (!bIsSimulating) { MyActor->ForceNetUpdate(); OnTargetLocationReached.Broadcast(); EndTask(); } } else { float MoveFraction = (CurrentTime - TimeMoveStarted) / DurationOfMovement; if (LerpCurve) { MoveFraction = LerpCurve->GetFloatValue(MoveFraction); } MyActor->SetActorLocation(FMath::Lerp<FVector, float>(StartLocation, TargetLocation, MoveFraction)); } } else { bIsFinished = true; EndTask(); } }
void AGameModeBase::SetPlayerDefaults(APawn* PlayerPawn) { PlayerPawn->SetPlayerDefaults(); #if !UE_WITH_PHYSICS // If there is no physics, set to flying by default UCharacterMovementComponent* CharacterMovement = Cast<UCharacterMovementComponent>(NewPlayer->GetPawn()->GetMovementComponent()); if (CharacterMovement) { CharacterMovement->bCheatFlying = true; CharacterMovement->SetMovementMode(MOVE_Flying); } #endif //!UE_WITH_PHYSICS }
void UAbilityTask_MoveToLocation::OnDestroy(bool AbilityIsEnding) { AActor* MyActor = GetAvatarActor(); if (MyActor) { ACharacter* MyCharacter = Cast<ACharacter>(MyActor); if (MyCharacter) { UCharacterMovementComponent* CharMoveComp = Cast<UCharacterMovementComponent>(MyCharacter->GetMovementComponent()); if (CharMoveComp && CharMoveComp->MovementMode == MOVE_Custom) { CharMoveComp->SetMovementMode(MOVE_Falling); } } } Super::OnDestroy(AbilityIsEnding); }