7#include "GameFramework/FloatingPawnMovement.h"
8#include "GameFramework/PlayerController.h"
9#include "Components/SceneComponent.h"
10#include "NiagaraFunctionLibrary.h"
11#include "NiagaraSystem.h"
22 UNiagaraSystem* NiagaraSystem = LoadObject<UNiagaraSystem>(
nullptr, TEXT(
"/Game/Agrarsense/Particles/WaterAndSnow/NS_Particles.NS_Particles"));
25 NiagaraComponent = UNiagaraFunctionLibrary::SpawnSystemAttached(NiagaraSystem, this->GetRootComponent(),
26 FName(
"NiagaraEmitterSocketName"),
27 FVector(0.0, 0.0, 150.0f), FRotator::ZeroRotator, EAttachLocation::KeepRelativeOffset,
true);
37 SpawnParams.
Transform = GetActorTransform();
43 FVector RelativePosition = FVector(0.0f, 0.0f, 0.0f);
44 float OverlapBoundsSize = 15.0f;
48 SensorParams.
Size = FVector(OverlapBoundsSize, OverlapBoundsSize, OverlapBoundsSize);
57 Super::EndPlay(EndPlayReason);
77 if (!IsPlayerControlled())
85 FVector TargetLocation =
Transform.GetLocation();
86 FVector Direction = GetActorLocation() - TargetLocation;
87 Direction.Normalize();
90 FVector NewLocation = TargetLocation + Direction * 20.0f;
92 FRotator NewRotation = (TargetLocation - NewLocation).ToOrientationRotator();
94 SetActorLocationAndRotation(NewLocation, NewRotation);
98 APlayerController* PlayerController = Cast<APlayerController>(GetController());
101 PlayerController->SetControlRotation(
Transform.Rotator());
109 FTransform
Transform = Actor->GetActorTransform();
124 DetachFromActor(FDetachmentTransformRules::KeepRelativeTransform);
127 FVector Offset = FVector(0.0f, 0.0f, HeightOffset);
129 FVector TargetActorLocation = Actor->GetActorLocation();
131 FVector DirectionToActor = TargetActorLocation - GetActorLocation();
132 DirectionToActor.Normalize();
135 APlayerController* PlayerController = Cast<APlayerController>(GetController());
136 if (PlayerController)
140 DisableInput(PlayerController);
142 FRotator NewRotation = DirectionToActor.ToOrientationRotator();
143 PlayerController->SetControlRotation(NewRotation);
147 FVector NewLocation = TargetActorLocation + DirectionToActor * -DistanceToActor + Offset;
150 USceneComponent* Root = Actor->GetRootComponent();
153 AttachToComponent(Root, FAttachmentTransformRules::KeepRelativeTransform);
154 SetActorLocation(NewLocation);
163 FVector Offset = FVector(0.0f, 0.0f, HeightOffset);
165 FVector DirectionToActor = TargetLocation - GetActorLocation();
166 DirectionToActor.Normalize();
169 APlayerController* PlayerController = Cast<APlayerController>(GetController());
170 if (PlayerController)
172 FRotator NewRotation = DirectionToActor.ToOrientationRotator();
173 PlayerController->SetControlRotation(NewRotation);
177 FVector NewLocation = TargetLocation + DirectionToActor * -DistanceToLocation + Offset;
179 SetActorLocation(NewLocation);
189 FVector TargetLocation = Actor->GetActorLocation();
197 DetachFromActor(FDetachmentTransformRules::KeepRelativeTransform);
203 APlayerController* PlayerController = Cast<APlayerController>(GetController());
205 if (PlayerController)
207 EnableInput(PlayerController);
225 if (FloatingMovement)
227 FloatingMovement->MaxSpeed = MaxSpeed;
234 if (FloatingMovement)
236 return FloatingMovement->MaxSpeed;
245 return Cast<UFloatingPawnMovement>(GetMovementComponent());
252 if (!IsPlayerControlled())
262 SetActorLocationAndRotation(
Transform.GetLocation(),
Transform.GetRotation().Rotator());
266 APlayerController* PlayerController = Cast<APlayerController>(GetController());
267 if (PlayerController)
269 PlayerController->SetControlRotation(
Transform.Rotator());
static void HideComponentForAllCameras(UPrimitiveComponent *PrimitiveComponent)
void SetMaxSpeed(float MaxSpeed=1500.0f)
AOverlapSensor * OverlapSensor
void TeleportToActorFollowLocation(AActor *Actor, const float DistanceToActor=1500.0f, const float HeightOffset=500.0f)
void TeleportToFollowLocation(FVector TargetLocation, const float DistanceToLocation, const float HeightOffset)
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
void StopFollowingAnyActor(bool EnableInputs=true)
FFollowTargetChanged OnFollowTargetChanged
void FollowActor(AActor *Actor, bool DisableInputs=true, const float DistanceToActor=150.0f, const float HeightOffset=10.0f)
void TeleportToActorLocation(const AActor *Actor)
TWeakObjectPtr< AActor > Target
UNiagaraComponent * NiagaraComponent
UFloatingPawnMovement * GetFloatingPawnMovement()
void SetNiagaraComponentVisibility(bool Visible)
virtual void BeginPlay() override
void TeleportSpectator(const FTransform &Transform)
void TeleportToLevelTeleportLocation(FLevelTeleportLocation TeleportLocation)
static AOverlapSensor * SpawnOverlapSensor(const FSensorSpawnParameters SpawnParameters, FOverlapSensorParameters SensorParameters)
FTransform TeleportLocationTransform