// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/Pawn.h" #include "Entropy_PlayerPawn.generated.h" UCLASS() class ENTROPY_API AEntropy_PlayerPawn : public APawn { GENERATED_BODY() public: // Sets default values for this pawn's properties AEntropy_PlayerPawn(); protected: // Called when the game starts or when spawned virtual void BeginPlay() override; public: // Called every frame virtual void Tick(float DeltaTime) override; // Called to bind functionality to input virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; UPROPERTY(EditAnywhere) USceneComponent* SkeletalMesh; /** 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; //INPUT FUNCTIONS void MoveForward (float AxisValue); void MoveRight (float AxisValue); void StartGrowing(); void StopGrowing(); //INPUT VARIABLES FVector CurrentVelocity; }; // // Fill out your copyright notice in the Description page of Project Settings. #include "Entropy_PlayerPawn.h" #include "Camera/CameraComponent.h" #include "Components/InputComponent.h" #include "Components/StaticMeshComponent.h" #include "Components/SkeletalMeshComponent.h" #include "Components/CapsuleComponent.h" #include "GameFramework/SpringArmComponent.h" // Sets default values AEntropy_PlayerPawn::AEntropy_PlayerPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; // Set this pawn to be controlled by the lowest-numbered player AutoPossessPlayer = EAutoReceiveInput::Player0; // Create a dummy root component we can attach things to. RootComponent = CreateDefaultSubobject(TEXT("RootComponent")); // Create a camera and a visible object //UCameraComponent* OurCamera = CreateDefaultSubobject(TEXT("OurCamera")); SkeletalMesh = CreateDefaultSubobject(TEXT("SkeletalMesh")); SkeletalMesh->SetupAttachment(RootComponent); // Create a camera boom (pulls in towards the player if there is a collision) CameraBoom = CreateDefaultSubobject(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(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 } // Called when the game starts or when spawned void AEntropy_PlayerPawn::BeginPlay() { Super::BeginPlay(); } // Called every frame void AEntropy_PlayerPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime); //MOVEMENT if (!CurrentVelocity.IsZero()) { FVector NewLocation = GetActorLocation() + (CurrentVelocity * DeltaTime); SetActorLocation(NewLocation); } } // Called to bind functionality to input void AEntropy_PlayerPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); //Bind Movement Input to Movement Functions InputComponent->BindAxis("MoveForward", this, &AEntropy_PlayerPawn::MoveForward); InputComponent->BindAxis("MoveRight", this, &AEntropy_PlayerPawn::MoveRight); } void AEntropy_PlayerPawn::MoveForward(float AxisValue) { //Move at 100 units per second forward or backward CurrentVelocity.X = FMath::Clamp(AxisValue, -1.0f, 1.0f) * 500.0f; } void AEntropy_PlayerPawn::MoveRight(float AxisValue) { //Move at 100 units per second right or left CurrentVelocity.Y = FMath::Clamp(AxisValue, -1.0f, 1.0f) * 500.0f; }