forked from orfeasel/UE4-Cpp-Tutorials
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
269 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
This is the first line of DummyFile1.txt | ||
This is a nice line! |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. | ||
|
||
using UnrealBuildTool; | ||
|
||
public class FilePicker : ModuleRules | ||
{ | ||
public FilePicker(ReadOnlyTargetRules Target) : base(Target) | ||
{ | ||
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; | ||
|
||
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay","SlateCore" }); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,166 @@ | ||
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. | ||
|
||
#include "FilePickerCharacter.h" | ||
#include "HeadMountedDisplayFunctionLibrary.h" | ||
#include "Camera/CameraComponent.h" | ||
#include "Components/CapsuleComponent.h" | ||
#include "Components/InputComponent.h" | ||
#include "GameFramework/CharacterMovementComponent.h" | ||
#include "GameFramework/Controller.h" | ||
#include "GameFramework/SpringArmComponent.h" | ||
|
||
//File picker includes | ||
#include "Developer/DesktopPlatform/Public/IDesktopPlatform.h" | ||
#include "Developer/DesktopPlatform/Public/DesktopPlatformModule.h" | ||
|
||
////////////////////////////////////////////////////////////////////////// | ||
// AFilePickerCharacter | ||
|
||
AFilePickerCharacter::AFilePickerCharacter() | ||
{ | ||
// Set size for collision capsule | ||
GetCapsuleComponent()->InitCapsuleSize(42.f, 96.0f); | ||
|
||
// set our turn rates for input | ||
BaseTurnRate = 45.f; | ||
BaseLookUpRate = 45.f; | ||
|
||
// Don't rotate when the controller rotates. Let that just affect the camera. | ||
bUseControllerRotationPitch = false; | ||
bUseControllerRotationYaw = false; | ||
bUseControllerRotationRoll = false; | ||
|
||
// Configure character movement | ||
GetCharacterMovement()->bOrientRotationToMovement = true; // Character moves in the direction of input... | ||
GetCharacterMovement()->RotationRate = FRotator(0.0f, 540.0f, 0.0f); // ...at this rotation rate | ||
GetCharacterMovement()->JumpZVelocity = 600.f; | ||
GetCharacterMovement()->AirControl = 0.2f; | ||
|
||
// Create a camera boom (pulls in towards the player if there is a collision) | ||
CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom")); | ||
CameraBoom->SetupAttachment(RootComponent); | ||
CameraBoom->TargetArmLength = 300.0f; // The camera follows at this distance behind the character | ||
CameraBoom->bUsePawnControlRotation = true; // Rotate the arm based on the controller | ||
|
||
// Create a follow camera | ||
FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera")); | ||
FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName); // Attach the camera to the end of the boom and let the boom adjust to match the controller orientation | ||
FollowCamera->bUsePawnControlRotation = false; // Camera does not rotate relative to arm | ||
|
||
// Note: The skeletal mesh and anim blueprint references on the Mesh component (inherited from Character) | ||
// are set in the derived blueprint asset named MyCharacter (to avoid direct content references in C++) | ||
} | ||
|
||
////////////////////////////////////////////////////////////////////////// | ||
// Input | ||
|
||
void AFilePickerCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) | ||
{ | ||
// Set up gameplay key bindings | ||
check(PlayerInputComponent); | ||
PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump); | ||
PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping); | ||
|
||
PlayerInputComponent->BindAxis("MoveForward", this, &AFilePickerCharacter::MoveForward); | ||
PlayerInputComponent->BindAxis("MoveRight", this, &AFilePickerCharacter::MoveRight); | ||
|
||
// We have 2 versions of the rotation bindings to handle different kinds of devices differently | ||
// "turn" handles devices that provide an absolute delta, such as a mouse. | ||
// "turnrate" is for devices that we choose to treat as a rate of change, such as an analog joystick | ||
PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput); | ||
PlayerInputComponent->BindAxis("TurnRate", this, &AFilePickerCharacter::TurnAtRate); | ||
PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput); | ||
PlayerInputComponent->BindAxis("LookUpRate", this, &AFilePickerCharacter::LookUpAtRate); | ||
|
||
// handle touch devices | ||
PlayerInputComponent->BindTouch(IE_Pressed, this, &AFilePickerCharacter::TouchStarted); | ||
PlayerInputComponent->BindTouch(IE_Released, this, &AFilePickerCharacter::TouchStopped); | ||
|
||
// VR headset functionality | ||
PlayerInputComponent->BindAction("ResetVR", IE_Pressed, this, &AFilePickerCharacter::OnResetVR); | ||
} | ||
|
||
|
||
void AFilePickerCharacter::OpenFileDialog(const FString& DialogTitle, const FString& DefaultPath, const FString& FileTypes, TArray<FString>& OutFileNames) | ||
{ | ||
if (GEngine) | ||
{ | ||
if (GEngine->GameViewport) | ||
{ | ||
void* ParentWindowHandle = GEngine->GameViewport->GetWindow()->GetNativeWindow()->GetOSWindowHandle(); | ||
IDesktopPlatform* DesktopPlatform = FDesktopPlatformModule::Get(); | ||
if (DesktopPlatform) | ||
{ | ||
//Opening the file picker! | ||
uint32 SelectionFlag = 0; //A value of 0 represents single file selection while a value of 1 represents multiple file selection | ||
DesktopPlatform->OpenFileDialog(ParentWindowHandle, DialogTitle, DefaultPath, FString(""), FileTypes, SelectionFlag, OutFileNames); | ||
} | ||
} | ||
} | ||
} | ||
|
||
void AFilePickerCharacter::PrintData(const FString& File) | ||
{ | ||
TArray<FString> LoadedText; | ||
FFileHelper::LoadFileToStringArray(LoadedText, *File); | ||
for (int32 i = 0; i < LoadedText.Num(); i++) | ||
{ | ||
GLog->Log(LoadedText[i]); | ||
} | ||
} | ||
|
||
void AFilePickerCharacter::OnResetVR() | ||
{ | ||
UHeadMountedDisplayFunctionLibrary::ResetOrientationAndPosition(); | ||
} | ||
|
||
void AFilePickerCharacter::TouchStarted(ETouchIndex::Type FingerIndex, FVector Location) | ||
{ | ||
Jump(); | ||
} | ||
|
||
void AFilePickerCharacter::TouchStopped(ETouchIndex::Type FingerIndex, FVector Location) | ||
{ | ||
StopJumping(); | ||
} | ||
|
||
void AFilePickerCharacter::TurnAtRate(float Rate) | ||
{ | ||
// calculate delta for this frame from the rate information | ||
AddControllerYawInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds()); | ||
} | ||
|
||
void AFilePickerCharacter::LookUpAtRate(float Rate) | ||
{ | ||
// calculate delta for this frame from the rate information | ||
AddControllerPitchInput(Rate * BaseLookUpRate * GetWorld()->GetDeltaSeconds()); | ||
} | ||
|
||
void AFilePickerCharacter::MoveForward(float Value) | ||
{ | ||
if ((Controller != NULL) && (Value != 0.0f)) | ||
{ | ||
// find out which way is forward | ||
const FRotator Rotation = Controller->GetControlRotation(); | ||
const FRotator YawRotation(0, Rotation.Yaw, 0); | ||
|
||
// get forward vector | ||
const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); | ||
AddMovementInput(Direction, Value); | ||
} | ||
} | ||
|
||
void AFilePickerCharacter::MoveRight(float Value) | ||
{ | ||
if ( (Controller != NULL) && (Value != 0.0f) ) | ||
{ | ||
// find out which way is right | ||
const FRotator Rotation = Controller->GetControlRotation(); | ||
const FRotator YawRotation(0, Rotation.Yaw, 0); | ||
|
||
// get right vector | ||
const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); | ||
// add movement in that direction | ||
AddMovementInput(Direction, Value); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved. | ||
|
||
#pragma once | ||
|
||
#include "CoreMinimal.h" | ||
#include "GameFramework/Character.h" | ||
#include "FilePickerCharacter.generated.h" | ||
|
||
UCLASS(config=Game) | ||
class AFilePickerCharacter : public ACharacter | ||
{ | ||
GENERATED_BODY() | ||
|
||
/** Camera boom positioning the camera behind the character */ | ||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true")) | ||
class USpringArmComponent* CameraBoom; | ||
|
||
/** Follow camera */ | ||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true")) | ||
class UCameraComponent* FollowCamera; | ||
public: | ||
AFilePickerCharacter(); | ||
|
||
/** Base turn rate, in deg/sec. Other scaling may affect final turn rate. */ | ||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Camera) | ||
float BaseTurnRate; | ||
|
||
/** Base look up/down rate, in deg/sec. Other scaling may affect final rate. */ | ||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Camera) | ||
float BaseLookUpRate; | ||
|
||
protected: | ||
|
||
/** Resets HMD orientation in VR. */ | ||
void OnResetVR(); | ||
|
||
/** Called for forwards/backward input */ | ||
void MoveForward(float Value); | ||
|
||
/** Called for side to side input */ | ||
void MoveRight(float Value); | ||
|
||
/** | ||
* Called via input to turn at a given rate. | ||
* @param Rate This is a normalized rate, i.e. 1.0 means 100% of desired turn rate | ||
*/ | ||
void TurnAtRate(float Rate); | ||
|
||
/** | ||
* Called via input to turn look up/down at a given rate. | ||
* @param Rate This is a normalized rate, i.e. 1.0 means 100% of desired turn rate | ||
*/ | ||
void LookUpAtRate(float Rate); | ||
|
||
/** Handler for when a touch input begins. */ | ||
void TouchStarted(ETouchIndex::Type FingerIndex, FVector Location); | ||
|
||
/** Handler for when a touch input stops. */ | ||
void TouchStopped(ETouchIndex::Type FingerIndex, FVector Location); | ||
|
||
protected: | ||
// APawn interface | ||
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; | ||
// End of APawn interface | ||
|
||
public: | ||
/** Returns CameraBoom subobject **/ | ||
FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; } | ||
/** Returns FollowCamera subobject **/ | ||
FORCEINLINE class UCameraComponent* GetFollowCamera() const { return FollowCamera; } | ||
|
||
/* | ||
* Opens a file dialog for the specified data | ||
* Filetypes must be in the format of: <File type Description>|*.<actual extension> | ||
* You can combine multiple extensions by placing ";" between them | ||
* For example: Text Files|*.txt|Excel files|*.csv|Image Files|*.png;*.jpg;*.bmp will display 3 lines for 3 different type of files. | ||
*/ | ||
UFUNCTION(BlueprintCallable, Category = "FilePicker") | ||
void OpenFileDialog(const FString& DialogTitle, const FString& DefaultPath, const FString& FileTypes, TArray<FString>& OutFileNames); | ||
|
||
/*Prints the data of the given file*/ | ||
UFUNCTION(BlueprintCallable, Category = "FilePicker") | ||
void PrintData(const FString& File); | ||
}; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# File picker tutorial | ||
|
||
Read the full tutorial here: https://wp.me/p6hvtS-ry |