document.write("
// Fill out your copyright notice in the Description page of Project Settings.
#include "AbilityTask_MoveCharacterToCursor.h"
#include "Dandelion/Sandbox/Abilities/DandelionGameplayAbility.h"
#include "Dandelion/Sandbox/PlayerControllers/DandelionPlayerController.h"
UAbilityTask_MoveCharacterToCursor* UAbilityTask_MoveCharacterToCursor::MoveCharacterToCursor(
UDandelionGameplayAbility* OwningAbility,
const FName TaskInstanceName
)
{
UAbilityTask_MoveCharacterToCursor* NewTaskInstance =
NewAbilityTask<UAbilityTask_MoveCharacterToCursor>(OwningAbility, TaskInstanceName);
NewTaskInstance->InitializeBaseMoveTask(OwningAbility);
return NewTaskInstance;
}
void UAbilityTask_MoveCharacterToCursor::Activate()
{
TargetLocation = GetPositionUnderCursor();
Super::Activate();
}
FVector UAbilityTask_MoveCharacterToCursor::GetPositionUnderCursor() const
{
FHitResult Hit;
// TODO: Make the trace channel a parameter for this task?
if (!PlayerController->GetHitResultUnderCursor(ECC_Visibility, true, Hit))
{
UE_LOG(
LogGameplayTasks,
Verbose,
TEXT("%s: Failed to register a hit under cursor in GetPositionUnderCursor."),
*GetFullNameSafe(this)
);
// TODO: Maybe make it possible to pass in a fallback location? Possibly just abort the task?
return FVector::Zero();
}
return Hit.Location;
}
AbilityTask_MoveCharacterToCursor.cpp - Snippet hosted by \"Cacher\"
");