Implemented Landing Zone Entering Functionality and Space Ship Controls
This commit is contained in:
parent
7cc605b5e6
commit
1dacb4f130
@ -9,12 +9,12 @@
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="42162083-13f4-4956-90b7-146c4a08f785" name="Changes" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/.idea.EndlessVendetta/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.EndlessVendetta/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_GoToParkourRoom.uasset" beforeDir="false" afterPath="$PROJECT_DIR$/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_GoToParkourRoom.uasset" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Content/BountySystem/ControlsTutorial/Bounty/MB_Training.uasset" beforeDir="false" afterPath="$PROJECT_DIR$/Content/BountySystem/ControlsTutorial/Bounty/MB_Training.uasset" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset" beforeDir="false" afterPath="$PROJECT_DIR$/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Content/Levels/ControlTutorialLevel.umap" beforeDir="false" afterPath="$PROJECT_DIR$/Content/Levels/ControlTutorialLevel.umap" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Content/StarterContent/Architecture/Floor_400x400.uasset" beforeDir="false" afterPath="$PROJECT_DIR$/Content/StarterContent/Architecture/Floor_400x400.uasset" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Content/StarterContent/Audio/Collapse01.uasset" beforeDir="false" afterPath="$PROJECT_DIR$/Content/StarterContent/Audio/Collapse01.uasset" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Content/StarterContent/Particles/P_Ambient_Dust.uasset" beforeDir="false" afterPath="$PROJECT_DIR$/Content/StarterContent/Particles/P_Ambient_Dust.uasset" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Source/EndlessVendetta/EndlessVendettaCharacter.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Source/EndlessVendetta/EndlessVendettaCharacter.cpp" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Source/EndlessVendetta/EndlessVendettaCharacter.h" beforeDir="false" afterPath="$PROJECT_DIR$/Source/EndlessVendetta/EndlessVendettaCharacter.h" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@ -129,7 +129,7 @@
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1705182847910</updated>
|
||||
<workItem from="1705182850227" duration="7499000" />
|
||||
<workItem from="1705182850227" duration="25480000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:22cfe5fb6fc5e12348a76a250e903d182d8950b6cb54aba5a557ed0a643791e5
|
||||
size 68896
|
||||
oid sha256:84374622c6dc77769d398e52fdd2dcacc7eab0bc4c651ac6ec3b77a019ed52f7
|
||||
size 68984
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1ee3f51a8d0ecfc39ba48c02249d224bdc21f8f9b52d06a2aaa4413ba55a6774
|
||||
size 3231094
|
||||
oid sha256:40716dd78ee18731e93233dd0ed13c534868e5e9521a172e8a033011af33363d
|
||||
size 3336963
|
||||
|
3
EndlessVendetta/Content/Ships/BP_SpaceShip.uasset
Normal file
3
EndlessVendetta/Content/Ships/BP_SpaceShip.uasset
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1886d755131470b6eac1e0d6c44cbf4295254703c8f65eb5e2b71b380fd3de6d
|
||||
size 37174
|
3
EndlessVendetta/Content/Ships/LandingZone.uasset
Normal file
3
EndlessVendetta/Content/Ships/LandingZone.uasset
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:db9d0fc8ce80a02b1e98bac5b9cde0ccfe6a8af33090148f6179911d95b82519
|
||||
size 95888
|
BIN
EndlessVendetta/Content/StarterContent/Audio/Collapse01.uasset
(Stored with Git LFS)
BIN
EndlessVendetta/Content/StarterContent/Audio/Collapse01.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
EndlessVendetta/Content/StarterContent/Particles/P_Ambient_Dust.uasset
(Stored with Git LFS)
BIN
EndlessVendetta/Content/StarterContent/Particles/P_Ambient_Dust.uasset
(Stored with Git LFS)
Binary file not shown.
@ -550,6 +550,12 @@ void AEndlessVendettaCharacter::Move(const FInputActionValue& Value)
|
||||
// input is a Vector2D
|
||||
FVector2D MovementVector = Value.Get<FVector2D>();
|
||||
|
||||
if (PlayerOnShip)
|
||||
{
|
||||
SpaceShip->MoveShip(MovementVector);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Controller != nullptr)
|
||||
{
|
||||
// add movement
|
||||
@ -611,6 +617,12 @@ void AEndlessVendettaCharacter::Look(const FInputActionValue& Value)
|
||||
// input is a Vector2D
|
||||
FVector2D LookAxisVector = Value.Get<FVector2D>();
|
||||
|
||||
if (PlayerOnShip)
|
||||
{
|
||||
SpaceShip->RotateShip(LookAxisVector);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Controller != nullptr)
|
||||
{
|
||||
// add yaw and pitch input to controller
|
||||
@ -654,4 +666,16 @@ void AEndlessVendettaCharacter::UpdateInventorySize(int Cols, int Rows)
|
||||
{
|
||||
UE_LOG(LogTemp, Warning, TEXT("No Vaild Inventory"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AEndlessVendettaCharacter::EnterShip(FTransform TakeoffLoc)
|
||||
{
|
||||
SpaceShip = GetWorld()->SpawnActor<ASpaceShip>(SpaceShipClass, TakeoffLoc.GetLocation(), TakeoffLoc.Rotator());
|
||||
PlayerOnShip = true;
|
||||
}
|
||||
|
||||
void AEndlessVendettaCharacter::ExitShip(FTransform ExitLoc)
|
||||
{
|
||||
UE_LOG(LogTemp, Warning, TEXT("Exitting Ship!!!"));
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "GadgetSystem/GadgetManager.h"
|
||||
#include "Inventory/InventoryComponent.h"
|
||||
#include "Pawn/VICharacter.h"
|
||||
#include "SpaceShip/SpaceShip.h"
|
||||
|
||||
#include "EndlessVendettaCharacter.generated.h"
|
||||
|
||||
@ -245,4 +246,14 @@ public:
|
||||
UInventoryComponent* InventoryComponent;
|
||||
UFUNCTION(Exec)
|
||||
void UpdateInventorySize(int Cols, int Rows);
|
||||
|
||||
// Space Ship
|
||||
private:
|
||||
bool PlayerOnShip = false;
|
||||
UPROPERTY(EditDefaultsOnly, Category = "Space Ship")
|
||||
TSubclassOf<ASpaceShip> SpaceShipClass;
|
||||
ASpaceShip* SpaceShip;
|
||||
public:
|
||||
void ExitShip(FTransform ExitLoc);
|
||||
void EnterShip(FTransform TakeoffLoc);
|
||||
};
|
||||
|
@ -0,0 +1,53 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "LandingZone.h"
|
||||
|
||||
#include "EndlessVendetta/EndlessVendettaCharacter.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
|
||||
// Sets default values
|
||||
ALandingZone::ALandingZone()
|
||||
{
|
||||
// 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;
|
||||
|
||||
}
|
||||
|
||||
void ALandingZone::UpdateAllLandingZones(bool Landing)
|
||||
{
|
||||
TArray<AActor*> AllLandingZones;
|
||||
UGameplayStatics::GetAllActorsOfClass(GetWorld(), ALandingZone::StaticClass(), AllLandingZones);
|
||||
for (auto LZ_Actor : AllLandingZones)
|
||||
{
|
||||
ALandingZone* LZ = Cast<ALandingZone>(LZ_Actor);
|
||||
Landing ? LZ->HideWaypoint() : LZ->ShowWaypoint();
|
||||
}
|
||||
}
|
||||
|
||||
void ALandingZone::Interact()
|
||||
{
|
||||
Takeoff();
|
||||
}
|
||||
|
||||
void ALandingZone::InteractPrompt()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void ALandingZone::Land()
|
||||
{
|
||||
AEndlessVendettaCharacter* PlayerChar = Cast<AEndlessVendettaCharacter>(GetWorld()->GetFirstPlayerController()->GetPawn());
|
||||
if (!IsValid(PlayerChar)) return;
|
||||
UpdateAllLandingZones(true);
|
||||
PlayerChar->ExitShip(LZ_ExitTransform);
|
||||
}
|
||||
|
||||
void ALandingZone::Takeoff()
|
||||
{
|
||||
AEndlessVendettaCharacter* PlayerChar = Cast<AEndlessVendettaCharacter>(GetWorld()->GetFirstPlayerController()->GetPawn());
|
||||
if (!IsValid(PlayerChar)) return;
|
||||
UpdateAllLandingZones(false);
|
||||
PlayerChar->EnterShip(LZ_TakeoffTransform);
|
||||
}
|
||||
|
@ -0,0 +1,46 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "EndlessVendetta/InteractionInterface.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "LandingZone.generated.h"
|
||||
|
||||
UCLASS()
|
||||
class ENDLESSVENDETTA_API ALandingZone : public AActor, public IInteractionInterface
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY(EditAnywhere, Category = "Landing Zone")
|
||||
FTransform LZ_ExitTransform;
|
||||
UPROPERTY(EditAnywhere, Category = "Landing Zone")
|
||||
FTransform LZ_TakeoffTransform;
|
||||
|
||||
// Hides or shows key aesthetic features of LZ's based on if the player is landing or not
|
||||
void UpdateAllLandingZones(bool Landing);
|
||||
|
||||
protected:
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Landing Zone")
|
||||
bool IsHomeBase_LZ = false;
|
||||
|
||||
// Allows player to enter their ship through a LZ
|
||||
void Interact() override;
|
||||
void InteractPrompt() override;
|
||||
|
||||
public:
|
||||
// Sets default values for this actor's properties
|
||||
ALandingZone();
|
||||
|
||||
// Ran when a player takes off from any LZ in the world
|
||||
UFUNCTION(BlueprintImplementableEvent)
|
||||
void ShowWaypoint();
|
||||
// Ran when player lands at any LZ in the world
|
||||
UFUNCTION(BlueprintImplementableEvent)
|
||||
void HideWaypoint();
|
||||
|
||||
// Updates all LZ's, then runs exit ship func on player and passes the exit transform
|
||||
void Land();
|
||||
// Updates all LZ's, then runs enter ship func on player passing the correct takeoff transform
|
||||
void Takeoff();
|
||||
};
|
@ -0,0 +1,64 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "SpaceShip.h"
|
||||
|
||||
#include "Components/ArrowComponent.h"
|
||||
|
||||
// Sets default values
|
||||
ASpaceShip::ASpaceShip()
|
||||
{
|
||||
// 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;
|
||||
}
|
||||
|
||||
// Called when the game starts or when spawned
|
||||
void ASpaceShip::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
PlayersCharacter = GetWorld()->GetFirstPlayerController()->GetCharacter();
|
||||
PlayersController = PlayersCharacter->GetController();
|
||||
TArray<UActorComponent*> SeatComps = GetComponentsByTag(UArrowComponent::StaticClass(), FName("Seat"));
|
||||
SeatComponent = Cast<UArrowComponent>(SeatComps[0]);
|
||||
}
|
||||
|
||||
// Called every frame
|
||||
void ASpaceShip::Tick(float DeltaTime)
|
||||
{
|
||||
Super::Tick(DeltaTime);
|
||||
|
||||
PlayersCharacter->SetActorLocation(SeatComponent->GetComponentLocation());
|
||||
PlayersController->SetControlRotation(GetActorRotation());
|
||||
}
|
||||
|
||||
// Called to bind functionality to input
|
||||
void ASpaceShip::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
|
||||
{
|
||||
Super::SetupPlayerInputComponent(PlayerInputComponent);
|
||||
|
||||
}
|
||||
|
||||
void ASpaceShip::MoveShip(FVector2D MovementVector)
|
||||
{
|
||||
// Get ships direction vectors, and ignore their pitch
|
||||
FVector ForwardVector = GetActorForwardVector();
|
||||
ForwardVector.Z = 0;
|
||||
FVector RightVector = GetActorRightVector();
|
||||
RightVector.Y += RightVector.Z;
|
||||
RightVector.Z = 0;
|
||||
UE_LOG(LogTemp, Warning, TEXT("Forward:%f, Sideways:%f"), MovementVector.Y, MovementVector.X);
|
||||
AddMovementInput(ForwardVector, MovementVector.Y, true);
|
||||
AddMovementInput(RightVector, MovementVector.X, true);
|
||||
}
|
||||
|
||||
void ASpaceShip::RotateShip(FVector2D LookAxisVector)
|
||||
{
|
||||
FRotator shipRotator = GetActorRotation();
|
||||
shipRotator.Yaw += LookAxisVector.X;
|
||||
shipRotator.Pitch -= LookAxisVector.Y;
|
||||
shipRotator.Pitch = shipRotator.Pitch < -30 ? -30 : shipRotator.Pitch;
|
||||
shipRotator.Pitch = shipRotator.Pitch > 30 ? 30 : shipRotator.Pitch;
|
||||
SetActorRotation(shipRotator);
|
||||
}
|
||||
|
37
EndlessVendetta/Source/EndlessVendetta/SpaceShip/SpaceShip.h
Normal file
37
EndlessVendetta/Source/EndlessVendetta/SpaceShip/SpaceShip.h
Normal file
@ -0,0 +1,37 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Character.h"
|
||||
|
||||
#include "SpaceShip.generated.h"
|
||||
|
||||
UCLASS()
|
||||
class ENDLESSVENDETTA_API ASpaceShip : public ACharacter
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
ACharacter* PlayersCharacter;
|
||||
AController* PlayersController;
|
||||
UArrowComponent* SeatComponent;
|
||||
|
||||
protected:
|
||||
// Called when the game starts or when spawned
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
public:
|
||||
// Sets default values for this pawn's properties
|
||||
ASpaceShip();
|
||||
|
||||
// Called every frame
|
||||
virtual void Tick(float DeltaTime) override;
|
||||
|
||||
// Called to bind functionality to input
|
||||
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
|
||||
|
||||
void MoveShip(FVector2D MovementVector);
|
||||
|
||||
void RotateShip(FVector2D LookAxisVector);
|
||||
|
||||
};
|
Loading…
Reference in New Issue
Block a user