Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //////////////////////////////////////////// Jetpack Header
- class TOWER_API AJetpack : public AActor
- {
- GENERATED_BODY()
- public:
- // Sets default values for this actor's properties
- AJetpack(const class FObjectInitializer& OI);
- // Called when the game starts or when spawned
- virtual void BeginPlay() override;
- // Called every frame
- virtual void Tick( float DeltaSeconds ) override;
- UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Jetpack)
- UStaticMeshComponent* jpmc;
- UStaticMesh* jpm;
- };
- ///////////////////////////////////// Jetpack CPP
- // Fill out your copyright notice in the Description page of Project Settings.
- #include "Tower.h"F
- #include "Jetpack.h"
- // Sets default values
- AJetpack::AJetpack(const class FObjectInitializer& OI) : Super(OI)
- {
- // 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;
- static ConstructorHelpers::FObjectFinder<UStaticMesh> jpm(TEXT("StaticMesh '/Game/Content/Models/jet.jet'"));
- jpmc = OI.CreateDefaultSubobject<UStaticMeshComponent>(this, TEXT("Jetpack Mesh"));
- jpmc->SetStaticMesh(jpm.Object);
- jpmc->AttachTo(RootComponent);
- }
- // Called when the game starts or when spawned
- void AJetpack::BeginPlay()
- {
- Super::BeginPlay();
- }
- // Called every frame
- void AJetpack::Tick( float DeltaTime )
- {
- Super::Tick( DeltaTime );
- }
- ///////////////////////////// Character header
- // Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
- #pragma once
- #include "GameFramework/Character.h"
- #include "Jetpack.h"
- #include "TowerCharacter.generated.h"
- UCLASS(config=Game)
- class ATowerCharacter : 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:
- ATowerCharacter(const FObjectInitializer& ObjectInitializer);
- /** 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;
- AJetpack* jet;
- protected:
- /** 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* InputComponent) 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; }
- };
- //////////////////////////////////// Character CPP
- // Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
- #include "Tower.h"
- #include "TowerCharacter.h"
- //////////////////////////////////////////////////////////////////////////
- // ATowerCharacter
- ATowerCharacter::ATowerCharacter(const FObjectInitializer& ObjectInitializer)
- : Super(ObjectInitializer)
- {
- // 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->AttachTo(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->AttachTo(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
- jet->AttachRootComponentTo(this->GetMesh(), "BackSocket", EAttachLocation::SnapToTarget);
- // 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 ATowerCharacter::SetupPlayerInputComponent(class UInputComponent* InputComponent)
- {
- // Set up gameplay key bindings
- check(InputComponent);
- InputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);
- InputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping);
- InputComponent->BindAxis("MoveForward", this, &ATowerCharacter::MoveForward);
- InputComponent->BindAxis("MoveRight", this, &ATowerCharacter::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
- InputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
- InputComponent->BindAxis("TurnRate", this, &ATowerCharacter::TurnAtRate);
- InputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
- InputComponent->BindAxis("LookUpRate", this, &ATowerCharacter::LookUpAtRate);
- // handle touch devices
- InputComponent->BindTouch(IE_Pressed, this, &ATowerCharacter::TouchStarted);
- InputComponent->BindTouch(IE_Released, this, &ATowerCharacter::TouchStopped);
- }
- void ATowerCharacter::TouchStarted(ETouchIndex::Type FingerIndex, FVector Location)
- {
- // jump, but only on the first touch
- if (FingerIndex == ETouchIndex::Touch1)
- {
- Jump();
- }
- }
- void ATowerCharacter::TouchStopped(ETouchIndex::Type FingerIndex, FVector Location)
- {
- if (FingerIndex == ETouchIndex::Touch1)
- {
- StopJumping();
- }
- }
- void ATowerCharacter::TurnAtRate(float Rate)
- {
- // calculate delta for this frame from the rate information
- AddControllerYawInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds());
- }
- void ATowerCharacter::LookUpAtRate(float Rate)
- {
- // calculate delta for this frame from the rate information
- AddControllerPitchInput(Rate * BaseLookUpRate * GetWorld()->GetDeltaSeconds());
- }
- void ATowerCharacter::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 ATowerCharacter::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);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement