Level Update

This commit is contained in:
SoehnkeBerndt 2020-12-13 21:26:31 +01:00
commit c4dfe3487a
50 changed files with 156 additions and 186 deletions

View File

@ -18,6 +18,24 @@
{
"Name": "OculusVR",
"Enabled": false
},
{
"Name": "MeshEditor",
"Enabled": true
},
{
"Name": "Shotgun",
"Enabled": true,
"SupportedTargetPlatforms": [
"Win64"
]
}
],
"TargetPlatforms": [
"HTML5",
"LinuxNoEditor",
"MacNoEditor",
"WindowsNoEditor",
"AllDesktop"
]
}

View File

@ -60,3 +60,4 @@ InitialAverageFrameRate=0.016667
PhysXTreeRebuildRate=10
DefaultBroadphaseSettings=(bUseMBPOnClient=False,bUseMBPOnServer=False,MBPBounds=(Min=(X=0.000000,Y=0.000000,Z=0.000000),Max=(X=0.000000,Y=0.000000,Z=0.000000),IsValid=0),MBPNumSubdivs=2)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,4 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "OpenDoor.h"
#include "Components/AudioComponent.h"
#include "Components/PrimitiveComponent.h"
#include "Engine/World.h"
#include "GameFramework/Actor.h"
@ -22,32 +20,6 @@ UOpenDoor::UOpenDoor()
void UOpenDoor::BeginPlay()
{
Super::BeginPlay();
InitialYaw = GetOwner()->GetActorRotation().Yaw;
CurrentYaw = InitialYaw;
TargetAngleOfOpenDoor += InitialYaw;
FindPressurePlateComponent();
FindAudioComponent();
//ActorThatOpens = GetWorld()->GetFirstPlayerController()->GetPawn();
}
void UOpenDoor::FindAudioComponent()
{
AudioComponent = GetOwner()->FindComponentByClass<UAudioComponent>(); //<> for function templates
if (!AudioComponent) // same as if(PhysicsHandle == nullptr)
{
UE_LOG(LogTemp, Error, TEXT("No Audio component found on: %s !"), *GetOwner()->GetName());
}
}
void UOpenDoor::FindPressurePlateComponent()
{
if (!PressurePlate)
{
UE_LOG(LogTemp, Error, TEXT("%s has OpenDoor on it, but no PressurePlate set!"), *GetOwner()->GetName());
}
}
// Called every frame
@ -60,76 +32,36 @@ void UOpenDoor::TickComponent(float DeltaTime, ELevelTick TickType, FActorCompon
//if(PressurePlate && PressurePlate->IsOverlappingActor(ActorThatOpens)) //prüft erst, ob es ein actor gibt
if (TotalMass() >= MassToOpenDoor)
{
UE_LOG(LogTemp, Warning, TEXT("TEST OPEN DOOR"));
OpenDoor(DeltaTime);
OpenDoor();
//DoorLastOpened When the door was opened
DoorLastOpened = GetWorld()->GetTimeSeconds();
doorLastOpened = GetWorld()->GetTimeSeconds();
}
else
else if(open)
{
//if door has been open longer than DoorCloseDelay
//if(GetWorld()->GetTimeSeconds() > DoorLastOpened + DoorDelay)
if (GetWorld()->GetTimeSeconds() - DoorLastOpened > DoorDelay)
CloseDoor(DeltaTime);
if (GetWorld()->GetTimeSeconds() - doorLastOpened > RotationDelay)
CloseDoor();
}
if(rotating)
{
if (GetOwner()->GetActorRotation().Equals(targetRotation, 1.0))
{
rotating = false;
}
else
{
GetOwner()->AddActorLocalRotation(DeltaTime * OpenDoorRotationSpeed * FRotator(0.0f, 1.0f, 0.0f));
}
}
}
void UOpenDoor::OpenDoor(float DeltaTime)
void UOpenDoor::OpenDoor()
{
FRotator DoorRotation = GetOwner()->GetActorRotation();
//CurrentYaw = FMath::FInterpTo(CurrentYaw, TargetYaw, DeltaTime, 2.f);
CurrentYaw = FMath::Lerp(CurrentYaw, TargetAngleOfOpenDoor, DeltaTime * OpenDoorRotationSpeed);
//complex Interpolation
DoorRotation.Yaw = CurrentYaw;
rotateDoor(DoorRotation);
CloseDoorSoundHasBeenPlayed = false;
if (!AudioComponent) { return; }
if (!OpenDoorSoundHasBeenPlayed)
{
AudioComponent->Play();
OpenDoorSoundHasBeenPlayed = true;
}
FRotator rotation = GetOwner()->GetActorRotation();
rotation.Yaw = TargetAngle;
Rotate(rotation);
open = true;
}
void UOpenDoor::CloseDoor(float DeltaTime)
void UOpenDoor::CloseDoor()
{
FRotator DoorRotation = GetOwner()->GetActorRotation();
CurrentYaw = FMath::Lerp(CurrentYaw, InitialYaw, DeltaTime * CloseDoorRotationSpeed);
DoorRotation.Yaw = CurrentYaw;
rotateDoor(DoorRotation);
OpenDoorSoundHasBeenPlayed = false;
if (!AudioComponent) { return; }
if (!CloseDoorSoundHasBeenPlayed)
{
AudioComponent->Play();
CloseDoorSoundHasBeenPlayed = true;
}
FRotator rotation = GetOwner()->GetActorRotation();
rotation.Yaw = 0.0f;
Rotate(rotation);
open = false;
}
void UOpenDoor::rotateDoor(FRotator targetRotation)
{
this->targetRotation = targetRotation;
rotating = true;
}
float UOpenDoor::TotalMass() const
{
float TotalMass = 0.f;
@ -147,32 +79,4 @@ float UOpenDoor::TotalMass() const
}
return TotalMass;
}
//Notes
//UE_LOG(LogTemp, Warning, TEXT("%f"), TargetYaw);
// UE_LOG(LogTemp, Warning, TEXT("%s"), *GetOwner()->GetActorRotation().ToString());
// UE_LOG(LogTemp, Warning, TEXT("The Yaw is: %f"), GetOwner()->GetActorRotation().Yaw);
// FRotator CurrentRotation = GetOwner()->GetActorRotation();
// FMath::Lerp(CurrentRotation, FRotator(0.f,90.f,0.f), 0.2f);
// GetOwner()->SetActorRotation(CurrentRotation);
// UE_LOG(LogTemp, Warning, TEXT("The Yaw is: %f"), CurrentRotation.Yaw);
//TargetYaw = 90.f;
// FRotator OpenDoor(0.f, 0.f, 0.f);
// //OpenDoor.Yaw = FMath::Lerp(CurrentYaw, TargetYaw, 0.02f); //complex Interpolation
// OpenDoor.Yaw = FMath::FInterpTo(CurrentYaw, TargetYaw, DeltaTime, 2.f);//complex Interpolation Framerate unabhängig wegen Deltatime
// //OpenDoor.Yaw = FMath::FInterpConstantTo(CurrentYaw, TargetYaw, DeltaTime, 0.02f); //lineare interpolation
// GetOwner()->SetActorRotation(OpenDoor);
//float f = 10.f;
//FRotator CurrentRotation = GetOwner()->GetActorRotation();
//FRotator Rotation = FRotator(0.f, -90.f, 0.f);
//FRotator OpenDoor={float,float,float}
//FRotator OpenDoor{float,float,float}
//FRotator OpenDoor(float,float,float)
//CurrentRotation.Yaw = 90.f;
//GetOwner()->SetActorRotation(CurrentRotation);
}

