Add Item Pickup and Highlight for Item Stealing
This commit is contained in:
parent
0c96707ff9
commit
97a23666d8
6
SeagullGame/.idea/.idea.SeagullGame.dir/.idea/vcs.xml
Normal file
6
SeagullGame/.idea/.idea.SeagullGame.dir/.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
BIN
SeagullGame/Content/AI/AIC_Enemy.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/AI/AIC_Enemy.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/AI/AI_Enemy.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/AI/AI_Enemy.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/AI/BB_Enemy.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/AI/BB_Enemy.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/AI/BTT_Chase.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/AI/BTT_Chase.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/AI/BTT_FindRandomPatrol.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/AI/BTT_FindRandomPatrol.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/AI/BT_Enemy.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/AI/BT_Enemy.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/Fonts/upheavtt.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/Fonts/upheavtt.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/Fonts/upheavtt_Font.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/Fonts/upheavtt_Font.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/Items/BPI_Cube.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/Items/BPI_Cube.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/Items/BPI_Cube_NP.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/Items/BPI_Cube_NP.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/ThirdPerson/AI/AIC_Enemy.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/ThirdPerson/AI/AIC_Enemy.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/ThirdPerson/AI/AI_Enemy.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/ThirdPerson/AI/AI_Enemy.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/ThirdPerson/AI/BB_Enemy.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/ThirdPerson/AI/BB_Enemy.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/ThirdPerson/AI/BTT_Chase.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/ThirdPerson/AI/BTT_Chase.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/ThirdPerson/AI/BTT_FindRandomPatrol.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/ThirdPerson/AI/BTT_FindRandomPatrol.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/ThirdPerson/AI/BT_Enemy.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/ThirdPerson/AI/BT_Enemy.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Blueprints/BP_SeagullPlayer.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/TopDown/Blueprints/BP_SeagullPlayer.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Blueprints/SKM_Quinn_Socket.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/TopDown/Blueprints/SKM_Quinn_Socket.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Input/Actions/IAS_Pickup.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/TopDown/Input/Actions/IAS_Pickup.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/TopDown/Input/IMC_DefaultMain.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/TopDown/Input/IMC_DefaultMain.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/__ExternalActors__/TopDown/Maps/TopDownMap/3/TG/E6S3QC0D0NIW660W8K9AY7.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/__ExternalActors__/TopDown/Maps/TopDownMap/3/TG/E6S3QC0D0NIW660W8K9AY7.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/__ExternalActors__/TopDown/Maps/TopDownMap/6/25/Y3O5AZUCBRGIK0G1642MVL.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/__ExternalActors__/TopDown/Maps/TopDownMap/6/25/Y3O5AZUCBRGIK0G1642MVL.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/__ExternalActors__/TopDown/Maps/TopDownMap/6/VI/ESHAVRHFZFA2JDR9ZAQIOE.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/__ExternalActors__/TopDown/Maps/TopDownMap/6/VI/ESHAVRHFZFA2JDR9ZAQIOE.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SeagullGame/Content/__ExternalActors__/TopDown/Maps/TopDownMap/A/4W/BK95DJBD0PIVE7JMNNMPSX.uasset
(Stored with Git LFS)
Normal file
BIN
SeagullGame/Content/__ExternalActors__/TopDown/Maps/TopDownMap/A/4W/BK95DJBD0PIVE7JMNNMPSX.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SeagullGame/Content/__ExternalActors__/TopDown/Maps/TopDownMap/C/EK/K75411SFI66JADVMYUHSE9.uasset
(Stored with Git LFS)
BIN
SeagullGame/Content/__ExternalActors__/TopDown/Maps/TopDownMap/C/EK/K75411SFI66JADVMYUHSE9.uasset
(Stored with Git LFS)
Binary file not shown.
26
SeagullGame/Source/SeagullGame/ItemActor.cpp
Normal file
26
SeagullGame/Source/SeagullGame/ItemActor.cpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "ItemActor.h"
|
||||||
|
|
||||||
|
|
||||||
|
// Sets default values
|
||||||
|
AItemActor::AItemActor()
|
||||||
|
{
|
||||||
|
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
|
||||||
|
PrimaryActorTick.bCanEverTick = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called when the game starts or when spawned
|
||||||
|
void AItemActor::BeginPlay()
|
||||||
|
{
|
||||||
|
Super::BeginPlay();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called every frame
|
||||||
|
void AItemActor::Tick(float DeltaTime)
|
||||||
|
{
|
||||||
|
Super::Tick(DeltaTime);
|
||||||
|
}
|
||||||
|
|
28
SeagullGame/Source/SeagullGame/ItemActor.h
Normal file
28
SeagullGame/Source/SeagullGame/ItemActor.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "GameFramework/Actor.h"
|
||||||
|
#include "ItemActor.generated.h"
|
||||||
|
|
||||||
|
UCLASS()
|
||||||
|
class SEAGULLGAME_API AItemActor : public AActor
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Sets default values for this actor's properties
|
||||||
|
AItemActor();
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Item")
|
||||||
|
TSubclassOf<AItemActor> ItemNoPhysics;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// Called when the game starts or when spawned
|
||||||
|
virtual void BeginPlay() override;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Called every frame
|
||||||
|
virtual void Tick(float DeltaTime) override;
|
||||||
|
};
|
@ -4,8 +4,10 @@
|
|||||||
|
|
||||||
#include "EnhancedInputComponent.h"
|
#include "EnhancedInputComponent.h"
|
||||||
#include "EnhancedInputSubsystems.h"
|
#include "EnhancedInputSubsystems.h"
|
||||||
|
#include "ItemActor.h"
|
||||||
#include "UObject/ConstructorHelpers.h"
|
#include "UObject/ConstructorHelpers.h"
|
||||||
#include "Camera/CameraComponent.h"
|
#include "Camera/CameraComponent.h"
|
||||||
|
#include "Components/BoxComponent.h"
|
||||||
#include "Components/DecalComponent.h"
|
#include "Components/DecalComponent.h"
|
||||||
#include "Components/CapsuleComponent.h"
|
#include "Components/CapsuleComponent.h"
|
||||||
#include "GameFramework/CharacterMovementComponent.h"
|
#include "GameFramework/CharacterMovementComponent.h"
|
||||||
@ -51,6 +53,27 @@ ASeagullGameCharacter::ASeagullGameCharacter()
|
|||||||
void ASeagullGameCharacter::Tick(float DeltaSeconds)
|
void ASeagullGameCharacter::Tick(float DeltaSeconds)
|
||||||
{
|
{
|
||||||
Super::Tick(DeltaSeconds);
|
Super::Tick(DeltaSeconds);
|
||||||
|
if (!IsValid(PickupBox)) return;
|
||||||
|
|
||||||
|
TArray<AActor*> OverlappingActors;
|
||||||
|
PickupBox->GetOverlappingActors(OverlappingActors, AItemActor::StaticClass());
|
||||||
|
float ClosestDistance = 0;
|
||||||
|
for (AActor* Actor : OverlappingActors)
|
||||||
|
{
|
||||||
|
if (Actor == this) continue;
|
||||||
|
float Distance = FVector::Dist(Actor->GetActorLocation(), GetActorLocation());
|
||||||
|
if (ClosestItemActor == nullptr || Distance < ClosestDistance)
|
||||||
|
{
|
||||||
|
if (IsValid(ClosestItemActor))
|
||||||
|
{
|
||||||
|
Cast<UMeshComponent>(ClosestItemActor->GetComponentByClass(UMeshComponent::StaticClass()))->SetRenderCustomDepth(false);
|
||||||
|
}
|
||||||
|
ClosestItemActor = Actor;
|
||||||
|
ClosestDistance = Distance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!IsValid(ClosestItemActor)) return;
|
||||||
|
Cast<UMeshComponent>(ClosestItemActor->GetComponentByClass(UMeshComponent::StaticClass()))->SetRenderCustomDepth(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ASeagullGameCharacter::BeginPlay()
|
void ASeagullGameCharacter::BeginPlay()
|
||||||
@ -65,6 +88,9 @@ void ASeagullGameCharacter::BeginPlay()
|
|||||||
Subsystem->AddMappingContext(DefaultMappingContext, 0);
|
Subsystem->AddMappingContext(DefaultMappingContext, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
PickupBox = Cast<UBoxComponent>(GetComponentByClass(UBoxComponent::StaticClass()));
|
||||||
|
PickupBox->OnComponentBeginOverlap.AddDynamic(this, &ASeagullGameCharacter::OnPickupBoxBeginOverlap);
|
||||||
|
PickupBox->OnComponentEndOverlap.AddDynamic(this, &ASeagullGameCharacter::OnPickupBoxEndOverlap);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ASeagullGameCharacter::DamagePlayer(float DamageAmount)
|
void ASeagullGameCharacter::DamagePlayer(float DamageAmount)
|
||||||
@ -86,6 +112,65 @@ void ASeagullGameCharacter::HealPlayer(float HealAmount)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ASeagullGameCharacter::StartGame()
|
||||||
|
{
|
||||||
|
if (GetWorld()->GetTimerManager().IsTimerActive(GameTimerHandle))
|
||||||
|
{
|
||||||
|
GetWorld()->GetTimerManager().ClearTimer(GameTimerHandle);
|
||||||
|
}
|
||||||
|
GetWorld()->GetTimerManager().SetTimer(GameTimerHandle, this, &ASeagullGameCharacter::EndGame, GameTime, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASeagullGameCharacter::EndGame()
|
||||||
|
{
|
||||||
|
OnGameEnd.Broadcast();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASeagullGameCharacter::PickupItem()
|
||||||
|
{
|
||||||
|
if (IsValid(CurrentItem))
|
||||||
|
{
|
||||||
|
DropItem();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
USkeletalMeshComponent* MeshComponent = GetMesh();
|
||||||
|
if (!MeshComponent->HasAnySockets()) return;
|
||||||
|
if (!IsValid(ClosestItemActor)) return;
|
||||||
|
CurrentItem = GetWorld()->SpawnActor(Cast<AItemActor>(ClosestItemActor)->ItemNoPhysics);
|
||||||
|
CurrentItem->AttachToComponent(MeshComponent, FAttachmentTransformRules::SnapToTargetNotIncludingScale, "ItemSocket");
|
||||||
|
CurrentItem->SetActorEnableCollision(false);
|
||||||
|
ClosestItemActor->Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASeagullGameCharacter::DropItem()
|
||||||
|
{
|
||||||
|
if (!IsValid(CurrentItem)) return;
|
||||||
|
USkeletalMeshComponent* MeshComponent = GetMesh();
|
||||||
|
CurrentItem->DetachFromActor(FDetachmentTransformRules::KeepWorldTransform);
|
||||||
|
FVector DropLocation = MeshComponent->GetSocketLocation("ItemSocket");
|
||||||
|
DropLocation += GetActorForwardVector() * 100;
|
||||||
|
GetWorld()->SpawnActor(Cast<AItemActor>(CurrentItem)->ItemNoPhysics, &DropLocation);
|
||||||
|
CurrentItem->Destroy();
|
||||||
|
CurrentItem = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASeagullGameCharacter::OnPickupBoxBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASeagullGameCharacter::OnPickupBoxEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex)
|
||||||
|
{
|
||||||
|
if (!Cast<AItemActor>(OtherActor)) return;
|
||||||
|
if (IsValid(OtherActor))
|
||||||
|
{
|
||||||
|
if (OtherActor == ClosestItemActor)
|
||||||
|
{
|
||||||
|
Cast<UMeshComponent>(OtherActor->GetComponentByClass(UMeshComponent::StaticClass()))->SetRenderCustomDepth(false);
|
||||||
|
ClosestItemActor = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ASeagullGameCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
|
void ASeagullGameCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
|
||||||
{
|
{
|
||||||
// Set up action bindings
|
// Set up action bindings
|
||||||
@ -100,6 +185,9 @@ void ASeagullGameCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInp
|
|||||||
|
|
||||||
//Looking
|
//Looking
|
||||||
// EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &ATP_ThirdPersonCharacter::Look);
|
// EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &ATP_ThirdPersonCharacter::Look);
|
||||||
|
|
||||||
|
//Pickup
|
||||||
|
EnhancedInputComponent->BindAction(PickupAction, ETriggerEvent::Started, this, &ASeagullGameCharacter::PickupItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
#include "CoreMinimal.h"
|
#include "CoreMinimal.h"
|
||||||
#include "InputActionValue.h"
|
#include "InputActionValue.h"
|
||||||
|
#include "ItemActor.h"
|
||||||
|
#include "Components/BoxComponent.h"
|
||||||
#include "GameFramework/Character.h"
|
#include "GameFramework/Character.h"
|
||||||
#include "SeagullGameCharacter.generated.h"
|
#include "SeagullGameCharacter.generated.h"
|
||||||
|
|
||||||
@ -15,8 +17,12 @@ class ASeagullGameCharacter : public ACharacter
|
|||||||
public:
|
public:
|
||||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnPlayerDeath);
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnPlayerDeath);
|
||||||
|
|
||||||
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnGameEnd);
|
||||||
|
|
||||||
UPROPERTY(BlueprintAssignable, Category = "Events")
|
UPROPERTY(BlueprintAssignable, Category = "Events")
|
||||||
FOnPlayerDeath OnPlayerDeath;
|
FOnPlayerDeath OnPlayerDeath;
|
||||||
|
UPROPERTY(BlueprintAssignable, Category = "Events")
|
||||||
|
FOnGameEnd OnGameEnd;
|
||||||
|
|
||||||
ASeagullGameCharacter();
|
ASeagullGameCharacter();
|
||||||
|
|
||||||
@ -35,6 +41,10 @@ public:
|
|||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
|
||||||
class UInputAction* JumpAction;
|
class UInputAction* JumpAction;
|
||||||
|
|
||||||
|
/** Pickup Input Action */
|
||||||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
|
||||||
|
class UInputAction* PickupAction;
|
||||||
|
|
||||||
/** Move Input Action */
|
/** Move Input Action */
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
|
||||||
class UInputAction* MoveAction;
|
class UInputAction* MoveAction;
|
||||||
@ -57,6 +67,32 @@ public:
|
|||||||
UFUNCTION(BlueprintCallable, Category = "Health")
|
UFUNCTION(BlueprintCallable, Category = "Health")
|
||||||
void HealPlayer(float HealAmount);
|
void HealPlayer(float HealAmount);
|
||||||
|
|
||||||
|
UFUNCTION(Exec, BlueprintCallable, Category = "General")
|
||||||
|
void StartGame();
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "General")
|
||||||
|
void EndGame();
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "General")
|
||||||
|
FTimerHandle GameTimerHandle;
|
||||||
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "General")
|
||||||
|
float GameTime = 120;
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "Item")
|
||||||
|
void PickupItem();
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "Item")
|
||||||
|
void DropItem();
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "Item")
|
||||||
|
void OnPickupBoxBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp,
|
||||||
|
int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "Item")
|
||||||
|
void OnPickupBoxEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp,
|
||||||
|
int32 OtherBodyIndex);
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "Item")
|
||||||
|
AActor* CurrentItem;
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "Item")
|
||||||
|
AActor* ClosestItemActor;
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "Item")
|
||||||
|
UBoxComponent* PickupBox;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// APawn interface
|
// APawn interface
|
||||||
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
|
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
|
||||||
|
Loading…
Reference in New Issue
Block a user