Add Base Character Movement for Top Down
This commit is contained in:
parent
4b82b341a7
commit
56b84d09c8
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="UserContentModel">
|
||||||
|
<attachedFolders />
|
||||||
|
<explicitIncludes />
|
||||||
|
<explicitExcludes />
|
||||||
|
</component>
|
||||||
|
</project>
|
@ -1,19 +1,15 @@
|
|||||||
[/Script/EngineSettings.GameMapsSettings]
|
[/Script/EngineSettings.GameMapsSettings]
|
||||||
GameDefaultMap=/Game/TopDown/Maps/TopDownMap.TopDownMap
|
GameDefaultMap=/Game/TopDown/Maps/TopDownMap.TopDownMap
|
||||||
EditorStartupMap=/Game/TopDown/Maps/TopDownMap.TopDownMap
|
EditorStartupMap=/Game/TopDown/Maps/TopDownMap.TopDownMap
|
||||||
GlobalDefaultGameMode="/Script/SeagullGame.SeagullGameGameMode"
|
GlobalDefaultGameMode=/Script/SeagullGame.SeagullGameGameMode
|
||||||
|
|
||||||
[/Script/Engine.RendererSettings]
|
[/Script/Engine.RendererSettings]
|
||||||
r.Mobile.EnableNoPrecomputedLightingCSMShader=1
|
r.Mobile.EnableNoPrecomputedLightingCSMShader=1
|
||||||
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
|
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
|
||||||
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=true
|
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=true
|
||||||
|
|
||||||
r.GenerateMeshDistanceFields=True
|
r.GenerateMeshDistanceFields=True
|
||||||
|
|
||||||
r.DynamicGlobalIlluminationMethod=1
|
r.DynamicGlobalIlluminationMethod=1
|
||||||
|
|
||||||
r.ReflectionMethod=1
|
r.ReflectionMethod=1
|
||||||
|
|
||||||
r.Shadow.Virtual.Enable=1
|
r.Shadow.Virtual.Enable=1
|
||||||
|
|
||||||
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
|
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
|
||||||
@ -45,7 +41,6 @@ CompressionQualityModifier=1.000000
|
|||||||
AutoStreamingThreshold=0.000000
|
AutoStreamingThreshold=0.000000
|
||||||
SoundCueCookQualityIndex=-1
|
SoundCueCookQualityIndex=-1
|
||||||
|
|
||||||
|
|
||||||
[/Script/HardwareTargeting.HardwareTargetingSettings]
|
[/Script/HardwareTargeting.HardwareTargetingSettings]
|
||||||
TargetedHardwareClass=Desktop
|
TargetedHardwareClass=Desktop
|
||||||
AppliedTargetedHardwareClass=Desktop
|
AppliedTargetedHardwareClass=Desktop
|
||||||
@ -55,6 +50,8 @@ AppliedDefaultGraphicsPerformance=Maximum
|
|||||||
[/Script/Engine.Engine]
|
[/Script/Engine.Engine]
|
||||||
+ActiveGameNameRedirects=(OldGameName="TP_TopDown",NewGameName="/Script/SeagullGame")
|
+ActiveGameNameRedirects=(OldGameName="TP_TopDown",NewGameName="/Script/SeagullGame")
|
||||||
+ActiveGameNameRedirects=(OldGameName="/Script/TP_TopDown",NewGameName="/Script/SeagullGame")
|
+ActiveGameNameRedirects=(OldGameName="/Script/TP_TopDown",NewGameName="/Script/SeagullGame")
|
||||||
|
+ActiveGameNameRedirects=(OldGameName="/Script/TP_ThirdPerson",NewGameName="/Script/SeagullGame")
|
||||||
|
+ActiveGameNameRedirects=(OldGameName="TP_ThirdPerson",NewGameName="/Script/SeagullGame")
|
||||||
+ActiveClassRedirects=(OldClassName="TP_TopDownPlayerController",NewClassName="SeagullGamePlayerController")
|
+ActiveClassRedirects=(OldClassName="TP_TopDownPlayerController",NewClassName="SeagullGamePlayerController")
|
||||||
+ActiveClassRedirects=(OldClassName="TP_TopDownGameMode",NewClassName="SeagullGameGameMode")
|
+ActiveClassRedirects=(OldClassName="TP_TopDownGameMode",NewClassName="SeagullGameGameMode")
|
||||||
+ActiveClassRedirects=(OldClassName="TP_TopDownCharacter",NewClassName="SeagullGameCharacter")
|
+ActiveClassRedirects=(OldClassName="TP_TopDownCharacter",NewClassName="SeagullGameCharacter")
|
||||||
|
@ -68,6 +68,7 @@ bEnableLegacyInputScales=True
|
|||||||
bEnableMotionControls=True
|
bEnableMotionControls=True
|
||||||
bFilterInputByPlatformUser=False
|
bFilterInputByPlatformUser=False
|
||||||
bShouldFlushPressedKeysOnViewportFocusLost=True
|
bShouldFlushPressedKeysOnViewportFocusLost=True
|
||||||
|
bEnableDynamicComponentInputBinding=True
|
||||||
bAlwaysShowTouchInterface=False
|
bAlwaysShowTouchInterface=False
|
||||||
bShowConsoleOnFourFingerTap=True
|
bShowConsoleOnFourFingerTap=True
|
||||||
bEnableGestureRecognizer=False
|
bEnableGestureRecognizer=False
|
||||||
@ -76,6 +77,18 @@ DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown
|
|||||||
DefaultViewportMouseLockMode=LockOnCapture
|
DefaultViewportMouseLockMode=LockOnCapture
|
||||||
FOVScale=0.011110
|
FOVScale=0.011110
|
||||||
DoubleClickTime=0.200000
|
DoubleClickTime=0.200000
|
||||||
|
+ActionMappings=(ActionName="Jump",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_FaceButton_Bottom)
|
||||||
|
+ActionMappings=(ActionName="Jump",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=SpaceBar)
|
||||||
|
+AxisMappings=(AxisName="Look Up / Down Gamepad",Scale=1.000000,Key=Gamepad_RightY)
|
||||||
|
+AxisMappings=(AxisName="Look Up / Down Mouse",Scale=-1.000000,Key=MouseY)
|
||||||
|
+AxisMappings=(AxisName="Move Forward / Backward",Scale=1.000000,Key=Gamepad_LeftY)
|
||||||
|
+AxisMappings=(AxisName="Move Forward / Backward",Scale=-1.000000,Key=S)
|
||||||
|
+AxisMappings=(AxisName="Move Forward / Backward",Scale=1.000000,Key=W)
|
||||||
|
+AxisMappings=(AxisName="Move Right / Left",Scale=-1.000000,Key=A)
|
||||||
|
+AxisMappings=(AxisName="Move Right / Left",Scale=1.000000,Key=D)
|
||||||
|
+AxisMappings=(AxisName="Move Right / Left",Scale=1.000000,Key=Gamepad_LeftX)
|
||||||
|
+AxisMappings=(AxisName="Turn Right / Left Gamepad",Scale=1.000000,Key=Gamepad_RightX)
|
||||||
|
+AxisMappings=(AxisName="Turn Right / Left Mouse",Scale=1.000000,Key=MouseX)
|
||||||
DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput
|
DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput
|
||||||
DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent
|
DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent
|
||||||
DefaultTouchInterface=None
|
DefaultTouchInterface=None
|
||||||
|
BIN
SeagullGame/Content/TopDown/Blueprints/BP_TopDownCharacter.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/TopDown/Blueprints/BP_TopDownCharacter.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Blueprints/BP_TopDownPlayerController.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/TopDown/Blueprints/BP_TopDownPlayerController.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Blueprints/MySeagullGameGameMode.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/TopDown/Blueprints/MySeagullGameGameMode.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Input/Actions/IAS_Jump.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/TopDown/Input/Actions/IAS_Jump.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Input/Actions/IAS_Look.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/TopDown/Input/Actions/IAS_Look.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Input/Actions/IAS_Move.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/TopDown/Input/Actions/IAS_Move.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Input/Actions/IA_SetDestination_Click.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/TopDown/Input/Actions/IA_SetDestination_Click.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Input/Actions/IA_SetDestination_Touch.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/TopDown/Input/Actions/IA_SetDestination_Touch.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Input/IMC_Default.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/TopDown/Input/IMC_Default.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Input/IMC_DefaultMain.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/TopDown/Input/IMC_DefaultMain.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Maps/TopDownMap.umap
(Stored with Git LFS)
BIN
SeagullGame/Content/TopDown/Maps/TopDownMap.umap
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/SY/Z4CTQ4LG3YV10EKPD0UE8Q.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/SY/Z4CTQ4LG3YV10EKPD0UE8Q.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -1,6 +1,9 @@
|
|||||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
#include "SeagullGameCharacter.h"
|
#include "SeagullGameCharacter.h"
|
||||||
|
|
||||||
|
#include "EnhancedInputComponent.h"
|
||||||
|
#include "EnhancedInputSubsystems.h"
|
||||||
#include "UObject/ConstructorHelpers.h"
|
#include "UObject/ConstructorHelpers.h"
|
||||||
#include "Camera/CameraComponent.h"
|
#include "Camera/CameraComponent.h"
|
||||||
#include "Components/DecalComponent.h"
|
#include "Components/DecalComponent.h"
|
||||||
@ -47,5 +50,66 @@ ASeagullGameCharacter::ASeagullGameCharacter()
|
|||||||
|
|
||||||
void ASeagullGameCharacter::Tick(float DeltaSeconds)
|
void ASeagullGameCharacter::Tick(float DeltaSeconds)
|
||||||
{
|
{
|
||||||
Super::Tick(DeltaSeconds);
|
Super::Tick(DeltaSeconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASeagullGameCharacter::BeginPlay()
|
||||||
|
{
|
||||||
|
Super::BeginPlay();
|
||||||
|
|
||||||
|
//Add Input Mapping Context
|
||||||
|
if (APlayerController* PlayerController = Cast<APlayerController>(Controller))
|
||||||
|
{
|
||||||
|
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer()))
|
||||||
|
{
|
||||||
|
Subsystem->AddMappingContext(DefaultMappingContext, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASeagullGameCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
|
||||||
|
{
|
||||||
|
// Set up action bindings
|
||||||
|
if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent)) {
|
||||||
|
|
||||||
|
//Jumping
|
||||||
|
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Triggered, this, &ACharacter::Jump);
|
||||||
|
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);
|
||||||
|
|
||||||
|
//Moving
|
||||||
|
EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &ASeagullGameCharacter::Move);
|
||||||
|
|
||||||
|
//Looking
|
||||||
|
// EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &ATP_ThirdPersonCharacter::Look);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASeagullGameCharacter::Move(const FInputActionValue& Value)
|
||||||
|
{
|
||||||
|
// input is a Vector2D
|
||||||
|
FVector2D MovementVector = Value.Get<FVector2D>();
|
||||||
|
|
||||||
|
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("Move: %f, %f"), MovementVector.X, MovementVector.Y));
|
||||||
|
|
||||||
|
if (Controller != nullptr)
|
||||||
|
{
|
||||||
|
// find out which way is forward
|
||||||
|
const FRotator Rotation = Controller->GetControlRotation();
|
||||||
|
const FRotator YawRotation(0, Rotation.Yaw, 0);
|
||||||
|
|
||||||
|
// get forward vector
|
||||||
|
const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
|
||||||
|
|
||||||
|
// get right vector
|
||||||
|
const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
|
||||||
|
|
||||||
|
// add movement
|
||||||
|
AddMovementInput(ForwardDirection, MovementVector.Y);
|
||||||
|
AddMovementInput(RightDirection, MovementVector.X);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASeagullGameCharacter::Look(const FInputActionValue& Value)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CoreMinimal.h"
|
#include "CoreMinimal.h"
|
||||||
|
#include "InputActionValue.h"
|
||||||
#include "GameFramework/Character.h"
|
#include "GameFramework/Character.h"
|
||||||
#include "SeagullGameCharacter.generated.h"
|
#include "SeagullGameCharacter.generated.h"
|
||||||
|
|
||||||
@ -17,10 +18,36 @@ public:
|
|||||||
// Called every frame.
|
// Called every frame.
|
||||||
virtual void Tick(float DeltaSeconds) override;
|
virtual void Tick(float DeltaSeconds) override;
|
||||||
|
|
||||||
/** Returns TopDownCameraComponent subobject **/
|
/** Returns TopDownCameraComponent sub-object **/
|
||||||
FORCEINLINE class UCameraComponent* GetTopDownCameraComponent() const { return TopDownCameraComponent; }
|
FORCEINLINE class UCameraComponent* GetTopDownCameraComponent() const { return TopDownCameraComponent; }
|
||||||
/** Returns CameraBoom subobject **/
|
/** Returns CameraBoom sub-object **/
|
||||||
FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; }
|
FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; }
|
||||||
|
/** MappingContext */
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
|
||||||
|
class UInputMappingContext* DefaultMappingContext;
|
||||||
|
|
||||||
|
/** Jump Input Action */
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
|
||||||
|
class UInputAction* JumpAction;
|
||||||
|
|
||||||
|
/** Move Input Action */
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
|
||||||
|
class UInputAction* MoveAction;
|
||||||
|
|
||||||
|
/** Look Input Action */
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
|
||||||
|
class UInputAction* LookAction;
|
||||||
|
|
||||||
|
virtual void BeginPlay() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// APawn interface
|
||||||
|
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
|
||||||
|
/** Called for movement input */
|
||||||
|
void Move(const FInputActionValue& Value);
|
||||||
|
|
||||||
|
/** Called for looking input */
|
||||||
|
void Look(const FInputActionValue& Value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** Top down camera */
|
/** Top down camera */
|
||||||
@ -30,5 +57,5 @@ private:
|
|||||||
/** Camera boom positioning the camera above the character */
|
/** Camera boom positioning the camera above the character */
|
||||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
|
||||||
class USpringArmComponent* CameraBoom;
|
class USpringArmComponent* CameraBoom;
|
||||||
};
|
|
||||||
|
|
||||||
|
};
|
||||||
|
@ -12,10 +12,7 @@
|
|||||||
|
|
||||||
ASeagullGamePlayerController::ASeagullGamePlayerController()
|
ASeagullGamePlayerController::ASeagullGamePlayerController()
|
||||||
{
|
{
|
||||||
bShowMouseCursor = true;
|
|
||||||
DefaultMouseCursor = EMouseCursor::Default;
|
|
||||||
CachedDestination = FVector::ZeroVector;
|
|
||||||
FollowTime = 0.f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ASeagullGamePlayerController::BeginPlay()
|
void ASeagullGamePlayerController::BeginPlay()
|
||||||
@ -23,95 +20,4 @@ void ASeagullGamePlayerController::BeginPlay()
|
|||||||
// Call the base class
|
// Call the base class
|
||||||
Super::BeginPlay();
|
Super::BeginPlay();
|
||||||
|
|
||||||
//Add Input Mapping Context
|
|
||||||
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(GetLocalPlayer()))
|
|
||||||
{
|
|
||||||
Subsystem->AddMappingContext(DefaultMappingContext, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ASeagullGamePlayerController::SetupInputComponent()
|
|
||||||
{
|
|
||||||
// set up gameplay key bindings
|
|
||||||
Super::SetupInputComponent();
|
|
||||||
|
|
||||||
// Set up action bindings
|
|
||||||
if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(InputComponent))
|
|
||||||
{
|
|
||||||
// Setup mouse input events
|
|
||||||
EnhancedInputComponent->BindAction(SetDestinationClickAction, ETriggerEvent::Started, this, &ASeagullGamePlayerController::OnInputStarted);
|
|
||||||
EnhancedInputComponent->BindAction(SetDestinationClickAction, ETriggerEvent::Triggered, this, &ASeagullGamePlayerController::OnSetDestinationTriggered);
|
|
||||||
EnhancedInputComponent->BindAction(SetDestinationClickAction, ETriggerEvent::Completed, this, &ASeagullGamePlayerController::OnSetDestinationReleased);
|
|
||||||
EnhancedInputComponent->BindAction(SetDestinationClickAction, ETriggerEvent::Canceled, this, &ASeagullGamePlayerController::OnSetDestinationReleased);
|
|
||||||
|
|
||||||
// Setup touch input events
|
|
||||||
EnhancedInputComponent->BindAction(SetDestinationTouchAction, ETriggerEvent::Started, this, &ASeagullGamePlayerController::OnInputStarted);
|
|
||||||
EnhancedInputComponent->BindAction(SetDestinationTouchAction, ETriggerEvent::Triggered, this, &ASeagullGamePlayerController::OnTouchTriggered);
|
|
||||||
EnhancedInputComponent->BindAction(SetDestinationTouchAction, ETriggerEvent::Completed, this, &ASeagullGamePlayerController::OnTouchReleased);
|
|
||||||
EnhancedInputComponent->BindAction(SetDestinationTouchAction, ETriggerEvent::Canceled, this, &ASeagullGamePlayerController::OnTouchReleased);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ASeagullGamePlayerController::OnInputStarted()
|
|
||||||
{
|
|
||||||
StopMovement();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Triggered every frame when the input is held down
|
|
||||||
void ASeagullGamePlayerController::OnSetDestinationTriggered()
|
|
||||||
{
|
|
||||||
// We flag that the input is being pressed
|
|
||||||
FollowTime += GetWorld()->GetDeltaSeconds();
|
|
||||||
|
|
||||||
// We look for the location in the world where the player has pressed the input
|
|
||||||
FHitResult Hit;
|
|
||||||
bool bHitSuccessful = false;
|
|
||||||
if (bIsTouch)
|
|
||||||
{
|
|
||||||
bHitSuccessful = GetHitResultUnderFinger(ETouchIndex::Touch1, ECollisionChannel::ECC_Visibility, true, Hit);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bHitSuccessful = GetHitResultUnderCursor(ECollisionChannel::ECC_Visibility, true, Hit);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we hit a surface, cache the location
|
|
||||||
if (bHitSuccessful)
|
|
||||||
{
|
|
||||||
CachedDestination = Hit.Location;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Move towards mouse pointer or touch
|
|
||||||
APawn* ControlledPawn = GetPawn();
|
|
||||||
if (ControlledPawn != nullptr)
|
|
||||||
{
|
|
||||||
FVector WorldDirection = (CachedDestination - ControlledPawn->GetActorLocation()).GetSafeNormal();
|
|
||||||
ControlledPawn->AddMovementInput(WorldDirection, 1.0, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ASeagullGamePlayerController::OnSetDestinationReleased()
|
|
||||||
{
|
|
||||||
// If it was a short press
|
|
||||||
if (FollowTime <= ShortPressThreshold)
|
|
||||||
{
|
|
||||||
// We move there and spawn some particles
|
|
||||||
UAIBlueprintHelperLibrary::SimpleMoveToLocation(this, CachedDestination);
|
|
||||||
UNiagaraFunctionLibrary::SpawnSystemAtLocation(this, FXCursor, CachedDestination, FRotator::ZeroRotator, FVector(1.f, 1.f, 1.f), true, true, ENCPoolMethod::None, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
FollowTime = 0.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Triggered every frame when the input is held down
|
|
||||||
void ASeagullGamePlayerController::OnTouchTriggered()
|
|
||||||
{
|
|
||||||
bIsTouch = true;
|
|
||||||
OnSetDestinationTriggered();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ASeagullGamePlayerController::OnTouchReleased()
|
|
||||||
{
|
|
||||||
bIsTouch = false;
|
|
||||||
OnSetDestinationReleased();
|
|
||||||
}
|
}
|
||||||
|
@ -19,47 +19,11 @@ class ASeagullGamePlayerController : public APlayerController
|
|||||||
public:
|
public:
|
||||||
ASeagullGamePlayerController();
|
ASeagullGamePlayerController();
|
||||||
|
|
||||||
/** Time Threshold to know if it was a short press */
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input)
|
|
||||||
float ShortPressThreshold;
|
|
||||||
|
|
||||||
/** FX Class that we will spawn when clicking */
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input)
|
|
||||||
UNiagaraSystem* FXCursor;
|
|
||||||
|
|
||||||
/** MappingContext */
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
|
|
||||||
class UInputMappingContext* DefaultMappingContext;
|
|
||||||
|
|
||||||
/** Jump Input Action */
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
|
|
||||||
class UInputAction* SetDestinationClickAction;
|
|
||||||
|
|
||||||
/** Jump Input Action */
|
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
|
|
||||||
class UInputAction* SetDestinationTouchAction;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** True if the controlled character should navigate to the mouse cursor. */
|
virtual void BeginPlay() override;
|
||||||
uint32 bMoveToMouseCursor : 1;
|
|
||||||
|
|
||||||
virtual void SetupInputComponent() override;
|
|
||||||
|
|
||||||
// To add mapping context
|
|
||||||
virtual void BeginPlay();
|
|
||||||
|
|
||||||
/** Input handlers for SetDestination action. */
|
|
||||||
void OnInputStarted();
|
|
||||||
void OnSetDestinationTriggered();
|
|
||||||
void OnSetDestinationReleased();
|
|
||||||
void OnTouchTriggered();
|
|
||||||
void OnTouchReleased();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FVector CachedDestination;
|
|
||||||
|
|
||||||
bool bIsTouch; // Is it a touch device
|
|
||||||
float FollowTime; // For how long it has been pressed
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user