View File

@ -1,6 +1,8 @@
#pragma once
#include "CoreMinimal.h"
#include "RotatingActor.h"
#include "Components/AudioComponent.h"
#include "Components/ActorComponent.h"
#include "Engine/TriggerVolume.h"
@ -10,7 +12,7 @@
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class BUILDINGESCAPE_API UOpenDoor : public UActorComponent
class BUILDINGESCAPE_API UOpenDoor : public URotatingActor
{
GENERATED_BODY()
@ -24,46 +26,19 @@ protected:
public:
// Called every frame
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
void OpenDoor(float DeltaTime);
void CloseDoor(float DeltaTime);
void OpenDoor();
void CloseDoor();
float TotalMass() const;
void FindAudioComponent();
void FindPressurePlateComponent();
//Tracks if Sound has been Played
bool OpenDoorSoundHasBeenPlayed = false;
bool CloseDoorSoundHasBeenPlayed = true;
private:
float InitialYaw;
float CurrentYaw;
float DoorLastOpened = 0.f;
bool HasSoundBeenPlayed = false;
bool rotating = false;
FRotator targetRotation;
void rotateDoor(FRotator targetRotation);
bool open = false;
float doorLastOpened;
UPROPERTY(EditAnywhere)
float MassToOpenDoor = 50.f;
UPROPERTY(EditAnywhere)
float TargetAngleOfOpenDoor =90.f;
UPROPERTY(EditAnywhere)
float OpenDoorRotationSpeed = 2.f;
UPROPERTY(EditAnywhere)
float CloseDoorRotationSpeed = 0.5f;
UPROPERTY(EditAnywhere)
float DoorDelay = 2.f; //2 second delay
UPROPERTY(EditAnywhere)
ATriggerVolume* PressurePlate = nullptr;
UPROPERTY()
UAudioComponent* AudioComponent = nullptr;
};

View File

@ -0,0 +1,57 @@
#include "RotatingActor.h"
URotatingActor::URotatingActor()
{
PrimaryComponentTick.bCanEverTick = true;
}
void URotatingActor::BeginPlay()
{
Super::BeginPlay();
AudioComponent = GetOwner()->FindComponentByClass<UAudioComponent>();
if (!AudioComponent)
{
UE_LOG(LogTemp, Error, TEXT("No audio component found on: %s !"), *GetOwner()->GetName());
}
}
void URotatingActor::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
if (rotating)
{
if (GetOwner()->GetActorRotation().Equals(targetRotation, 1.0f))
{
rotating = false;
}else
{
GetOwner()->AddActorLocalRotation(DeltaTime * RotationSpeed * FRotator(0.0f, tempRotation, 0.0f));
}
}
}
void URotatingActor::Rotate(const FRotator TargetRotation)
{
this->targetRotation = TargetRotation;
rotating = true;
tempRotation = (TargetRotation.Yaw < 0) ? -1.f : 1.f;
if(Negative)
{
tempRotation = (TargetRotation.Yaw < 0) ? 1.f : -1.f;
}
if(AudioComponent != nullptr && !soundHasBeenPlayed)
{
AudioComponent->Play();
soundHasBeenPlayed = true;
}
}
void URotatingActor::Rotate()
{
FRotator rotation = GetOwner()->GetActorRotation();
rotation.Yaw = TargetAngle;
Rotate(rotation);
}

View File

@ -0,0 +1,51 @@
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Components/ActorComponent.h"
#include "Components/AudioComponent.h"
#include "RotatingActor.generated.h"
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class BUILDINGESCAPE_API URotatingActor : public UActorComponent
{
GENERATED_BODY()
public:
URotatingActor();
protected:
virtual void BeginPlay() override;
void Rotate(FRotator TargetRotation);
UFUNCTION()
void Rotate();
public:
virtual void TickComponent(float DeltaTime, ELevelTick TickType,
FActorComponentTickFunction* ThisTickFunction) override;
UPROPERTY(EditAnywhere)
float TargetAngle = 90.0f;
UPROPERTY(EditAnywhere)
UAudioComponent * AudioComponent;
UPROPERTY(EditAnywhere)
float RotationSpeed = 15.f;
UPROPERTY(EditAnywhere)
float RotationDelay = 2.f;
UPROPERTY(EditAnywhere)
bool Negative = false;
private:
FRotator targetRotation;
bool rotating;
bool soundHasBeenPlayed;
float tempRotation;
};

View File

@ -8,11 +8,6 @@ UTriggerOpenDoor::UTriggerOpenDoor()
void UTriggerOpenDoor::BeginPlay()
{
Super::BeginPlay();
AudioComponent = GetOwner()->FindComponentByClass<UAudioComponent>();
if (!AudioComponent)
{
UE_LOG(LogTemp, Error, TEXT("No audio component found on: %s !"), *GetOwner()->GetName());
}
if(!TriggerVolume)
{
UE_LOG(LogTemp, Error, TEXT("No trigger volume found on: %s !"), *GetOwner()->GetName());
@ -24,8 +19,7 @@ void UTriggerOpenDoor::TickComponent(float DeltaTime, ELevelTick TickType,
FActorComponentTickFunction* ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
if (!doorOpen)
{
if(!TriggerVolume)
{
return;
@ -35,25 +29,6 @@ void UTriggerOpenDoor::TickComponent(float DeltaTime, ELevelTick TickType,
TriggerVolume->GetOverlappingActors(overlappingActors);
if (overlappingActors.Num() >= 1)
{
if (AudioComponent)
{
AudioComponent->Play();
}
doorOpen = true;
opening = true;
currentRotation = GetOwner()->GetActorRotation();
Rotate();
}
}
if (opening)
{
if (GetOwner()->GetActorRotation().Equals(TargetRotation, 1.0))
{
opening = false;
}
else
{
GetOwner()->AddActorLocalRotation(DeltaTime * TargetSpeed);
}
}
}

View File

@ -3,6 +3,8 @@
#pragma once
#include "CoreMinimal.h"
#include "RotatingActor.h"
#include "Components/ActorComponent.h"
#include "Components/AudioComponent.h"
#include "Engine/TriggerVolume.h"
@ -11,7 +13,7 @@
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class BUILDINGESCAPE_API UTriggerOpenDoor : public UActorComponent
class BUILDINGESCAPE_API UTriggerOpenDoor : public URotatingActor
{
GENERATED_BODY()
@ -19,24 +21,11 @@ public:
UTriggerOpenDoor();
virtual void TickComponent(float DeltaTime, ELevelTick TickType,
FActorComponentTickFunction* ThisTickFunction) override;
UPROPERTY(EditAnywhere)
FRotator TargetRotation = FRotator(00.0f, 90.0f, 0.0f);
UPROPERTY(EditAnywhere)
FRotator TargetSpeed = FRotator(0.0f, 1.0f, 0.0f);
UPROPERTY(EditAnywhere)
ATriggerVolume * TriggerVolume = nullptr;
UPROPERTY(EditAnywhere)
UAudioComponent * AudioComponent = nullptr;
protected:
virtual void BeginPlay() override;
private:
bool doorOpen = false;
bool opening = false;
FRotator currentRotation;
};